Skip to content

JVCarv41/Compilador

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

133 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Compilador — Caatinguage2025-2

Resumo compacto do projeto: implementa as etapas clássicas de um compilador (leitura de arquivo .252, análise léxica, gerenciamento de símbolos, checagem sintática básica e geração de relatórios .LEX e .TAB). Entrada principal: main.py. Versão empacotada: main.exe (quando gerada).

Conteúdo rápido

  • Visão geral
  • Diagrama da estrutura do projeto
  • Módulos principais
  • Quick start (exe e Python)
  • Build
  • Testes e troubleshooting
  • Licença

Visão geral

O compilador realiza as etapas clássicas:

  • Leitura do arquivo-fonte (.252)
  • Análise léxica (tokenização)
  • Gerenciamento de símbolos (tabelas fixas e dinâmicas)
  • Verificações sintáticas básicas
  • Geração de relatórios: .LEX (léxico) e .TAB (tabela de símbolos)

Há uma interface interativa no main.py e uma versão empacotada (main.exe) para Windows (quando gerada pelo processo de build).


Diagrama da estrutura do projeto

Compilador/
├── main.py                # interface/entrypoint interativo
├── readme.md              # este arquivo
├── requirements.txt       # dependências
├── build/                 # artefatos do empacotamento (pyz, toc, etc.)
├── dist/                  # normalmente contém o main.exe após empacotamento
├── compiler/              # núcleo do compilador
│   ├── __init__.py        # exporta função/entrada pública (ex: compile())
│   ├── controller.py      # orquestra leitura -> lexer -> parser -> gravação
│   ├── errors/            # tratamento específico de erros léxicos/lexemas
│   │   ├── __init__.py
│   │   ├── unclosed_comment.py  # erro: comentário não fechado
│   │   └── unclosed_string.py   # erro: string não fechada
│   ├── io/
│   │   ├── read_file.py   # leitura do arquivo-fonte (.252)
│   │   └── write_file.py  # grava os relatórios (.LEX, .TAB)
│   ├── lexer_analyser/
│   │   ├── __init__.py
│   │   ├── lexer.py       # analisador léxico (tokenização)
│   │   └── lex_report.py  # transformação para o formato .LEX
│   ├── parser/
│   │   ├── __init__.py
│   │   ├── parser.py      # análises sintáticas básicas
│   │   └── context.py     # estruturas/enumerações usadas pelo parser
│   ├── reserved_symbols/
│   │   ├── reserved_symbols_table.py  # símbolos reservados estáticos
│   │   └── symbol.py                   # modelo de símbolo reservado
│   └── symbol_table/
│       ├── table.py       # tabela de símbolos dinâmica
│       └── symbol.py      # modelo de símbolo dinâmico
├── tests/                 # testes unitários por módulo
└── utils/
    └── files_for_tests/   # arquivos de teste (.252) usados pelos testes

Módulos principais (o que fazem)

  • compiler.__init__.py:

    • Ponto de exportação do pacote; geralmente expõe uma função compile(file_path) usada pelo main.py.
  • compiler.controller.py:

    • Orquestra o fluxo: carrega o arquivo, chama o lexer e parser, solicita gravação dos relatórios.
  • compiler/errors/:

    • Contém classes específicas de exceção/erro usadas pelo analisador léxico e outras etapas.
    • unclosed_comment.py: exceção/report para comentário não fechado.
    • unclosed_string.py: exceção/report para string não fechada.
    • Essas classes permitem mensagens de erro mais informativas e controle localizado de falhas léxicas.
  • compiler/io/read_file.py e compiler/io/write_file.py:

    • read_file.py: abre e devolve o conteúdo do .252.
    • write_file.py: escreve os arquivos de saída (.LEX e .TAB), seguindo o formato do projeto.
  • compiler/lexer_analyser/lexer.py e lex_report.py:

    • lexer.py: lógica que percorre caracteres e produz lexemas/tokens; também lança/explora erros do módulo errors.
    • lex_report.py: monta o relatório legível .LEX a partir dos tokens.
  • compiler/parser/parser.py e context.py:

    • Implementam verificações sintáticas de alto nível e mantêm contexto de análise (pilha, escopos, etc.).
  • compiler/reserved_symbols/:

    • Contém a lista de palavras e símbolos reservados usados pelo lexer e parser.
  • compiler/symbol_table/:

    • Implementa a tabela de símbolos (inserção, busca, truncagem quando necessário).

Quick start

Executável (Windows)

  1. Localize o main.exe (procure em dist/)
  2. Execute o arquivo como um executável normal. Abrirá um prompt de comando
  3. No prompt do executável informe o caminho base do arquivo fonte (pode omitir .252). Saídas geradas: arquivo_base.LEX e arquivo_base.TAB no mesmo diretório.

Executar com Python

python main.py

Build (com PyInstaller)

  • Instale PyInstaller: pip install pyinstaller
  • Gerar exe: pyinstaller main.py --onefile
  • Resultado em dist/main (ajustar flags conforme necessidade de incluir recursos).

Rodando os testes

Execute a suíte de testes com pytest na raiz do repositório:

pytest

ou

python run_tests.py

Executar testes de um subdiretório (ex.: lexer):

pytest tests/lexer

Arquivos de teste de exemplo ficam em utils/files_for_tests/.

About

Projeto da AV3 da matéria de Compiladores 2025.2.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors