Construção de Compiladores

Primeiro Semestre de 2001

Prof. José de Oliveira Guimarães

 

Primeiro Trabalho.

Prazo de Entrega: 12 de Abril.

Trabalho individual.

 

Dada a gramática

 

Program ::= ‘s’ Point CommandList

CommandList ::= Command | Command CommandList

Command ::= ‘m’ Point | ‘c’ Number | ‘u’ | ‘d’

Point ::= Number Number

Number ::= qualquer dígito

 

Assuma  que há uma caneta inicialmente no ponto dado após ‘s’. O comando ‘m’move a caneta para outro ponto, fazendo uma reta entre este novo ponto e o anterior. A caneta pode ser levantada do papel por ‘u’ (de Up) e abaixada por ‘d’ (Down). O comando ‘c’ n  faz um círculo de raio n ao redor do ponto corrente. Assim, a sentença

     s 0 0

     m 4 0

     m 4 4

     m 0 4

     m 0 0

faria um quadrado.

            O código em C a ser gerado para cada um dos comandos é dado pela tabela abaixo.

Comando

Código em C

s x y

start(x, y);

c n

circle(n);

u

upPen();

d

downPen();

m x y

lineTo(x, y);

 

Faça os seguintes programas usando a gramática dada acima:

 

a) um analisador sintático para a gramática;

b) o item a) mais a geração de código. Coloque a geração no próprio analisador sintático;

c) o item a) mais a construção da ASA. Coloque a geração de código em métodos da ASA

 

Obs: