Qual a data limite de entrega da primeira parte do projecto (checkpoint)?

Não está definida. Tal como diz no enunciado do projecto na secção 4.:

"Para o checkpoint considera-se os ficheiros do projecto, existentes no servidor cvs, com a etiqueta (tag) checkpoint ou a última versão à data da avaliação (quer essa versão esteja funcional ou não) caso a etiqueta checkpoint não exista."

Cabe aos alunos colocarem a etiqueta quando julgarem ter atingido os objectivos da primeira parte, descritos na secção 2.3. do enunciado do projecto.

Sou obrigado a usar a função printNode fornecida?

Não é obrigatório usarem o printNode nem é obrigatório usarem as estruturas de dados fornecidas.

No entanto, só faz sentido não usarem o printNode no caso em que usem uma implementação própria da árvore sintáctica.

NO ENTANTO a rotina a usar deve produzir um output IGUAL ao do printNode.

Qual o tipo de dados retornado por uma expressão de indexação? Como imprimir?

A expressão de indexação devolve um valor de 4 bytes de tipo inteiro (number em frac). Como tal a impressão deve recorrer à rotina printi, de impressão de inteiros.

Considerem o seguinte código:

1: number y := 35;
2: number x := &y;
3: [x]!
4: x!
A linha 3 imprime '35'.
A linha 4 imprime o endereço de memória de y.

Não esquecer que o código seguinte também deve ser aceite:

1: string s := "ola";
2: number x := &s;
3: number y := 0;
4: y := [x] + 5;
5: y!
6: x!

Na linha 4 são lidos 4 bytes de memória e somados algebricamente com 5.
Na linha 5 é impresso o resultado da soma.
A linha 6 imprime o endereço de memória de s.

Chama-se a atenção para o facto da instrução de reserva de memória na pilha (#) alocar espaço na pilha e não no heap, sendo o número indicado em bytes e não em inteiros. Não houve alteração de enunciado, sempre foi assim, pelo que não há (nem tem de haver) referência a isto na errata.