O que você vai aprender
Definir com precisão token, lexema e padrão e distingui-los.
Escrever expressões regulares para as principais classes léxicas.
Aplicar a regra do maior casamento e tratar palavras reservadas.
Simular um analisador léxico sobre um trecho de código.
Por onde começa a tradução?
O código-fonte chega ao compilador como um fluxo de caracteres: letras, dígitos, espaços, símbolos. O primeiro trabalho é dar sentido a essa torrente, agrupando os caracteres em "palavras" da linguagem.
Essa fase, a análise léxica, é a fundação. Se ela errar, todas as fases seguintes recebem lixo. Por isso começamos por aqui.
O que veremos nesta aula
- O que o scanner produz e descarta.
- A tríade token/lexema/padrão.
- Expressões regulares como linguagem de especificação.
- O simulador léxico em ação.
Token, lexema e padrão
Lexema. A sequência concreta de caracteres do código (soma).
Padrão. A regra que descreve os lexemas de um token (ex.: "letra seguida de letras/dígitos").
Por que três conceitos diferentes?
A distinção parece sutil, mas é essencial. O padrão é a especificação (a regra). O lexema é uma ocorrência concreta no texto. O token é a categoria com a qual essa ocorrência é classificada.
Um mesmo token (digamos, ID) pode ter infinitos lexemas (x, soma, contador), todos casando com o mesmo padrão.
Tokenizando uma linha
Considere a linha de código a seguir e sua tokenização:
| Lexema | Token |
|---|---|
| preco | <ID, "preco"> |
| = | <ATRIB> |
| 10 | <NUM, 10> |
| * | <OP, "*"> |
| qtd | <ID, "qtd"> |
| ; | <PVIRG> |
Passo a passo: o scanner em ação
Expressões regulares
Operadores básicos: união (|), concatenação (justaposição), fecho de Kleene (*, zero ou mais), fecho positivo (+, um ou mais) e opcional (?, zero ou um).
Especificando classes léxicas
Cada token de uma linguagem é especificado por uma expressão regular sobre o seu padrão:
| Classe léxica | Expressão regular |
|---|---|
| Identificador | letra (letra | dígito)* |
| Inteiro | dígito+ |
| Número real | dígito+ ( . dígito+ )? |
| Espaço em branco | ( espaço | tab | nl )+ |
Moeda, categoria e descrição
Os operadores de ER
| Operador | Significado | Exemplo |
|---|---|---|
| | | União (ou) | a | b casa "a" ou "b" |
| concatenação | seguido de | ab casa "ab" |
| * | zero ou mais | a* casa "", "a", "aa"... |
| + | um ou mais | a+ casa "a", "aa"... |
| ? | opcional | a? casa "" ou "a" |
O lugar do scanner
O analisador léxico fica entre o arquivo-fonte e o analisador sintático, alimentando-o com tokens sob demanda:
(léxico)→Tokens→Parser
(sintático)
O parser pede "o próximo token" e o scanner o entrega, escondendo os espaços e comentários.
A regra do maior casamento
Quando vários padrões casam, o scanner adota duas regras de desempate:
- Maior casamento (longest match): escolhe o lexema mais longo possível. Diante de "ABC", reconhece um identificador "ABC", não três identificadores de uma letra.
- Prioridade de regra: entre padrões de mesmo comprimento, vence o listado primeiro (por isso palavras-chave costumam vir antes de identificadores).
Verifique você mesmo: tokens
Quantos tokens há em "x>=3" (sem contar fim de arquivo)?
Palavras reservadas
Palavras como if e while casam exatamente com o padrão de identificador. Como distingui-las?
Armadilhas léxicas
Outro erro comum: esquecer que o ponto sozinho em "3." (real sem parte decimal) não casa com dígito+ ( . dígito+ )?, porque o "?" exige dígito após o ponto.
Especificando o léxico
Reflita: por que separar léxico da sintaxe?
Por que não deixar o parser ler caractere por caractere e dispensar o scanner?
Termos-chave da aula
Onde isto se encaixa no curso
A análise léxica é a porta de entrada do front-end:
- Vem da aula 2: tokens correspondem ao tipo 3 (regular) de Chomsky.
- Continua na aula 4: como as ER viram autômatos e código de scanner.
- Alimenta a aula 5 em diante: o parser consome a sequência de tokens produzida aqui.
Resumo visual
Veja o scanner funcionando
O simulador abaixo é um analisador léxico real, em JavaScript. Digite código e observe a sequência de tokens — cor por categoria. Experimente comentários //, strings, operadores compostos como ">=" e símbolos inválidos para ver os erros léxicos.
Use-o para testar suas próprias expressões regulares mentais: o que você espera que vire um token só? E dois?
Atividade em grupo · Projetando uma linguagem mínima
Em trios, especifiquem o léxico de uma minilinguagem de calculadora.
Roteiro
- Listem os tokens necessários: números, operadores, parênteses, identificadores.
- Escrevam a expressão regular de cada token.
- Testem mentalmente com a entrada x = (3 + 4) * 2 e listem os tokens esperados.
- Validem digitando no simulador da aula.
Mini-quiz · Aula 3
20 questões sobre esta aula. Escolha e veja a explicação na hora.
📌 Resumo — leve isto para a prova
- Token (categoria) ≠ lexema (caracteres) ≠ padrão (regra).
- Expressões regulares especificam os padrões léxicos.
- A regra do maior casamento e a prioridade de regra desempatam reconhecimentos.
- Palavras-chave são reconhecidas como ID e reclassificadas por tabela.
- A análise léxica trata de linguagens regulares (tipo 3 de Chomsky).