# PR-10.4 - PBS Parser Block and Statement Decomposition ## Briefing Depois de extrair tipos/atributos e declaracoes top-level, o maior hotspot restante de `PbsParser` passa a ser parsing de blocos e statements. Esta PR separa `block`, `statement`, `assignment`, `loop` e controle de fluxo em um parser dedicado, sem alterar a funcionalidade. ## Motivation ### Dor atual que esta PR resolve 1. `parseBlock`, `parseStatement`, `parseIfStatement`, `parseForStatement` e correlatos mantem alta complexidade e forte acoplamento com `loopDepth`. 2. A mistura de statement parsing com helpers de token/erro dificulta evolucao e leitura. 3. O parser de blocos e o ponto mais sensivel para regressao e precisa de uma fronteira estrutural clara. ## Target Extrair a superficie de blocos e statements para um colaborador dedicado: 1. blocos, 2. statements estruturados, 3. assignment detection, 4. controle de `loopDepth`. ## Dependencies Prerequisitos diretos: 1. `PR-10.1` 2. `PR-10.2` 3. `PR-10.3` ## Scope 1. Extrair `parseBlock`, `parseStatement`, `parseLetStatement`, `parseAssignStatement`, `parseLValue`. 2. Extrair `parseIfStatement`, `parseForStatement`, `parseWhileStatement`, `parseBreakStatement`, `parseContinueStatement`, `parseReturnStatement`. 3. Extrair `isAssignmentStatementStart` e helpers locais associados. ## Non-Goals 1. Nao alterar regras de tail expression. 2. Nao alterar precedence de expressoes. 3. Nao alterar as mensagens atuais de erro para loop control e assignment targets. ## Method ### O que deve ser feito explicitamente 1. Introduzir um `PbsBlockParser` ou equivalente. 2. Encapsular `loopDepth` dentro do contexto compartilhado ou de uma API pequena de entrada/saida de loop. 3. Reutilizar `PbsExprParser` como dependencia, sem alterar seu contrato. 4. Preservar spans e forma de recovery dentro de blocos. ## Acceptance Criteria 1. `PbsParser` deixa de conter a maior parte do parsing de blocos e statements. 2. `loopDepth` continua correto para `break` e `continue`. 3. Nenhum teste de parser, semantica de flow ou lowering sofre alteracao funcional. ## Tests 1. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsParserStatementsTest*` 2. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsControlFlowTest*` 3. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsFallthroughTest*` 4. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test` ## Affected Documents 1. Nenhum documento normativo. ## Open Questions 1. `isAssignmentStatementStart` deve permanecer no parser de bloco ou virar helper de cursor/lookahead. A recomendacao e mantê-lo no parser de bloco nesta PR e avaliar extração posterior apenas se necessário.