Este exercício tem como objetivo testar a totalidade do seu compilador de Pascal simplificado, conforme implementação feita seguindo as especificações do livro texto1.
Este problema irá testar desde a Análise Léxica, Análise Sintática, até a geração de código MEPA.
O código fonte PAS será passado como o primeiro argumento ao seu programa, ou seja, o seu programa será invocado da seguinte maneira:
./meucompilador arquivo.pas
O seu programa deverá imprimir na tela um código MEPA equivalente ao código Pascal dado como entrada.
Você pode, se assim desejar, imprimir outras mensagens, mas as
coloque na saída de erro (stderr
).
in.pas
program olamundo(input,output);
begin
write(42)
end.
INPP
CRCT 42
IMPR
PARA
in.pas
program exemplo5 (input, output);
var n, k : integer;
f1, f2, f3 : integer;
begin
read (n);
f1:=0; f2:=1; k:=1;
while k<=n do
begin
f3:=f1+f2;
f1:=f2;
f2:=f3;
k:=k+1;
write(k)
end;
write (n);
write (f1)
end.
INPP
AMEM 5
LEIT
ARMZ 0, 0
CRCT 0
ARMZ 0, 2
CRCT 1
ARMZ 0, 3
CRCT 1
ARMZ 0, 1
DSVS R00
R00: NADA
CRVL 0, 1
CRVL 0, 0
CMEG
DSVF R01
CRVL 0, 2
CRVL 0, 3
SOMA
ARMZ 0, 4
CRVL 0, 3
ARMZ 0, 2
CRVL 0, 4
ARMZ 0, 3
CRVL 0, 1
CRCT 1
SOMA
ARMZ 0, 1
CRVL 0, 1
IMPR
DSVS R00
R01: NADA
CRVL 0, 0
IMPR
CRVL 0, 2
IMPR
PARA
O código MEPA gerado pelo seu compilador, será testado com um novo conjunto de entradas diversos afim de validar o funcionamento do código gerado.
Este problema possui: