prometeu-studio/docs/pbs/pull-requests/PR-001-pbs-lexer-core-syntax-alignment.md
2026-03-24 13:42:19 +00:00

2.1 KiB

PR-001 - PBS Lexer Core Syntax Alignment

Briefing

O lexer atual cobre apenas uma parte pequena da superficie definida em 3. Core Syntax Specification.md. Este PR fecha o contrato lexico minimo de v1 para que parser, semantica e diagnosticos trabalhem sobre um conjunto estavel de tokens.

Target

  • Specs:
    • docs/pbs/specs/3. Core Syntax Specification.md (secoes 4.1, 4.2, 4.4, 4.5, 10)
    • docs/pbs/specs/11. AST Specification.md (secao 7: atribuicao estavel)
  • Codigo:
    • prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/java/p/studio/compiler/pbs/lexer/PbsTokenKind.java
    • prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/java/p/studio/compiler/pbs/lexer/PbsLexer.java
    • prometeu-compiler/frontends/prometeu-frontend-pbs/src/main/java/p/studio/compiler/pbs/lexer/LexErrors.java

Method

  1. Expandir PbsTokenKind para todos os keywords ativos de v1 e operadores/pontuacao usados na gramatica.
  2. Adicionar tokens para COMMENT e para operadores compostos ausentes (->, +=, -=, *=, /=, %=).
  3. Suportar aliases lexicos (and/or/not) sem quebrar &&/||/!.
  4. Preservar spans estaveis em todos os tokens emitidos.
  5. Manter rejeicao deterministica para caracteres invalidos e strings nao terminadas.

Acceptance Criteria

  • Lexer emite classes obrigatorias: identifiers, keywords, literals, punctuation, operators, comments, EOF.
  • Keywords reservados nao entram como IDENTIFIER.
  • and/or/not e &&/||/! sao tokenizados de forma consistente.
  • -> nao e decomposto em dois tokens (- e >).
  • Comentarios de linha sao representados como token e nao perdem a continuidade do stream.
  • Todos os tokens carregam start/end corretos no arquivo.

Tests

  • PbsLexerTest:
    • caso feliz com arquivo contendo imports, declaracoes, controle de fluxo e operadores compostos;
    • caso de comentarios em multiplas linhas;
    • caso de palavras reservadas vs identificadores parecidos;
    • caso de string nao terminada (E_LEX_UNTERMINATED_STRING);
    • caso de caractere invalido (E_LEX_INVALID_CHAR).
  • Fixtures de regressao para ->, and/or/not e atribuicoes compostas.