- Trabalho para a matéria de Compiladores do Curso de Ciências da Computação - UFSJ
- Analisador Léxico, Sintático, Semântico e Gerador de Código para uma linguagem descrita como "Mini-C" programada em Python
- Para compilar digite no terminal:
python3 main.py
oumake run
- Requer instalado: Python3
-
O Analisador Léxico recebe como código-fonte o programa contido no arquivo "lexico.txt" dentro da pasta "input"
-
O programa enviado para o analisador deve seguir as seguintes especificações:
-
O analisador verificará cada linha do código até a quebra de linha
-
Os comentários são identificados por // e devem ser escritos no início da linha do código
-
Tudo que estiver escrito deve ser separado por um espaço, até mesmo das pontuações.
-
Qualquer palavra que não está na lista abaixo será considerada um erro léxico:
- Números
- Identificadores (palavras que não começam com caracteres especiais)
- Palavras reservadas em C (while, for, if, else, return, break, continue, switch, case, printf, scanf, void, main)
- Operadores matemáticos e lógicos
- Tipo de variável (int, float, double, float, long, char, "const")
- Pontuação
- Comentário
-
-
O Analisador Sintático irá verificar a ordem dos tokens e indicar os erros se preciso
-
A geração de código funciona da seguinte forma:
- O programa identificará a linha de código no analisador sintático e vai mandar para "gerador.py"
- O gerador irá converter o código de C para linguagem de máquina
- Declaração e atribuição pertencerão à parte .data e as outras funções ao .text
- O gerador de código possui limitações, mas ele poderá gerar:
- Atribuição
- Declaração
- Comparação
- Condição
- Laços de repetição
- Escrita (printf)
- Comentário
- Sobre o Analisador Semântico:
- O analisador semântico está contido no analisador sintático
- Identificará os seguintes erros:
- Variável já registrada
- Variável não registrada
- Variável não inicializada
- Variável declarada mas não usada
- Código inalcançável (Divisão por 0): (Warning)