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 | Início | Entrega | Pontos | Descrição e Objetivos |
|---|---|---|---|---|
| 0 | 06/03 | 16/03 | 02 | Configuração e Versionamento Preparação do ambiente de desenvolvimento. Configuração do JDK, Maven e Git. Criação do projeto ComCet e repositório no GitLab. O objetivo é garantir que o aluno consegue realizar uma análise estatística básica em Java e possui a infraestrutura necessária. |
| 1 | 12/03 | 23/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). |
| 2 | 19/03 | 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 | 26/03 | 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 | 10/04 | 04/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 | 30/04 | 18/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 | 14/05 | 08/06 | 10 | 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 | 02/06 | 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 do aluno.
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 target/comcet-1.0-SNAPSHOT.jar --stage 2 input.pasO script do professor automatizará:
- Execução: Rodará o compilador contra todos os arquivos da suite.
- Comparação: Comparará a saída do aluno com a saída esperada (tokens ou erros).
- History Check: Verificará o log do Git para validar o equilíbrio de contribuições do aluno.
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, para validar o conhecimento adquirido durante o desenvolvimento daquela fase. O valor desses questionários está integrado à nota da respectiva etapa.