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: