Skip to content

Repository files navigation

CIJMC — C In Java Mini Compiler

Compilador académico para um subconjunto da linguagem C89, implementado em Java. O projeto demonstra as fases fundamentais de um compilador: análise léxica, análise sintática, construção de árvore sintática abstrata (AST), tabela de símbolos e análise semântica.

Funcionalidades

  • Análise léxica — reconhecimento de identificadores, 29 palavras reservadas, literais (inteiro, float, char, string), operadores, delimitadores, comentários e diretivas de pré-processador.
  • Análise sintática — parser recursive descent com níveis de precedência, tratamento de dangling-else e modo pânico.
  • AST — hierarquia de 32 classes de nós com metadados de origem (linha e coluna) e impressão em formato de árvore.
  • Tabela de símbolos — escopos, alocação de endereço simbólico e busca hierárquica.
  • Análise semântica — verificação de declarações, tipos, atribuições, chamadas de função e retornos.

Requisitos

  • JDK 24+ (o projeto usa switch expressions e instanceof patterns).
  • Apache NetBeans 25 (opcional, apenas para abrir o projeto).

Como compilar e executar

Via NetBeans

Abra o projeto e execute com o botão Run.

Via linha de comandos

javac -encoding UTF-8 -d build/classes src/main/Main.java src/enums/TokenType.java src/utils/FileLoader.java src/entities/*.java src/entities/ast/*.java
java -cp build/classes main.Main programa.txt

O caminho do ficheiro de entrada pode ser passado como argumento. Se for omitido, é usado programa.txt:

java -cp build/classes main.Main exemplo.c

O ficheiro de entrada deve terminar em .c ou .txt.

Exemplo de entrada

programa.txt:

int x;
float y = 3;
int soma(int a, int b) {
    return a + b;
}

int main (){ 
    int i;
    for (i = 0; i < 10; i++) {
        if (i == 5) {
            break;
        }
    }
    return soma(x, y);
}

Saída esperada: mensagem de sintaxe, impressão da AST, tabela de símbolos e resultado da análise semântica.

Estrutura do projeto

src/
├── main/          → ponto de entrada (Main.java)
├── enums/         → tipos de token (TokenType.java)
├── utils/         → leitura de ficheiros (FileLoader.java)
└── entities/      → Lexer, Parser, ScopeTable, SemanticAnalyzer, Symbol, Token
    └── ast/       → 32 classes de nós da AST + ASTPrinter

Documentação

  • ARCHITECTURE.md — arquitetura, decisões de projeto e limitações conhecidas.
  • grammar.txt — gramática de referência (subconjunto de C89).
  • CIJMC.jff — autómato finito do analisador léxico (JFLAP, 64 estados).

Autora

  • Jussana Paim — nº de estudante 20230132

Licença

Distribuído sob a licença MIT. Consulte LICENSE.

About

C IN Java Mini Compiler - Compilador académico que implementa um subconjunto da linguagem C89 em Java — análise léxica, análise sintática (recursive descent), AST, tabela de símbolos e análise semântica. Java 24 + NetBeans. Projeto de Compiladores, ISPTEC

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages