Ícone Hollow Knight

Aguarde um pouquinho ... As informações do DEV estão carregando!

Contato

yunguerdvorak@hotmail.com

+55 (22) 99205-6168

Cool Compiler

Projeto: Programa em Python

Tipo: Universitário

Sobre: Um Compilador para Cool

O programa Cool Compiler foi feito para a disciplina de Compiladores da UFF, criado em Python com auxílio das bibliotecas Yacc e Lex. Tem como objetivo ser um Compilador para linguagem Cool e depois fazer a transpilação para Bril.

Para executar o programa é necessário fazer o download do mesmo no GitHub, assim que feito o download, execute o gerador.py, passando como argumento o nome do arquivo em Cool para a compilação.

O Desafio

O desafio na criação desse projeto começa em compreender como funciona um compilador, ele é normalmente separado em três partes: léxica, sintática e semântica. E cada uma dessas partes tem responsabilidades ligadas entre si, sem alguma dessas partes o compilador não funciona. Também tivemos no projeto a parte de transpilação que nada mais é que, em poucas palavras, traduzir um código de uma linguagem para outra, o mais comum para um compilador seria traduzir a linguagem compilada para a linguagem da máquina, ou seja, os binários.

Além disso, antes de pôr em prática estudo de como funciona cada parte do compilador e da transpilação, também foi necessário o estudo da cada uma das linguagens, tanto o Cool para a parte de compilação, assim como o Bril para a parte de transpilação, pois sem entender como funciona a linguagem não é possível definir características importantes do código para o funcionamento do mesmo, como, por exemplo, palavras reservadas e como funciona a sua semântica.

Desafios

Estruturando o Código

Para a estruturação do código nas partes léxica e sintática, foi utilizada as bibliotecas lex e yacc respectivamente, o que torna a estruturação do código nessas partes algo simples, somente necessário a definição das palavras reservadas e seus tokens na parte léxica, e na parte sintática, é necessário definir a regex da linguagem, definindo quais caminhos se pode seguir.

Já para a parte semântica e a parte de transpilação, foi algo bem mais complexo e braçal. Na parte semântica foi utilizada uma função recursiva que utiliza de outras funções auxiliares para poder fazer a checagem da linguagem. E na parte de transpilação foi utilizado funções que reescreviam o código para outra linguagem em um arquivo de texto.

Estruturação do Código

Exemplos do Código

Code Preview