75 lines
2.7 KiB
Markdown
75 lines
2.7 KiB
Markdown
# PR-11.3 - PBS Expr Parser Postfix, Primary and Construction Decomposition
|
|
|
|
## Briefing
|
|
|
|
O segundo grande concentrador de complexidade em `PbsExprParser` esta nas superficies de `postfix` e `primary`: chamadas, membros, propagate, tuplas, blocos, `new`, `bind`, `some/ok/err`.
|
|
|
|
Esta PR separa essas familias em colaboradores menores, sem alterar a funcionalidade.
|
|
|
|
## Motivation
|
|
|
|
### Dor atual que esta PR resolve
|
|
|
|
1. `parsePostfix`, `parsePrimary` e `parseParenthesizedPrimary` misturam muitas formas sintaticas distintas.
|
|
2. Tuple literals, grouped expressions e construction surfaces compartilham lookahead delicado.
|
|
3. A manutencao dessas regras num unico metodo torna alto o custo de qualquer evolucao futura.
|
|
|
|
## Target
|
|
|
|
Separar parsing de superficies primarias e postfix:
|
|
|
|
1. postfix chaining,
|
|
2. primary literals/identifiers/blocks,
|
|
3. tuple/group handling,
|
|
4. construction/result surfaces (`new`, `bind`, `some`, `ok`, `err`).
|
|
|
|
## Dependencies
|
|
|
|
Prerequisitos diretos:
|
|
|
|
1. `PR-11.1`
|
|
2. `PR-11.2`
|
|
|
|
## Scope
|
|
|
|
1. Extrair `parsePostfix`.
|
|
2. Extrair `parsePrimary`, `parseParenthesizedPrimary`, `parseTupleItems`, `parseTupleItem`.
|
|
3. Extrair `parseNewExpression`, `parseBindExpression`, `parseSomeExpression`, `parseOkExpression`, `parseErrExpression`.
|
|
4. Preservar recovery atual para `?`, tuple malformed e parens.
|
|
|
|
## Non-Goals
|
|
|
|
1. Nao alterar a aridade de tuple literal.
|
|
2. Nao alterar mixed labeled/unlabeled tuple validation.
|
|
3. Nao alterar o formato aceito de `new Vec.zero(...)` e `bind(ctx, fn)`.
|
|
|
|
## Method
|
|
|
|
### O que deve ser feito explicitamente
|
|
|
|
1. Introduzir subparsers por familia sintatica em vez de criar um novo monolito.
|
|
2. Manter a ordem atual de postfix chaining.
|
|
3. Preservar lookahead de tuple/group exatamente como hoje.
|
|
4. Reforcar testes de tupla, construction e propagate operator invalido.
|
|
|
|
## Acceptance Criteria
|
|
|
|
1. `parsePostfix` e `parsePrimary` deixam de concentrar todas as superficies primarias.
|
|
2. Tuplas, grupos, constructions e postfix chains continuam equivalentes.
|
|
3. Nao ha mudanca funcional em AST, spans ou diagnosticos.
|
|
|
|
## Tests
|
|
|
|
1. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsExprParserTest*`
|
|
2. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsParserTest*`
|
|
3. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsOptionalResultTest*`
|
|
4. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsApplyResolutionTest*`
|
|
|
|
## Affected Documents
|
|
|
|
1. Nenhum documento normativo.
|
|
|
|
## Open Questions
|
|
|
|
1. O parsing de tuple/group deve ficar junto de primary ou em helper especializado de parenthesized surfaces. A recomendacao e extrair para helper especializado, porque esse e o trecho com lookahead mais sensivel.
|