prometeu-studio/docs/pbs/pull-requests/PR-10.4-pbs-parser-block-and-statement-decomposition.md

2.7 KiB

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.