Pular para conteúdo

Sprints

⚙️ Ferramentas

Bison

Bison é uma ferramenta de geração de analisadores sintáticos (parsers), mantida pelo projeto GNU e sucessora do Yacc (Yet Another Compiler Compiler). Neste projeto, o Bison é utilizado para definir a gramática da linguagem Portugol, permitindo identificar e estruturar corretamente expressões, declarações e comandos de controle de fluxo. A ferramenta gera código C correspondente à estrutura sintática reconhecida, integrando-se ao Flex para compor o analisador completo do compilador.

Flex

Flex é uma ferramenta moderna utilizada para gerar analisadores léxicos (scanners), sendo o sucessor do tradicional Lex do Unix. Neste projeto, o Flex é responsável por reconhecer os tokens da linguagem Portugol, como palavras-chave, identificadores e números. Ele gera automaticamente o arquivo lex.yy.c, que implementa o scanner léxico e integra-se ao Bison para permitir a análise completa do código-fonte durante o processo de compilação.

GCC e Makefile

  • Ferramentas para compilar o código e automatizar o processo de build.

📅 Organização por Sprints

O desenvolvimento foi dividido em 13 sprints, sendo elas semanais, iniciando em 30/03/2025 e terminando com a entrega final em 27/06/2025. Utilizamos o gitpages no GitHub para organizar as tarefas de cada sprint com critérios claros de aceitação (definition of done).


🧩 Sprint 1 –Setup do Compilador e Primeiros Comandos (30/03 - 05/04)

Objetivos: - Definir escopo da linguagem Portugol suportada(UniVali). - Criar a estrutura inicial do projeto (pastas, Makefile, arquivos principais). - Configurar ambiente de desenvolvimento (Flex, Bison, GCC). - Criar um compilador inicial que reconheça e traduza comandos básicos. - Implementar o reconhecimento e tradução dos seguintes elementos: - inicio, fim - var, declaração de variáveis - leia, escreva - Atribuições e expressões aritméticas simples(+, -, *, /).

Critérios de Aceitação: - Projeto compila corretamente usando make. - Geração de arquivo saida.c funcional. - Primeiro exemplo exemplo1.pg, que teste as funcionalidades implementadas, compilado e executado corretamente.


🧩 Sprint 2 – Controle de Fluxo(Condicionais) (06/04 - 12/04)

Objetivos: - Adicionar suporte à estrutura condicional: - se, entao, senao, fimse - Implementar operadores relacionais: - ==, !=, <, >, <=, >=

Critérios de Aceitação: - Condições corretamente analisadas e compiladas. - Código com estruturas condicionais em Portugol é convertido corretamente para C. - Segundo exemplo exemplo2.pg, que teste as funcionalidades implementadas, compilado e executado corretamente.

🧩 Sprint 3 – Estrutura de Repetição(enquanto…faca…fimenquanto) (13/04 - 19/04)

Objetivos: - Adicionar suporte às estruturas de repetição: - enquanto, faca, fimenquanto

Critérios de Aceitação:

  • Laços de repetição são reconhecidos e compilados corretamente.
  • Terceiro exemplo exemplo3.pg, que teste as funcionalidades implementadas, compilado e executado corretamente.

🧩 Sprint 4 – Estruturas de Repetição: Para (23/04 a 29/04)

Objetivos: - Adicionar suporte às estruturas de repetição: - para, de, ate, fimpara

Critérios de Aceitação: - Laços de repetição são reconhecidos e compilados corretamente. - Quarto exemplo exemplo4.pg, que teste as funcionalidades implementadas, compilado e executado corretamente.


🧩 Sprint 5 – Tipagem e Robustez + P1 (27/04 - 03/05)

Objetivos: - Ampliar o suporte para novos tipos de dados: - inteiro, real e caracter - Corrigir a regra de declaração de variáveis no analisador sintático.

Critérios de Aceitação: - Declaração de variáveis com tipo funcionando corretamente. - Compilação correta no C (int, float, char).


🧩 Sprint 6 – Sistema de Testes Automatizados (04/05 - 10/05)

Objetivos: - implementar um sistema de testes automatizados completo para o compilador Portugol-C que permite verificar se a geração de código C está funcionando conforme o esperado.

Critérios de Aceitação: - Sistema de Testes Automatizados funcionando corretamente.


🧩 Sprint 7 – AST (11/05 - 17/05)

Objetivos: - Construção da Árvore de Derivação Sintática


🧩 Sprint 8 – Recursos Avançados do Portugol (18/05 - 24/05)

Objetivos: - Implementar recursos “senão se” e “switch/case (escolha, caso, fimcaso) ”

Critérios de Aceitação: - Implementar casos de testes para cada um dos recursos - Todos testes devem estar funcionando


🧩 Sprint 9 – Comentários em Portugol ((25/05 - 31/05))

Objetivos: - Conversão de comentários do Portugol (//, / /) para C.

Critérios de Aceitação: - Código comentado, limpo e modular. - Implementação de casos de teste


🧩 Sprint 10 – Novos Tipos + P2 (01/06 a 07/06)

Objetivos: - Reconhecimento e tratamento dos tipos null e lógico (booleano) e apresentação do P2


🧩 Sprint 11 – Análise Semântica, Tabela de Símbolos + Disponibilização do GitHub

Objetivos: - Verificar se variáveis são declaradas antes do uso. - Implementar tabela de símbolos simples para armazenamento de identificadores e seus tipos. - Disponibilizar Repositório.

Critérios de Aceitação: - Erros de variáveis não declaradas detectados. - Execução abortada em caso de erro semântico.


🧩 Sprint 12 – Correções e Integração Final (15/06 - 21/06)

Objetivos: - Correção de bugs e inconsistências - Organização do código final - Últimos testes com múltiplos arquivos .pg

🧩 Sprint 13 – Entrega e Apresentação Final (22/06 - 28/06)

Objetivos: - Preparação para entrega do projeto, entrevista/apresentação finals