Análise léxica¶
A análise léxica está em src/analisador-lexico/scanner.l e usa Flex. O scanner devolve tokens definidos em conjunto com o Bison (parser.tab.h).
O que o scanner reconhece¶
Palavras reservadas¶
if, while, for, else, return, int, float, char, string, double, void
Observação:
whileeforjá são tokens léxicos, mas ainda não possuem regras sintáticas no parser.
Identificadores e literais¶
| Classe | Padrão / forma | Token |
|---|---|---|
| Identificador | [a-zA-Z_][a-zA-Z0-9_]* |
IDENT |
| Número | [0-9]+(\.[0-9]+)? |
NUMBER |
| String | "..." com escapes |
STRINGLIT |
| Caractere | 'x' com escape simples |
CHARLIT |
Operadores e pontuação¶
- Aritméticos:
+,-,*,/,% - Relacionais/igualdade:
<,<=,>,>=,==,!= - Atribuição e incremento:
=,++,-- - Delimitadores:
( ) { } [ ] ; ,
Itens ignorados¶
- Espaços em branco (
espaço, tab, CR, LF) - Comentários de linha (
// ...) - Comentários de bloco (
/* ... */) - Diretivas de pré-processador no início da linha (
#include,#define, ...)
Tratamento de erros¶
Caracteres não reconhecidos geram mensagem no stderr com o número da linha:
O caractere é devolvido ao parser, que em geral também falha em seguida.
Opções Flex usadas¶
yylineno— rastreia a linha para mensagens de erronoyywrap— um único arquivo/fluxo de entradanoinput/nounput— evitam avisos de funções não usadas
Limitações conhecidas desta etapa¶
- Comentário de bloco sem fechamento não gera mensagem léxica específica; a falha aparece depois no parser
- Não há modo de impressão da lista de tokens (útil para depuração)
while/forreconhecidos no léxico ainda não são aceitos na gramática