prometeu-studio/docs/pbs/pull-requests/PR-002-pbs-ast-contract-v1.md
2026-03-24 13:42:19 +00:00

1.9 KiB

PR-002 - PBS AST Contract V1

Briefing

Hoje o AST representa apenas funcoes, let/return e expressoes basicas. A spec exige familias obrigatorias de declaracoes e metadados estaveis para parser, diagnosticos e lowering. Este PR fecha o contrato estrutural do AST sem ainda resolver todas as regras semanticas.

Target

  • Specs:
    • docs/pbs/specs/11. AST Specification.md (secoes 6, 7, 8, 9, 10)
    • docs/pbs/specs/3. Core Syntax Specification.md (secoes 6, 7, 8, 9, 10)
  • Codigo:
    • prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/java/p/studio/compiler/pbs/ast/PbsAst.java
    • prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/java/p/studio/compiler/pbs/parser/PbsParser.java

Method

  1. Remodelar o root para conter imports e uma lista de TopDecl em ordem de fonte.
  2. Introduzir familias obrigatorias de declaracao (fn, struct, contract, service, error, enum, callback, declare const, implements).
  3. Adicionar estruturas de tipo (unit, simple, optional, tuple nomeada, Self) e retorno (plain, result).
  4. Garantir file/start/end em todos os nos consumidos por diagnostico/lowering.
  5. Definir nos de erro/recovery explicitos para evitar AST permissivo.

Acceptance Criteria

  • Existe exatamente um root por arquivo com filhos em ordem deterministica.
  • AST preserva identidade de declaracoes sem colapsar overload cedo.
  • Cada declaracao obrigatoria possui nome, assinatura/superficie e span.
  • Parser recovery nao fabrica semantica valida; erros ficam marcados no AST.
  • Precedencia e associatividade continuam observaveis pelo shape da arvore.

Tests

  • PbsParserTest:
    • validacao de shape do root (imports + topDecls);
    • cobertura de todas as familias de declaracao obrigatorias no AST;
    • asserts de spans (file/start/end) em nos principais;
    • fixture com erro e recovery garantindo estrutura coerente.