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 .gitignore apropriado
  • 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:

// Programa simples demonstrando sintaxe básica
Arquitetura MVC

Funcao Inteiro calcular_fatorial(Inteiro n)
    Se n <= 1 entao
        retorne 1
    senao
        retorne n * calcular_fatorial(n - 1)
    Fim
Fim

// Programa principal
Guarde Inteiro resultado como calcular_fatorial(5)
Escreva "Fatorial de 5 é:", resultado

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