Construção de Compiladores

Primeiro Semestre de 2002

Prof. José de Oliveira Guimarães

 

Terceiro Trabalho.

Prazo de Entrega:

      23 de Agosto para ambas as turmas

 

Trabalho em grupos de no máximo duas pessoas.

 

            O objetivo deste trabalho é fazer a parte c) do primeiro trabalho em CUP e JLex. O texto abaixo apenas reproduz o texto do primeiro trabalho. Lembre-se de não cometer mais alguns erros básicos que muitos cometeram no primeiro trabalho. Veja na página que erros foram estes.

 

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

 

Para a gramática dada acima, faça  a análise sintática mais a construção da ASA. Coloque a geração de código em métodos da ASA.

 

Obs: