Sprint 5¶
Período: 13/04 a 19/04
Status: ✅ Concluída
Objetivo¶
Implementação do analisador sintático para suporte a: atribuição, declaração, condicional, laços e funções.
Atividades / Issues¶
- Corrigir erros de integração do parser com o analisar léxico
- Validar gramática
Resultados¶
- Integração dos analisadores léxico e sintático para: atribuição, declaração e laços.
- Regras sintáticas básicas implementadas para:
- declaração de variáveis (
intefloat) - atribuição
- declaração de variáveis (
- Integração inicial com o analisador léxico concluída (scanner e parser compilando no fluxo do
make). -
Tratamento sintático inicial de erros implementado com recuperação até
;. -
Estrutura de expressões organizada por níveis de precedência:
exprexpr_orexpr_andexpr_compexpr_aritexpr_unariaexpr_primaria
-
Operadores comparativos implementados e validados:
==,!=,<,<=,>,>=
-
Operadores lógicos implementados e validados:
&&,||,!
-
Precedência validada em execução:
- comparação com precedência maior que
&& &&com precedência maior que||!no nível unário
- comparação com precedência maior que
-
Suporte completo aos laços
while,foredo...whilecom duas formas de corpo:- bloco com chaves (
{ ... }) - instrução única sem chaves
- bloco com chaves (
-
forvalidado com componentes opcionais:- init opcional
- condição opcional
- step opcional
- forma
for (;;)aceita
Testes executados¶
Entrada utilizada no parser:
int x;
float y;
x = 10 + 5;
20;
1 < 2 || 3 < 4 && 0;
1 < 2 && 3 < 4 || 0;
1 < 2 || 3 > 4 && 5 < 6;
(1 < 2 || 3 > 4) && 0;
!(1 < 2) || 0;
int i = 0;
while (i < 2) i++;
int j;
for (j = 0; j < 2; j++) { j++; }
int k = 0;
do k++; while (k < 2);
Saídas observadas:
Digite expressoes terminadas com ';'. Pressione Ctrl+D para encerrar.
INFO: Declaração de variável detectada.
INFO: Declaração de variável float detectada.
SUCESSO: Atribuição realizada. Resultado da expressão: 15
Resultado: 20
Resultado: 1
Resultado: 1
Resultado: 1
Resultado: 0
Resultado: 0
INFO: Declaração de variável com inicialização detectada. Valor: 0
INFO: incremento posfixado detectado
INFO: Laço WHILE detectado
INFO: Declaração de variável detectada.
SUCESSO: Atribuição realizada. Resultado da expressão: 0
INFO: incremento posfixado detectado
INFO: incremento posfixado detectado
INFO: Bloco de codigo detectado
INFO: Laço FOR detectado
INFO: Declaração de variável com inicialização detectada. Valor: 0
INFO: incremento posfixado detectado
INFO: Laço DO...WHILE detectado
Conclusão dos testes:
- A precedência e associatividade dos operadores lógicos e comparativos estão consistentes com o esperado.
- Os três laços (while, for, do...while) foram reconhecidos corretamente, com corpo em bloco e/ou instrução única.
Complemento — Testes extensivos de laços¶
Casos válidos executados e aprovados:
- while com bloco e com instrução única
- for com bloco e com instrução única
- do...while com bloco e com instrução única
- variações de for: sem init, sem condição, sem step e for(;;)
- for com init por declaração (for (int i = 0; ... ))
- step com i++, ++i e i--
- laços aninhados em combinações mistas
Casos inválidos executados (com rejeição esperada):
- falta de ; em declaração
- for sem )
- do...while sem ; final
- corpo inválido em laço (while (cond) ;)
Comportamentos observados:
- recuperação sintática básica até ; funcionando nos cenários cobertos
- checagem semântica de divisão por zero ativa ([ERRO SEMANTICO] Divisao por zero!)
Dificuldades¶
- Ajuste de ambiguidade inicial nas regras de expressão.
- Depuração de erros sintáticos durante integração.
- Definição da melhor granularidade entre regras de expressão (estrutura mais didática vs. compacta).
Observações¶
Dependente da conclusão da Sprint 4.
Tratamento de erros permanece parcialmente implementado: existe recuperação básica até ;, mas os cenários de erro ainda não estão cobertos por completo.