# 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.