prometeu-studio/docs/compiler/pbs/pull-requests/PR-11.2-pbs-expr-parser-control-flow-subparsers.md
2026-03-24 13:42:37 +00:00

2.5 KiB

PR-11.2 - PBS Expr Parser Control-Flow Subparsers

Briefing

As formas de expressao com maior branching em PbsExprParser sao if, switch, handle e else.

Esta PR extrai essas construcoes para subparsers dedicados, mantendo a mesma sintaxe, mesmos diagnosticos e o mesmo AST.

Motivation

Dor atual que esta PR resolve

  1. if/switch/handle compartilham recovery, parsing de blocos e recursion, elevando bastante a complexidade local.
  2. Essas formas sao semanticamente coesas e podem viver fora do parser principal de precedence.
  3. Sem essa extracao, PbsExprParser continua grande mesmo apos separar a fundacao.

Target

Separar parsing de expressoes de controle de fluxo:

  1. handle,
  2. else,
  3. if expression,
  4. switch expression.

Dependencies

Prerequisito direto:

  1. PR-11.1

Scope

  1. Extrair parseHandle, parseHandlePattern, parseElse, parseIfExpression, parseIfExpressionFromToken, parseSwitchExpression, parseSwitchPattern.
  2. Preservar uso de parseSurfaceBlock para blocos de expressao.
  3. Manter exatamente a precedence atual dessas superficies.

Non-Goals

  1. Nao alterar a regra de if expression exigir else.
  2. Nao alterar curingas de switch.
  3. Nao alterar formatos aceitos de handle e remapeamento de erro.

Method

O que deve ser feito explicitamente

  1. Introduzir subparsers pequenos por familia de construcao.
  2. Reusar o contexto compartilhado da PR anterior.
  3. Garantir que parseExpression() continue entrando pela mesma superficie sintatica.
  4. Proteger a equivalencia com testes focados em control-flow expressions.

Acceptance Criteria

  1. A logica de if/switch/handle/else nao fica mais centralizada em PbsExprParser.
  2. ASTs gerados para essas construcoes permanecem equivalentes.
  3. Diagnosticos de formas invalidas continuam com o mesmo contrato observavel.

Tests

  1. :prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsExprParserTest*
  2. :prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsParserStatementsTest*
  3. :prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsResultFlowRulesTest*
  4. :prometeu-compiler:frontends:prometeu-frontend-pbs:test

Affected Documents

  1. Nenhum documento normativo.

Open Questions

  1. else deve viver junto do control-flow parser ou continuar na espinha de precedence. A recomendacao e movê-lo junto porque a associatividade e as mensagens de erro fazem parte do mesmo cluster conceitual.