# 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.