prometeu-studio/docs/compiler/pbs/pull-requests/PR-11.1-pbs-expr-parser-shared-context-and-precedence-spine.md
2026-03-24 13:42:37 +00:00

2.4 KiB

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.