Feito por: Tamiris Oliveira e Diego Reis
Compilador front-end para a linguagem X25b, uma linguagem de algoritmos hipotética utilizada para demonstração de conceitos de compiladores.
ava2/
├── lexer.l # Analisador Léxico (FLEX)
├── parser.y # Analisador Sintático LALR(1) (Bison)
├── ast.h # Definição da Árvore Sintática Abstrata
├── ast.c # Implementação da AST
├── semantic.h # Cabeçalho do Analisador Semântico
├── semantic.c # Implementação do Analisador Semântico
├── main.c # Programa Principal
├── Makefile # Script de compilação
├── teste.x25b # Programa de teste (item f)
├── fatorial.x25b # Exemplo de fatorial
└── README.md # Este arquivo
- GCC (GNU Compiler Collection)
- Flex (Fast Lexical Analyzer Generator)
- Bison (GNU Parser Generator)
sudo apt-get install build-essential flex bisonmake./x25b [opcoes] <arquivo.x25b>-a, --ast- Mostra a árvore sintática abstrata-t, --tabela- Mostra a tabela de símbolos-v, --verbose- Modo verbose-h, --help- Mostra ajuda
# Compilar o programa de teste
./x25b teste.x25b
# Compilar mostrando a AST
./x25b -a fatorial.x25b
# Usar o make para testes
make testPROGRAMA {nome_do_programa}
{DECLARACOES}
<declarações de variáveis>
{ALGORITMO}
<comandos>
FIMPROG
INTEIRO- Números inteirosREAL- Números reais (usar vírgula como separador decimal)LISTAINT- Array de inteiros (tamanho 10-40)LISTAREAL- Array de reais (tamanho 10-40)
.MAQ.- Maior que (>).MAI.- Maior ou igual (>=).MEQ.- Menor que (<).MEI.- Menor ou igual (<=).IGU.- Igual (=).DIF.- Diferente (≠)
.OU.- Ou lógico.E.- E lógico.NAO.- Negação
- Atribuição:
variavel := expressao - Entrada:
LEIA variavelouLEIA var1, var2 - Saída:
ESCREVA expressaoouESCREVA 'texto' - Seleção:
SE condição ENTAO comando [SENAO comando] FIMSE - Repetição:
ENQUANTO condição FACA comando FIMENQ
- Reconhece tokens da linguagem
- Identifica palavras reservadas
- Processa literais e identificadores
- Trata comentários
- Gramática livre de contexto
- Constrói árvore sintática abstrata
- Reporta erros sintáticos
- Tabela de símbolos
- Verificação de declaração de variáveis
- Verificação de tipos
- Compatibilidade de operações
O compilador reporta:
- Sucesso: "COMPILACAO CONCLUIDA COM SUCESSO!"
- Erros léxicos com linha e coluna
- Erros sintáticos com localização
- Erros semânticos (variáveis não declaradas, tipos incompatíveis, etc.)
Avaliação Parcial 2 - Disciplina de Compiladores