Compilador Pascal -> Gerador MEPA

Compilador Pascal

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.

Entrada

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

Saída

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

Exemplo de entrada

in.pas

program olamundo(input,output);
begin
  write(42)
end.

Saída para o exemplo de entrada acima

INPP
CRCT 42
IMPR
PARA

Exemplo de entrada

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.

Saída para o exemplo de entrada acima

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

Atenção

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: