DEV Community

Alex Sandro Garzão
Alex Sandro Garzão

Posted on

Compilando o "Hello world" em Pascal

Como citei anteriormente, eu iria iniciar o projeto de um novo compilador, open source, em Go. Basicamente, o POJ (Pascal on the JVM) possibilita que seja executado um subset de Pascal na JVM. Mais detalhes sobre o projeto nesta postagem aqui.

A primeira meta do projeto era conseguir compilar e executar o "Hello world" em Pascal na JVM. Apesar de parecer simples, envolvia uma série de tarefas como:

  • Definir qual gerador de parsers será utilizado: realizei alguns testes com o ANTLR e, apesar de alguns "perrengues" no início, optei por ele;
  • Encontrar uma gramática de Pascal pronta no formato do ANTLR: isso foi bem tranquilo, já que no repositório do ANTLR existe a gramática pronta para várias linguagens;
  • Ajustar a gramática para reconhecer o subset de Pascal esperado: no momento, apenas removi algumas sintaxes que realmente não serão utilizadas;
  • No parser identificar a definição de procedimentos no Pascal para determinar o bloco principal: isso gerou um pouco de trabalho por falta de conhecimento minha sobre a V4 do ANTLR (usei muito a V2 e V3 anteriormente);
  • Encontrar um montador Java Assembly: o mais conhecido é o Jasmin, mas não consegui rodar os exemplos simples (talvez por imperícia minha, enfim), então acabei optando pelo JASM porque rapidamente consegui executar os exemplos;
  • POJ gerar um código assembly Java válido para o JASM: aqui a dificuldade foi entender como a V4 do ANTLR funciona para obter os tokens no código em Go;
  • Criar o README inicial: tentei criar o mínimo necessário, mas já tem as instruções sobre como criar o binário, executar o POJ, executar o "Hello world" na JVM, entre outros.

No momento, dos exemplos citados na postagem anterior, apenas o exemplo do "Hello world" funciona no POJ. Claro que variações deste exemplo, como várias chamadas a writeln funcionam também:

program Hello;
begin
  writeln ('Hello world1!');
  writeln ('Hello world2!');
  writeln ('Hello world3!');
end.
Enter fullscreen mode Exit fullscreen mode

Para possibilitar a execução de outros programas em Pascal, nas próximas semanas vou focar em recursos como:

  • Declaração e uso de variáveis;
  • Entrada e saída de dados (terminal);
  • Instrução If/Else, For, Repeat e While;
  • Operações aritméticas;
  • Declaração e uso de procedures e funções;
  • Uso de funções recursivas.

Para quem se interessou, o repositório do projeto é este aqui.

Top comments (0)