Responsável por converter código fonte em tokens.
Tokens principais: identificadores, números, strings, interpolated strings, símbolos (+ - * / == != <= >= etc.), palavras-chave.
Detectado ao ver f". O conteúdo interno (sem aspas) é armazenado bruto para parsing posterior.
- Inteiros ou floats (presença de ponto).
Mapa de keywords decide se o lexema vira token especial ou Identifier.
- O core expõe dois pools:
intern(&str) -> &'static strpara símbolos (identificadores/keywords).intern_arc(&str) -> Arc<str>para payload textual compartilhado na AST/runtime.
- Literais string no parser agora usam
intern_arc, reduzindo alocações duplicadas quando o mesmo literal aparece várias vezes no código. - O runtime reutiliza strings internadas em caminhos quentes como
type_of(...).
Recursivo descendente. Constrói Expr e Stmt.
Gerenciada por enum Precedence e laço parse_precedence.
TokenType::InterpolatedString -> parse_interpolated_string:
- Percorre caracteres
- Segmenta literais e expressões
{ ... }(com contador de profundidade) - Re-lexera e re-parsa cada expressão interna
Statements Match { expr, cases } armazenam pares (MatchPattern, Stmt).
- Recuperação de erro básica: parser coleta diagnostics e tenta continuar em alguns pontos, mas não faz sincronização avançada ainda
- Não há suporte a comentários de bloco
- Tipos são apenas strings nas anotações (sem verificação semântica profunda)
| Item | Prioridade |
|---|---|
| Erros com localização | Alta |
| Árvore de tipos dedicada | Média |
| Suporte a macros | Baixa |