Arquitetura Alvo
Objetivo
Organizar o compilador com separacao clara de responsabilidades, seguindo principios da Zen of Python:
- Explicito e melhor que implicito.
- Simples e melhor que complexo.
- Estruturas claras e previsiveis para manutencao.
Camadas propostas
Domain (nucleo lexico)
Responsavel por regras da linguagem e estruturas centrais.
Componentes esperados:
token.py(modelo de token)tokentype.py(enum e mapas)automato.py(AFD e transicoes)lexer.py(analise lexico)
Application
Orquestra casos de uso da analise, sem acoplamento com IO de baixo nivel.
Componentes esperados:
application/services/lexical_analysis_service.py- Contratos de entrada e saida da analise
Interface (CLI)
Camada de entrada para usuario final e automacao.
Componentes esperados:
main.pyoucli.py- parse de argumentos
- escolha de formato de saida (texto/json)
Infrastructure
Implementacoes de IO e utilitarios tecnicos.
Componentes esperados:
- leitura de arquivo
- escrita de relatorio de tokens
- logging/configuracao
Principios de projeto
- Modulos pequenos e coesos.
- Dependencia apontando para dentro (interface -> application -> domain).
- Erros com mensagens claras e contexto de linha/coluna.
- Testabilidade por design (funcoes puras quando possivel).
Estado atual vs alvo
| Item | Estado atual | Estado alvo |
|---|---|---|
| Domain | Quase completo (token, tokentype, automato, lexer implementados) | Completo |
| Application | Estrutura vazia (application/ sem arquivos) | Casos de uso implementados |
| Interface | Nao iniciado | CLI funcional |
| Infrastructure | Nao iniciado | IO/log/config isolados |
| Testes | Unitarios de dominio criados e passando | Unitario + Integracao |