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