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: