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.pas

O 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.

Back to top