prometeu-studio/docs/pbs/pull-requests/PR-006.3-pbs-syntax-completeness-and-module-hygiene.md
2026-03-24 13:42:20 +00:00

2.0 KiB

PR-006.3 - PBS Syntax Completeness and Module Hygiene

Briefing

Depois do hardening sintatico principal, ainda restam lacunas de completude do contrato de sintaxe/modulo que afetam determinismo diagnostico e aderencia fina ao spec. Este PR fecha essas lacunas com foco em regras formais e higiene de modulo.

Target

  • Specs:
    • docs/pbs/specs/3. Core Syntax Specification.md (secoes 5.1, 6.1.1, 8, 12)
    • docs/pbs/specs/12. Diagnostics Specification.md (phase = syntax/linking)
  • Codigo:
    • prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/java/p/studio/compiler/pbs/parser/PbsParser.java
    • .../pbs/parser/PbsExprParser.java
    • .../pbs/lexer/PbsLexer.java
    • .../pbs/linking/PbsModuleVisibilityValidator.java

Method

  1. Atributos (AttrList) em .pbs:
    • introduzir parse minimo de atributo no frontend;
    • em modulo ordinario, rejeitar com diagnostico especifico e recuperacao estavel.
  2. Regras de modulo:
    • validar erro quando modulo possui mod.barrel mas zero arquivos .pbs.
  3. Ajustes de forma sintatica:
    • aceitar trailing comma em StructFieldList;
    • aplicar limites de aridade: tupla tipo (1..6) e tupla literal (2..6).
  4. Lexer/string:
    • diagnosticar escape de string invalido de forma deterministica (sem aceitar silenciosamente).

Acceptance Criteria

  • Uso de atributos em modulo ordinario gera erro deterministico com span primario no atributo.
  • Modulo sem .pbs e com mod.barrel nao passa silenciosamente.
  • declare struct S(a: int,); passa no parser.
  • Tupla tipo com mais de 6 campos falha deterministicamente.
  • Tupla literal com mais de 6 itens falha deterministicamente.
  • Escape invalido em string gera erro lexico dedicado.

Tests

  • Novo teste de parser para atributos em .pbs com recuperacao e codigo estavel.
  • Novo teste de linking para modulo sem .pbs.
  • Testes de parser para trailing comma em struct fields.
  • Testes de parser para limites de aridade de tupla tipo/tupla literal.
  • Teste de lexer para escape invalido em string.