Projeto Prático: Compilador Java-Pascal
Objetivo Geral
O objetivo deste projeto é a construção de um compilador completo para a linguagem Mini-Pascal, tendo como alvo a Java Virtual Machine (JVM). O compilador será desenvolvido utilizando a linguagem Java (versão 21+), explorando recursos modernos como Records, Sealed Classes e Pattern Matching.
A Linguagem Mini-Pascal
A linguagem alvo será um subconjunto do Pascal clássico, contendo: - Tipos básicos: integer, boolean, string. - Estruturas de controle: if-then-else, while, repeat-until. - Declaração de variáveis e constantes. - Entrada e Saída básica (readln, writeln).
Consulte aqui a Especificação Completa da Linguagem Mini-Pascal.
Cronograma e Etapas
O desenvolvimento é incremental. A tabela abaixo lista as etapas, datas de liberação/entrega e os objetivos de cada fase.
| Etapa | Data | Pontos | Descrição e Objetivos |
|---|---|---|---|
| 0 | 23/02 | - | Configuração e Versionamento Preparação do ambiente de desenvolvimento. Configuração do JDK 21, Maven e Git. Criação do projeto “Hello World” e repositório no GitLab. O objetivo é garantir que a dupla possui a infraestrutura necessária para trabalhar. |
| 1 | 16/03 | 02 | Infraestrutura e AST Definição da estrutura de dados central do compilador: a Árvore Sintática Abstrata (AST). Implementação da Tabela de Símbolos inicial e hierarquia de classes (Expression, Command, etc) usando Records. |
| 2 | 30/03 | 04 | Analisador Léxico Manual Implementação “na unha” do Scanner. O objetivo é ler o arquivo fonte caractere por caractere e transformá-lo em uma lista de Tokens (palavras reservadas, identificadores, números, operadores), tratando erros léxicos básicos. |
| 3 | 13/04 | 04 | Analisador Sintático LL Manual Implementação da lógica de Descida Recursiva (Recursive Descent). O parser consome os tokens para validar a gramática de expressões e comandos, construindo a AST em memória simultaneamente. |
| 4 | 11/05 | 04 | Gramática e Gerador ANTLR4 Substituição do parser manual por uma ferramenta profissional. Escrita da gramática .g4 para o ANTLR gerar o lexer/parser automaticamente. Uso do padrão Visitor para converter a árvore do ANTLR na sua AST. |
| 5 | 25/05 | 06 | Semântica 1: Escopo Validação de regras de declaração. O compilador deve percorrer a AST garantindo que toda variável usada foi declarada anteriormente e detectando duplicidades, respeitando regras de escopo aninhado. |
| 6 | 08/06 | 12 | Semântica 2: Tipos Verificação de consistência de tipos (Type Checking). Garantir que operações aritméticas, lógicas e atribuições sejam feitas entre tipos compatíveis (ex: não somar inteiro com booleano). |
| 7 | 29/06 | 08 | Geração de Código JVM A etapa final. Percorrer a AST validada e emitir instruções de Bytecode Java usando a biblioteca ASM. O resultado é um arquivo .class capaz de ser executado pela JVM. |
Avaliação e Pontuação
O projeto soma 40 pontos. A avaliação é contínua e verifica tanto a corretude do código quanto a participação equilibrada da dupla.
Para garantir a transparência e agilidade na correção, utilizaremos a seguinte estratégia de avaliação:
1. Suite de Testes do Professor
O professor manterá um repositório de testes contendo: - Testes Positivos: Códigos Mini-Pascal sintaticamente e semântica corretos. - Testes Negativos: Códigos com erros propositais (léxicos, sintáticos e semânticos).
2. Script de Avaliação
Espera-se que o projeto do aluno possua um ponto de entrada (Main) que aceite argumentos via linha de comando:
java -jar compilador.jar --stage 2 input.pasO script do professor automatizará: 1. Execução: Rodará o compilador contra todos os arquivos da suite. 2. Comparação: Comparará a saída do aluno com a saída esperada (tokens ou erros). 3. History Check: Verificará o log do Git para validar o equilíbrio de contribuições da dupla.
3. Critérios de Nota
- Corretude: Passar nos testes automatizados (60%).
- Arquitetura: Qualidade do código Java e clareza da AST (20%).
- Git/Colaboração: Balanço de commits e clareza das mensagens (20%).
4. Questionários de Etapa
A critério do professor, cada etapa poderá ser acompanhada de um questionário teórico ou prático individual ou em dupla, para validar o conhecimento adquirido durante o desenvolvimento daquela fase. O valor desses questionários está integrado à nota da respectiva etapa.