75 lines
2.7 KiB
Markdown
75 lines
2.7 KiB
Markdown
# 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.
|