# PR-11.1 - PBS Expr Parser Shared Context and Precedence Spine ## Briefing `PbsExprParser` hoje concentra estado compartilhado, helpers basicos e toda a espinha de precedence em uma unica classe. Esta PR introduz a fundacao estrutural para decompor o parser de expressoes sem alterar comportamento: contexto compartilhado, helpers comuns e uma organizacao mais clara da cadeia de precedence. ## Motivation ### Dor atual que esta PR resolve 1. Extracoes futuras dependem de duplicar acesso a `cursor`, `diagnostics`, `fileId` e `blockParserDelegate`. 2. A cadeia de precedence existe, mas toda a infraestrutura esta acoplada a uma unica classe. 3. Refatorar primeiro a fundacao reduz risco antes de mover control-flow e postfix/primary. ## Target Estabelecer uma base segura para o refactor de `PbsExprParser`: 1. contexto compartilhado, 2. helpers de span/report/consume reutilizaveis, 3. espinha de precedence claramente separada do restante. ## Dependencies Nenhuma. ## Scope 1. Introduzir `ExprParserContext` ou equivalente. 2. Encapsular `cursor`, `diagnostics`, `fileId` e `blockParserDelegate` nessa camada. 3. Reorganizar a espinha de precedence (`parseExpression`, `parseApply`, `parseOr`, `parseAnd`, `parseEquality`, `parseComparison`, `parseAs`, `parseTerm`, `parseFactor`, `parseUnary`) sem mudar a ordem semantica. ## Non-Goals 1. Nao alterar associatividade ou precedence. 2. Nao mover ainda parsing de `if/switch/handle`. 3. Nao alterar `PbsParser` nem `PbsTokenCursor`. ## Method ### O que deve ser feito explicitamente 1. Criar um contexto compartilhado pequeno e explicito. 2. Manter `PbsExprParser` como entrypoint package-private. 3. Preservar a ordem atual de chamadas na chain de precedence. 4. Validar que esta PR e puramente estrutural. ## Acceptance Criteria 1. `PbsExprParser` continua com o mesmo contrato de entrada/saida. 2. Precedence e associatividade permanecem equivalentes. 3. Nao ha mudanca observavel em AST, spans ou diagnosticos de expressoes. ## 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` ## Affected Documents 1. Nenhum documento normativo. ## Open Questions 1. `blockParserDelegate` deve continuar como callback simples ou migrar para interface mais rica de surface parsing? Nesta PR, manter callback simples minimiza risco.