Este repositório contém a implementação da análise sintática para um compilador desenvolvido em Haskell. O projeto faz parte da disciplina de Compiladores do Departamento de Ciência da Computação da UDESC, Joinville. Esta é a primeira fase do projeto, com as próximas etapas incluindo a análise semântica (verificação de tipos) e a geração de código a partir da representação intermediária.
O compilador segue um conjunto de produções de gramática que definem a estrutura da linguagem a ser compilada. A estrutura principal inclui:
- Programa
- Funções
- Tipos de retorno
- Declaração de parâmetros
- Bloco principal
- Comandos
A linguagem permite expressões relacionais e lógicas com operadores como <, >, <=, >=, == e /=. Além disso, os operadores lógicos &&, || e ! estão disponíveis. Operadores aritméticos (+, -, *, /) seguem a precedência usual. As expressões podem conter identificadores de variáveis, constantes inteiras, constantes com ponto flutuante e chamadas de funções. O uso de parênteses é permitido para alterar a ordem de avaliação.
A análise léxica define tokens, como identificadores (id), constantes inteiras, constantes com ponto flutuante e constantes de cadeia de caracteres (literais).
O projeto está organizado em vários arquivos, cada um com uma função específica:
Comandos.hs
: Contém definições e funções relacionadas à análise de comandos na linguagem.DataTypes.hs
: Define os tipos de dados utilizados no compilador, comoTipo
,TCons
,Expr
,ExprR
,ExprL
,Var
,Funcao
,Programa
,Bloco
eComando
.Lex.hs
: Lida com a análise léxica e define os tokens da linguagem, como operadores e palavras-chave.Logico.hs
: Contém funções relacionadas à análise de expressões lógicas e operadores lógicos.Main.hs
: O arquivo principal que chama o analisador do compilador para processar o código-fonte.Makefile
: Um arquivo de script para compilar e executar o código.Parametro.hs
: Lida com a análise de parâmetros e declarações na linguagem.Programa.hs
: Contém definições e funções relacionadas à análise de funções e programas na linguagem.Relacional.hs
: Define operadores relacionais e funções relacionadas à análise desses operadores.Tabelas.hs
: Define tabelas de precedência para operadores aritméticos e lógicos, além de funções relacionadas à análise de tipos de dados.
Para compilar e executar o compilador, siga estas etapas:
-
Certifique-se de ter o compilador GHC (Glasgow Haskell Compiler) instalado no seu sistema. Você pode baixá-lo em https://www.haskell.org/ghc/.
-
Clone este repositório:
git clone https://github.com/ana-athayde/analise_sintatica_compilador_haskell
-
Navegue até o diretório do projeto:
cd analise_sintatica_compilador_haskell
-
Compile o projeto com o comando
make
:make
-
Isso criará um executável chamado "Main".
-
Execute o compilador com o comando:
./Main
Este repositório inclui um arquivo de documentação em formato PDF que fornece detalhes abrangentes sobre a implementação da análise sintática do compilador em Haskell. A documentação contém informações sobre as produções da gramática, a estrutura do código, os tipos de dados utilizados e muito mais.
Certifique-se de verificar a documentação para obter insights adicionais sobre o projeto e sua implementação.
Este projeto é a primeira fase do desenvolvimento do compilador. As próximas etapas incluem a análise semântica (verificação de tipos) e a geração de código a partir da representação intermediária. Estamos animados para continuar aprimorando e expandindo este compilador.
Se você tiver alguma dúvida ou quiser contribuir para o projeto, sinta-se à vontade para entrar em contato ou abrir uma issue neste repositório. Obrigado por conferir nosso trabalho!