prometeu-studio/docs/pbs/pull-requests/PR-11.3-pbs-expr-parser-postfix-primary-and-construction-decomposition.md

2.7 KiB

PR-11.3 - PBS Expr Parser Postfix, Primary and Construction Decomposition

Briefing

O segundo grande concentrador de complexidade em PbsExprParser esta nas superficies de postfix e primary: chamadas, membros, propagate, tuplas, blocos, new, bind, some/ok/err.

Esta PR separa essas familias em colaboradores menores, sem alterar a funcionalidade.

Motivation

Dor atual que esta PR resolve

  1. parsePostfix, parsePrimary e parseParenthesizedPrimary misturam muitas formas sintaticas distintas.
  2. Tuple literals, grouped expressions e construction surfaces compartilham lookahead delicado.
  3. A manutencao dessas regras num unico metodo torna alto o custo de qualquer evolucao futura.

Target

Separar parsing de superficies primarias e postfix:

  1. postfix chaining,
  2. primary literals/identifiers/blocks,
  3. tuple/group handling,
  4. construction/result surfaces (new, bind, some, ok, err).

Dependencies

Prerequisitos diretos:

  1. PR-11.1
  2. PR-11.2

Scope

  1. Extrair parsePostfix.
  2. Extrair parsePrimary, parseParenthesizedPrimary, parseTupleItems, parseTupleItem.
  3. Extrair parseNewExpression, parseBindExpression, parseSomeExpression, parseOkExpression, parseErrExpression.
  4. Preservar recovery atual para ?, tuple malformed e parens.

Non-Goals

  1. Nao alterar a aridade de tuple literal.
  2. Nao alterar mixed labeled/unlabeled tuple validation.
  3. Nao alterar o formato aceito de new Vec.zero(...) e bind(ctx, fn).

Method

O que deve ser feito explicitamente

  1. Introduzir subparsers por familia sintatica em vez de criar um novo monolito.
  2. Manter a ordem atual de postfix chaining.
  3. Preservar lookahead de tuple/group exatamente como hoje.
  4. Reforcar testes de tupla, construction e propagate operator invalido.

Acceptance Criteria

  1. parsePostfix e parsePrimary deixam de concentrar todas as superficies primarias.
  2. Tuplas, grupos, constructions e postfix chains continuam equivalentes.
  3. Nao ha mudanca funcional em AST, spans ou diagnosticos.

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 --tests *PbsSemanticsOptionalResultTest*
  4. :prometeu-compiler:frontends:prometeu-frontend-pbs:test --tests *PbsSemanticsApplyResolutionTest*

Affected Documents

  1. Nenhum documento normativo.

Open Questions

  1. O parsing de tuple/group deve ficar junto de primary ou em helper especializado de parenthesized surfaces. A recomendacao e extrair para helper especializado, porque esse e o trecho com lookahead mais sensivel.