CEDIS | Universidade de Brasília (UnB)

Nivelamento: autômatos e expressões regulares para análise léxica

Da linguagem regular à regra Flex e ao token

Prof. Dr. Sergio Antônio Andrade de Freitas
FGA0003 – Compiladores 1 · 2026/2
símbolo CEDIS logo UnB
símbolo CEDISCEDIS · COMP1
2/38

Por que este nivelamento existe

A avaliação diagnóstica indicou lacunas em autômatos, expressões regulares, gramáticas regulares e análise léxica. A resposta pedagógica é uma ponte curta, prática e verificável, não uma repetição completa de LFA.

símbolo CEDISCEDIS · COMP1
3/38

Ao final, você deve conseguir

Reconhecer

Decidir se uma cadeia pertence a uma linguagem simples.

Descrever

Escrever expressões regulares para classes de lexemas.

Explicar

Diferenciar padrão, lexema, token e ação.

Transferir

Relacionar a definição formal a uma regra Flex.

símbolo CEDISCEDIS · COMP1
4/38

Roteiro de estudo

  1. 01Linguagem, cadeia e padrão
  2. 02Expressões regulares como especificações
  3. 03Autômatos como reconhecedores
  4. 04Tokenização e regras Flex
  5. 05Prática guiada com o GitHub COMP1
seção

1. Linguagem antes de código

O scanner não “adivinha”: ele reconhece cadeias de uma linguagem.

símbolo CEDISCEDIS · COMP1
6/38

Três peças mínimas

Alfabeto

Conjunto finito de símbolos disponíveis. Ex.: Σ = {0,1}.

Cadeia

Sequência finita de símbolos. Ex.: 1001.

Linguagem

Conjunto de cadeias que obedecem a uma regra.

símbolo CEDISCEDIS · COMP1
7/38

Exemplo rápido de linguagem

Regra

Cadeias sobre Σ = {a,b} que começam com a e terminam com b.

Consequência

  • ab é válida
  • aab é válida
  • ba é inválida
  • aa é inválida
símbolo CEDISCEDIS · COMP1
8/38
atividade

Atividade 1 · Pertinência

Qual cadeia pertence à linguagem: começa com a e termina com b?

  1. ba
  2. aa
  3. abab
  4. bbb
símbolo CEDISCEDIS · COMP1
9/38

Feedback da atividade 1

  • abab começa com a e termina com b.
  • ba falha no primeiro símbolo.
  • aa falha no último símbolo.
  • bbb falha nos dois critérios.
seção

2. Expressões regulares

Uma ER é uma forma compacta de especificar conjuntos de cadeias.

símbolo CEDISCEDIS · COMP1
11/38

Operadores que mais importam no scanner

concatenação

ab significa a seguido de b.

alternância |

a|b significa a ou b.

repetição *

zero ou mais ocorrências.

repetição +

uma ou mais ocorrências.

opcional ?

zero ou uma ocorrência.

símbolo CEDISCEDIS · COMP1
12/38

Uma expressão regular é uma decisão

O padrão não é apenas “texto estranho”: ele descreve exatamente quais lexemas devem ser reconhecidos.

  • [0-9]+ reconhece inteiros positivos.
  • [a-zA-Z_][a-zA-Z0-9_]* reconhece identificadores simples.
anatomia de uma regra Flex
símbolo CEDISCEDIS · COMP1
13/38
atividade

Atividade 2 · Previsão

Qual lexema NÃO é reconhecido por [a-zA-Z_][a-zA-Z0-9_]*?

  1. total
  2. _aux
  3. valor2
  4. 2valor
símbolo CEDISCEDIS · COMP1
14/38

Feedback da atividade 2

  • O primeiro caractere deve ser letra ou sublinhado.
  • Depois do primeiro caractere, dígitos são permitidos.
  • 2valor começa com dígito; por isso, não encaixa no padrão.
símbolo CEDISCEDIS · COMP1
15/38

Duas perguntas diferentes

O que reconhece?

Pergunta extensional: listar cadeias aceitas e rejeitadas.

Por que reconhece?

Pergunta conceitual: explicar a regra que separa aceitas de rejeitadas.

seção

3. Autômatos como reconhecedores

Um autômato finito decide aceitação por estados e transições.

símbolo CEDISCEDIS · COMP1
17/38
AFD que reconhece cadeias terminadas em 01

AFD: memória finita da leitura

Cada estado resume o que importa sobre o prefixo lido. Para terminar em 01, basta saber se o sufixo atual é vazio, 0 ou 01.

símbolo CEDISCEDIS · COMP1
18/38
atividade

Atividade 3 · Simulação

No AFD apresentado, a cadeia 1001 termina em qual estado?

  1. q0
  2. q1
  3. q2
  4. depende do caminho escolhido
símbolo CEDISCEDIS · COMP1
19/38

Feedback da atividade 3

  • 1001 termina em 01.
  • O estado q2 é final.
  • Em AFD, não há escolha de caminho: cada símbolo determina uma transição.
símbolo CEDISCEDIS · COMP1
20/38

AFD e AFN: o que muda para o estudante?

AFD

Para cada estado e símbolo, há uma próxima transição definida.

AFN

Pode haver múltiplos caminhos ou transições vazias.

Para o scanner

A ferramenta pode converter especificações regulares em mecanismos eficientes de reconhecimento.

símbolo CEDISCEDIS · COMP1
21/38

A ponte completa

A análise léxica usa padrões para produzir categorias que o parser consegue consumir.

pipeline de padrão até token
seção

4. Tokenização

O scanner transforma caracteres em uma sequência de tokens.

símbolo CEDISCEDIS · COMP1
23/38
exemplo de tokenização

Lexema e token não são sinônimos

Confundir os dois impede compreender o contrato entre Flex e Bison.

símbolo CEDISCEDIS · COMP1
24/38

Quatro termos que não podem se misturar

Padrão

Expressão regular usada na regra.

Lexema

Trecho concreto reconhecido na entrada.

Token

Categoria devolvida ao parser.

Ação

Código executado quando o padrão casa.

símbolo CEDISCEDIS · COMP1
25/38
atividade

Atividade 4 · Classificação

Na regra "if" { return IF; }, o que é IF?

  1. Um lexema
  2. Um token
  3. Uma cadeia de entrada
  4. Um estado do autômato
símbolo CEDISCEDIS · COMP1
26/38

Feedback da atividade 4

  • "if" é o lexema/padrão literal reconhecido.
  • IF é a categoria enviada ao parser.
  • A ação return IF materializa o contrato com o Bison.
seção

5. Do conceito ao GitHub COMP1

Agora o objetivo é explicar o código que você vai executar.

símbolo CEDISCEDIS · COMP1
28/38

Semana 02 e semana 03 no GitHub

Semana 02

  • Guia de expressões regulares no Flex
  • exemplo.l e exemplo.y
  • entrada.txt e Makefile

Semana 03

  • scanner.l
  • palavras reservadas
  • identificadores, números, operadores
  • comentários e caractere desconhecido
símbolo CEDISCEDIS · COMP1
29/38
atividade

Atividade 5 · Leia uma regra

Explique, em 3 linhas, o papel da regra [0-9]+(\.[0-9]+)? em um scanner simples.

Resposta aberta · até 600 caracteres
símbolo CEDISCEDIS · COMP1
30/38

Modelo de resposta da atividade 5

  • A parte [0-9]+ exige ao menos um dígito.
  • (\.[0-9]+)? permite uma parte decimal opcional.
  • A regra separa lexemas numéricos para gerar um token, como NUMBER.
símbolo CEDISCEDIS · COMP1
31/38

Erros comuns no início

Padrão amplo demais

Ex.: aceitar 2abc como identificador.

Ordem de regras

Palavras reservadas devem ser tratadas antes de identificadores genéricos.

Erro silencioso

Ignorar caracteres inválidos pode esconder problemas.

Token sem valor

Números e identificadores muitas vezes precisam transportar yytext/yylval.

símbolo CEDISCEDIS · COMP1
32/38
atividade

Atividade 6 · Depuração

Se a regra de ID aparece antes da regra "while", qual risco surge?

  1. while pode ser classificado como ID
  2. números deixam de ser reconhecidos
  3. o parser deixa de existir
  4. o Flex não compila
símbolo CEDISCEDIS · COMP1
33/38

Feedback da atividade 6

  • O Flex escolhe a melhor correspondência e usa a ordem em empates relevantes.
  • Palavras reservadas devem aparecer antes do padrão genérico de identificadores.
  • Esse erro afeta o token enviado ao parser.
símbolo CEDISCEDIS · COMP1
34/38

Mini laboratório sugerido

1

1. Execute

Compile o exemplo da semana 03 e rode entradas curtas.

2

2. Preveja

Antes de executar, escreva quais tokens devem aparecer.

3

3. Modifique

Acrescente um operador ou palavra reservada.

4

4. Justifique

Explique a mudança usando padrão, lexema e token.

símbolo CEDISCEDIS · COMP1
35/38

Critério de saída deste módulo

Consigo prever

Dada uma entrada simples, antecipo os tokens gerados.

Consigo explicar

Dada uma regra Flex, separo padrão, ação, lexema e token.

Consigo modificar

Crio uma nova regra sem quebrar as anteriores.

símbolo CEDISCEDIS · COMP1
36/38
O objetivo não é decorar sintaxe de expressão regular; é entender qual linguagem cada padrão reconhece e qual token ele produz.
Síntese do módulo
símbolo CEDISCEDIS · COMP1
37/38

Próximo passo

Use este módulo como ponte para a prática de Flex. Ao chegar ao scanner.l, explique cada regra antes de executá-la.

símbolo CEDISCEDIS · COMP1
38/38

Referências

  1. Freitas, S. A. A. (2026). Relatório de análise da avaliação diagnóstica FGA0003 – Compiladores 1, semestre 2026/2. Universidade de Brasília.
  2. Freitas, S. A. A. (2025). Semana 02 – Fundamentos de linguagens formais e autômatos. FGA0003 – Compiladores 1. Universidade de Brasília.
  3. Freitas, S. A. A. (2025). Guia rápido das expressões regulares mais usadas no Flex. Repositório COMP1.
  4. Freitas, S. A. A. (2025). Repositório COMP1: exemplos progressivos com Flex e Bison. Universidade de Brasília.
  5. Aho, A. V., Lam, M. S., Sethi, R., & Ullman, J. D. (2006). Compilers: Principles, techniques, and tools (2nd ed.). Pearson.
→ avançar · ← voltar · deslize (touch) · n notas · f tela cheia · p imprimir