36 lines
1.7 KiB
Markdown
36 lines
1.7 KiB
Markdown
# PR-004 - PBS Parser Statements and Control Flow
|
|
|
|
## Briefing
|
|
O parser atual cobre apenas `let`, `return` e expression statement.
|
|
Este PR implementa o bloco de statements exigido pela spec para viabilizar semantica de fluxo e validacoes posteriores.
|
|
|
|
## Target
|
|
- Specs:
|
|
- `docs/pbs/specs/3. Core Syntax Specification.md` (secao 9)
|
|
- `docs/pbs/specs/11. AST Specification.md` (secao 9)
|
|
- Codigo:
|
|
- `prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/java/p/studio/compiler/pbs/parser/PbsParser.java`
|
|
- `prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/java/p/studio/compiler/pbs/ast/PbsAst.java`
|
|
- `prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/java/p/studio/compiler/pbs/parser/ParseErrors.java`
|
|
|
|
## Method
|
|
1. Adicionar parser para `assign`, `if`, `for`, `while`, `break`, `continue`.
|
|
2. Introduzir `let const` e modelagem de `LValue` (sem call chain em alvo de atribuicao).
|
|
3. Implementar validacao sintatica de forma de `for` (`from/until/step`).
|
|
4. Marcar uso invalido de `break/continue` fora de loop como erro deterministico.
|
|
5. Preservar recovery por fronteira de statement (`;` e fechamento de bloco).
|
|
|
|
## Acceptance Criteria
|
|
- AST de bloco representa todas as formas de `Stmt` da secao 9.
|
|
- Atribuicao e statement, nao expressao.
|
|
- `break/continue` fora de loop emite diagnostico estavel.
|
|
- `for` e `while` parseiam com estrutura e spans corretos.
|
|
- Targets de atribuicao invalidos sao rejeitados no parser.
|
|
|
|
## Tests
|
|
- `PbsParserStatementsTest` novo cobrindo:
|
|
- `let`, `let const`, `assign` simples e composta;
|
|
- `if/else`, `for` com e sem `step`, `while`;
|
|
- `break/continue` valido e invalido;
|
|
- recovery apos statements malformados.
|