2.7 KiB
2.7 KiB
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
parsePostfix,parsePrimaryeparseParenthesizedPrimarymisturam muitas formas sintaticas distintas.- Tuple literals, grouped expressions e construction surfaces compartilham lookahead delicado.
- A manutencao dessas regras num unico metodo torna alto o custo de qualquer evolucao futura.
Target
Separar parsing de superficies primarias e postfix:
- postfix chaining,
- primary literals/identifiers/blocks,
- tuple/group handling,
- construction/result surfaces (
new,bind,some,ok,err).
Dependencies
Prerequisitos diretos:
PR-11.1PR-11.2
Scope
- Extrair
parsePostfix. - Extrair
parsePrimary,parseParenthesizedPrimary,parseTupleItems,parseTupleItem. - Extrair
parseNewExpression,parseBindExpression,parseSomeExpression,parseOkExpression,parseErrExpression. - Preservar recovery atual para
?, tuple malformed e parens.
Non-Goals
- Nao alterar a aridade de tuple literal.
- Nao alterar mixed labeled/unlabeled tuple validation.
- Nao alterar o formato aceito de
new Vec.zero(...)ebind(ctx, fn).
Method
O que deve ser feito explicitamente
- Introduzir subparsers por familia sintatica em vez de criar um novo monolito.
- Manter a ordem atual de postfix chaining.
- Preservar lookahead de tuple/group exatamente como hoje.
- Reforcar testes de tupla, construction e propagate operator invalido.
Acceptance Criteria
parsePostfixeparsePrimarydeixam de concentrar todas as superficies primarias.- Tuplas, grupos, constructions e postfix chains continuam equivalentes.
- Nao ha mudanca funcional em AST, spans ou diagnosticos.
Tests
:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsExprParserTest*:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsParserTest*:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsOptionalResultTest*:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsApplyResolutionTest*
Affected Documents
- Nenhum documento normativo.
Open Questions
- 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.