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