Construção de Compiladores

Primeiro Semestre de 2002

Prof. José de Oliveira Guimarães

 

Primeiro Trabalho.

Prazo de Entrega:

      14 de Junho para ambas as turmas

 

Trabalho individual.

 

Dada a gramática

 

Program ::= ‘s’ Point CommandList

CommandList ::= Command | Command CommandList

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

Point ::= “(” Number “,” Number “)”

Number ::= qualquer dígito

 

Assuma  que há uma caneta inicialmente no ponto dado após ‘s’, de Start. 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. O comando “q n” faz um quadrado de lado n sendo que o ponto corrente é o canto inferior esquerdo do quadrado. Assim, a sentença

     s (0, 0)

     m (4, 0)

     m (4, 4)

     m (0, 4)

     m (0, 0)

faria um quadrado e seria equivalente a “s (0, 0)  q 4”.

            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);

q n

square(n);

 

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 em C. 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: