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: