Ponto de Controle 1
Formulário
Nome da equipe
Grupo 7
Nomes dos integrantes e respectivas matrículas
- Maria Alice Bernardo Costa - 211063210
- Luis Eduardo Carneiro Miranda - 211063200
- Milena Baruc Rodrigues Morais - 211062339
- Nicolas Bomfim Dias Bandeira - 211062348
- Gabriel Saraiva Canabrava - 202045769
- Pablo Santos Costa - 180128817
Linguagem escolhida para tratamento pelo compilador/interpretador:
C++
Tipo do projeto
Interpretador
Metodologia adotada para o planejamento
Scrum
Número de sprints realizadas até o momento
2
Objetivos planejados para as sprints já concluídas
- Criação do repositório GitHub
- Documentação do projeto (Mkdocs, templates)
- Configuração do ambiente de desenvolvimento
- Planejamento das sprints
- Definição do subconjunto C++ a ser suportado
- Definição de tokens para tipos (int, float, bool, string, etc.)
- Expressões regulares para operadores (+, -, &&, ||, ==, !=, ++, --)
- Tratamento de comentários e whitespace
- Implementação do lexer e do parser
- Testes unitários para tokens
Principais entregas já implementadas no projeto
- Definir a linguagem-fonte do interpretador (sintaxe e semântica básica)
- Análise léxica com Flex (definição dos tokens da linguagem).
- Primeiras regras sintáticas no arquivo .y, permitindo testar códigos simples na linguagem.
- Tokens testados, porém não cobre todos os casos
Principais dificuldades enfrentadas e como foram resolvidas
- Entender o funcionamento do léxico, do parser.
- Dificuldade para fazer o Bison funcionar em conjunto com os tokens definidos no léxico.
- Através de video-aulas e leituras, conseguimos avançar.
O que ainda falta implementar até a próxima entrega?
- Cobrir uma maior parte de testes com o analisador sintático.
- Gerar árvore sintática abstrata (AST)
- Implementar a interpretação da AST
Link do repositório GitHub
https://github.com/Maliz30/Interpretador_Cpp-Py
Comentários adicionais sobre o repositório
Há um git pages com conteúdos como documentação de sprints (planing, review), planejamento de sprints futuras, boas práticas e como rodar os testes do que foi implementado até o momento.
O repositório está atualizado com os últimos commits?
Sim
Outras informações
Planejamento das sprints
A metodologia de desenvolvimento adotada é o Scrum, devido à sua abordagem ágil e iterativa que favorece a organização do trabalho em ciclos curtos com entregas frequentes. Desde o início do projeto até a entrega do Ponto de Controle 1, foram realizadas duas sprints, cada uma com metas bem definidas.
Essas sprints tiveram como principais objetivos:
Sprint 1: (09/04 - 14/04)
Objetivo: Estabelecer fundamentos do projeto
Tarefas:
- Criação do repositório GitHub
- Documentação do projeto (Mkdocs, templates)
- Configuração do ambiente de desenvolvimento
- Planejamento das sprints
- Definição do subconjunto C++ a ser suportado
Sprint 2: (15/04 - 30/04)
Objetivo: Especificar e implementar tokens básicos
Tarefas:
- Definição de tokens para tipos básicos (int, float, bool, string, etc.)
- Expressões regulares para operadores (+, -, &&, ||, ==, !=, ++, --)
- Tratamento de comentários e whitespace
- Implementação do lexer e do parser
- Testes unitários para tokens
- Preparação para P1
A documentação detalhada de cada uma delas pode ser consultada nos links abaixo:
Sprint 1:
Sprint 2:
O que foi implementado
- Chamada de bibliotecas
- Declaração de namespaces
- Tipo de variáveis e funções
- Declaração e Definição de funções
- Declaração de variáveis
- Operações matemáticas básicas (+ - * / % )
- Entrada e saída de dados usando
cin
ecout
- Condicionais e Loops (if, while, for)
Testes realizados
Neste link é possível visualizar como rodar um teste.
Hello World
#include <iostream>
using namespace std ;
int main ( ) {
cout << "Hello World" << endl ;
return 0 ;
}
Operações matemáticas
#include <iostream>
using namespace std;
int main(){
int a, b;
cin >> a >> b;
int soma, sub, mult, div, rest;
soma = a + b;
sub = a - b;
mult = a * b;
div = a / b;
rest = a % b;
cout << "Soma: " << a << " + " << b << " = " << soma << endl;
cout << "Subtração: " << a << " - " << b << " = " << sub << endl;
cout << "Multiplicação: " << a << " x " << b << " = " << mult << endl;
cout << "Divisão: " << a << " / " << b << " = " << div << endl;
cout << "Resto: " << a << " % " << b << " = " << rest << endl;
return 0;
}
Condicionais
#include <iostream>
using namespace std;
int main()
{
int x = 10;
if (x < 11)
{
cout << "x < 11 is true!\n";
} else {
cout << "x < 11 is true!\n";
}
}
Loops
#include <iostream>
using namespace std ;
int main ( ) {
for (int i = 0; i < 5; i++){
int a;
}
int i = 0;
while (i < 5) {
int x = 10;
}
return 0 ;
}
Histórico de versões
Versão | Data | Descrição | Autor(es) | Revisor(es) |
---|---|---|---|---|
1.0 | 28/04/2025 | Documentação do Ponto de Controle 1 | Maria Alice | Nicolas Bonfim |