37 lines
1.9 KiB
Markdown
37 lines
1.9 KiB
Markdown
# PR-005 - PBS Parser Expressions, Optional/Result, and Apply
|
|
|
|
## Briefing
|
|
A gramatica de expressoes da spec inclui formas que ainda nao existem no frontend (`apply`, `else`, `switch`, `handle`, `new`, `bind`, `some/none/ok/err`, member/postfix avancado).
|
|
Este PR fecha a cobertura sintatica dessas expressoes e preserva as regras de precedencia/rejeicao.
|
|
|
|
## Target
|
|
- Specs:
|
|
- `docs/pbs/specs/3. Core Syntax Specification.md` (secao 10, 13, 14)
|
|
- `docs/pbs/specs/11. AST Specification.md` (secoes 9, 10)
|
|
- Codigo:
|
|
- `prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/java/p/studio/compiler/pbs/parser/PbsExprParser.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. Implementar cadeia de precedencia completa incluindo `apply` right-associative.
|
|
2. Implementar `else` extraction, `if` expression, `switch`, `handle` e `as`.
|
|
3. Implementar postfixes: member access, call sugar, propagate `!`.
|
|
4. Suportar primarias: `this`, `new`, `bind`, `some`, `none`, `ok`, `err`, unit e tuple expr.
|
|
5. Rejeitar cadeias nao associativas e formas proibidas (`?` propagation, single-slot tuple literal).
|
|
|
|
## Acceptance Criteria
|
|
- Parser respeita precedencia/associatividade normativa (incluindo `apply` e `else`).
|
|
- `a < b < c` e `a == b == c` continuam rejeitados deterministicamente.
|
|
- `if` expression exige `else` e bloco nos ramos.
|
|
- `switch` e `handle` parseiam mapa de arms e wildcard conforme a gramatica.
|
|
- Superficies `optional/result` sao parseadas sem inferir semantica indevida.
|
|
|
|
## Tests
|
|
- `PbsExprParserTest` ampliado com:
|
|
- precedencia completa e associatividade;
|
|
- expressoes `apply` encadeadas;
|
|
- `switch`/`handle` validos e invalidos;
|
|
- `some/none/ok/err/bind/new`;
|
|
- cenarios negativos obrigatorios da secao 12 de syntax.
|