Neste estudo, será utilizado a linguagem de programação denominada Jack, desenvolvida no contexto do projeto Nand2Tetris. Essa é uma linguagem que foi desenvolvida como o objetivo didático, inclusive tendo vários elementos que facilitam o desenvolvimento de um compilador. Pode-se destacar as seguintes características:
float
Baixem aqui as ferramentas disponibilizadas pelo projeto nand2tetris. Documentação e as ferramentas, estão disponíveis no seguinte site.
A unidade básica de um programa Jack é a classe. Estas são definidas em um arquivo único e compilada separadamente.
Um programa Jack é uma coleção de uma ou mais classes, e uma classe é uma coleção de uma ou mais subrotinas. Uma classe em Jack tem a seguinte estrutura:
class ClassName {
variáveis de classe
variáveis de instância
construtor
funções (método de classe)
métódos (método de instância)
}
Sendo que para ser executado, é necessário que uma das classes seja nomeada como “Main”, e nela possua uma função nomeada de “main”, como no programa mínimo abaixo:
class Main {
function void main () {
var String nome;
let nome = Keyboard.readLine("Qual o seu nome? ");
do Output.printString("Ola ");
*do Output.printString(nome);*
do Output.println();
return;
}
}
Ferramentas necessárias para testar é o compilador e a maquina virtual.
Compilador, que dado um arquivo na linguagem Jack formato jack
, converte para o formato intermediário, que poderá ser executado por um emulador de maquina virtual
VM Emulator, é a máquina virtual, depois de compilado, basta abrir e executar o código no formato .vm
A linguagem Jack é uma linguagem estaticamente tipificada, ou seja, toda variável tem que ser declarada previamente e possuir um tipo de dado que não modifica durante a execução.
A linguagem suporta apenas três tipos de dados primitivos:
Tipo | Valores |
---|---|
int | 2 bytes (-32768 até 32767)) |
boolean | true e false |
char | unicode (‘a’, ‘x’, ‘+’, ‘%’, ...) |
Os tipos de dados compostos são criados a partir da especificação de novas classes.