69 lines
2.4 KiB
Markdown
69 lines
2.4 KiB
Markdown
# PR-11.1 - PBS Expr Parser Shared Context and Precedence Spine
|
|
|
|
## Briefing
|
|
|
|
`PbsExprParser` hoje concentra estado compartilhado, helpers basicos e toda a espinha de precedence em uma unica classe.
|
|
|
|
Esta PR introduz a fundacao estrutural para decompor o parser de expressoes sem alterar comportamento: contexto compartilhado, helpers comuns e uma organizacao mais clara da cadeia de precedence.
|
|
|
|
## Motivation
|
|
|
|
### Dor atual que esta PR resolve
|
|
|
|
1. Extracoes futuras dependem de duplicar acesso a `cursor`, `diagnostics`, `fileId` e `blockParserDelegate`.
|
|
2. A cadeia de precedence existe, mas toda a infraestrutura esta acoplada a uma unica classe.
|
|
3. Refatorar primeiro a fundacao reduz risco antes de mover control-flow e postfix/primary.
|
|
|
|
## Target
|
|
|
|
Estabelecer uma base segura para o refactor de `PbsExprParser`:
|
|
|
|
1. contexto compartilhado,
|
|
2. helpers de span/report/consume reutilizaveis,
|
|
3. espinha de precedence claramente separada do restante.
|
|
|
|
## Dependencies
|
|
|
|
Nenhuma.
|
|
|
|
## Scope
|
|
|
|
1. Introduzir `ExprParserContext` ou equivalente.
|
|
2. Encapsular `cursor`, `diagnostics`, `fileId` e `blockParserDelegate` nessa camada.
|
|
3. Reorganizar a espinha de precedence (`parseExpression`, `parseApply`, `parseOr`, `parseAnd`, `parseEquality`, `parseComparison`, `parseAs`, `parseTerm`, `parseFactor`, `parseUnary`) sem mudar a ordem semantica.
|
|
|
|
## Non-Goals
|
|
|
|
1. Nao alterar associatividade ou precedence.
|
|
2. Nao mover ainda parsing de `if/switch/handle`.
|
|
3. Nao alterar `PbsParser` nem `PbsTokenCursor`.
|
|
|
|
## Method
|
|
|
|
### O que deve ser feito explicitamente
|
|
|
|
1. Criar um contexto compartilhado pequeno e explicito.
|
|
2. Manter `PbsExprParser` como entrypoint package-private.
|
|
3. Preservar a ordem atual de chamadas na chain de precedence.
|
|
4. Validar que esta PR e puramente estrutural.
|
|
|
|
## Acceptance Criteria
|
|
|
|
1. `PbsExprParser` continua com o mesmo contrato de entrada/saida.
|
|
2. Precedence e associatividade permanecem equivalentes.
|
|
3. Nao ha mudanca observavel em AST, spans ou diagnosticos de expressoes.
|
|
|
|
## Tests
|
|
|
|
1. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsExprParserTest*`
|
|
2. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsParserTest*`
|
|
3. `:prometeu-compiler:frontends:prometeu-frontend-pbs:test`
|
|
|
|
## Affected Documents
|
|
|
|
1. Nenhum documento normativo.
|
|
|
|
## Open Questions
|
|
|
|
1. `blockParserDelegate` deve continuar como callback simples ou migrar para interface mais rica de surface parsing? Nesta PR, manter callback simples minimiza risco.
|