Semana 1: Desenvolvimento do Projeto Compilador Didágica
📝 Diário Pessoal de Desenvolvimento - Professor Projeto: Compilador da Linguagem Didágica Semana: 1 - Fundamentos e Planejamento Período: 25-29 de Agosto, 2025
🎯 Proposta da Linguagem Implementada
Especificação Concreta da Linguagem Didágica 📚
Finalizei hoje a especificação inicial da Linguagem Didágica que implementarei. Trata-se de uma linguagem educacional em português destinada a estudantes de engenharia de software entre 3º e 6º semestres.
Características Fundamentais Definidas:
- Sintaxe completamente em português (palavras-chave como
Se,Então,Enquanto,Função) - Sistema obrigatório de declaração de padrões arquiteturais no início do projeto
- Compilador que atua como “professor digital”, fornecendo feedback educativo
- Verificação automática de princípios SOLID durante compilação
- Mensagens de erro didáticas explicando não apenas o erro, mas como corrigir e por quê
Público-Alvo Específico: Estudantes brasileiros que já dominam programação básica (estruturas de controle, funções, orientação a objetos) mas precisam aprender engenharia de software. A linguagem preenche a lacuna entre “saber programar” e “saber desenvolver software de qualidade”.
Diferencial Pedagógico: Ao contrário de outras linguagens educacionais que simplificam conceitos, a Didágica complexifica intencionalmente, forçando o programador a tomar decisões conscientes sobre arquitetura, design e qualidade de código.
📊 Estrutura de Arquivos do Projeto Criada
Organização do Projeto Implementada 📂
Criei hoje a estrutura completa de pastas e arquivos para o desenvolvimento do compilador:
compilador-didatica/
├── README.md # ✅ Concluído
├── docs/
│ ├── proposta-linguagem.md # ✅ Concluído
│ ├── especificacao-lexica.md # 📝 Rascunho inicial
│ ├── especificacao-sintatica.md # ⏳ Próxima semana
│ └── exemplos-codigo/ # 📁 Pasta criada
├── src/
│ ├── lexer/ # 📁 Estrutura preparada
│ ├── parser/ # 📁 Estrutura preparada
│ ├── semantic/ # 📁 Estrutura preparada
│ ├── codegen/ # 📁 Estrutura preparada
│ └── utils/ # 📁 Estrutura preparada
├── tests/
│ ├── lexer-tests/ # 📁 Preparado para próxima semana
│ └── exemplos-programas/ # 📁 Criado
└── diario/
└── semana-01.md # ✅ Este arquivo
Decisões de Organização:
- Separação clara entre documentação (
docs/) e implementação (src/) - Estrutura modular espelhando fases de compilação
- Pasta de testes preparada para desenvolvimento dirigido por testes
- Diário de desenvolvimento para reflexão contínua
🤝 Simulação de Dinâmica de Equipe
Papéis Definidos para Rotação 👥
Como trabalho sozinho, estabeleci um sistema de rotação de perspectivas para simular trabalho em equipe:
Semanas 1-3: “Arquiteto de Linguagem” - Foco em decisões de design de alto nível - Priorização de aspectos pedagógicos - Conexão entre teoria de compiladores e objetivos educacionais
Semanas 4-7: “Implementador Léxico” - Concentração em análise léxica eficiente - Otimização de algoritmos de reconhecimento - Tratamento robusto de casos extremos
Semanas 8-11: “Especialista Sintático” - Implementação de parsers elegantes - Tratamento de ambiguidades - Geração de árvores sintáticas úteis
Semanas 12-15: “Integrador de Sistema” - Conexão entre todos os componentes - Testes de integração - Documentação final e polimento
Esta abordagem me forçará a considerar diferentes prioridades e perspectivas ao longo do desenvolvimento, simulando tensões naturais que surgem em equipes reais.
📅 Cronograma Pessoal Detalhado
Planejamento de Implementação Real 📅
Baseei meu cronograma em experiência anterior com projetos de compiladores, incluindo tempo realista para depuração e refatoração:
Marcos Principais Estabelecidos:
Semana 1 ✅: Especificação e estrutura do projeto - Documento de proposta da linguagem - Estrutura de diretórios - Primeiros exemplos de programas válidos
Semanas 2-4: Especificação formal completa - Definição matemática do alfabeto (Semana 2) - Gramática formal da linguagem (Semana 3) - Análise de linguagens regulares para tokens (Semana 4)
Semanas 5-9: Implementação do analisador léxico - Autômatos finitos para reconhecimento de tokens - Sistema de tratamento de erros léxicos - ENTREGA PARCIAL: Analisador léxico funcional
Semanas 10-12: Analisador sintático - Implementação de parser descendente LL(1) - Tratamento de erros sintáticos com recuperação - Geração de árvore sintática abstrata
Semanas 13-15: Análise semântica e finalização - Sistema de verificação de padrões arquiteturais - Geração de mensagens didáticas contextualizadas - Integração e testes finais
Tempo de Reserva: 20% adicional em cada fase para imprevistos, especialmente na análise semântica que será a parte mais complexa.
💡 Aplicação Prática dos Fundamentos Matemáticos
Durante esta semana, apliquei conceitos da Semana 1 da disciplina:
Teoria dos Conjuntos na Especificação:
- Definição formal do alfabeto da linguagem como união de conjuntos disjuntos
- Especificação de tokens como subconjuntos do conjunto de todas as palavras possíveis
- Uso de operações de conjunto para definir restrições léxicas
Relações na Arquitetura:
- Modelagem de dependências entre módulos como relações binárias
- Definição de funções de mapeamento entre código fonte e representações internas
- Especificação de relações de equivalência para otimizações
Indução para Validação:
- Preparação de provas por indução para validar algoritmos recursivos
- Estruturas de dados recursivas para representar árvores sintáticas
- Propriedades que devem ser preservadas durante transformações de código
🛠️ Implementação Concreta Realizada
Arquivo proposta-linguagem.md criado com:
- Especificação completa dos objetivos pedagógicos
- Exemplos de programas válidos na Linguagem Didágica
- Análise comparativa com outras linguagens educacionais
- Justificativas para escolhas de design
Estrutura de desenvolvimento configurada com:
- Repositório Git inicializado com
.gitignoreapropriado - Makefile básico para automatizar compilação futura
- Scripts de teste preparados
- Ambiente de desenvolvimento configurado
Primeiros exemplos de código escritos em Didágica:
🎯 Reflexões sobre o Processo
Sucessos da Semana: - Especificação clara e viável estabelecida - Estrutura de projeto bem organizada - Primeiros exemplos funcionais de código-fonte
Desafios Identificados: - Complexidade da análise semântica será maior que antecipei - Necessidade de balancear feedback educativo sem ser intrusivo - Definição precisa de quando aplicar cada princípio SOLID
Aprendizados para Aplicar com Estudantes: - Importância de exemplos concretos desde o início do projeto - Valor de documentar decisões de design, não apenas código - Necessidade de tempo adequado para experimentação e refinamento
Esta primeira semana estabeleceu bases sólidas tanto para desenvolvimento técnico quanto para insights pedagógicos que aplicarei na orientação dos grupos de estudantes.