Reconhecer
Decidir se uma cadeia pertence a uma linguagem simples.
Da linguagem regular à regra Flex e ao token
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.
Decidir se uma cadeia pertence a uma linguagem simples.
Escrever expressões regulares para classes de lexemas.
Diferenciar padrão, lexema, token e ação.
Relacionar a definição formal a uma regra Flex.
O scanner não “adivinha”: ele reconhece cadeias de uma linguagem.
Conjunto finito de símbolos disponíveis. Ex.: Σ = {0,1}.
Sequência finita de símbolos. Ex.: 1001.
Conjunto de cadeias que obedecem a uma regra.
Cadeias sobre Σ = {a,b} que começam com a e terminam com b.
Qual cadeia pertence à linguagem: começa com a e termina com b?
Uma ER é uma forma compacta de especificar conjuntos de cadeias.
ab significa a seguido de b.
a|b significa a ou b.
zero ou mais ocorrências.
uma ou mais ocorrências.
zero ou uma ocorrência.
O padrão não é apenas “texto estranho”: ele descreve exatamente quais lexemas devem ser reconhecidos.
Qual lexema NÃO é reconhecido por [a-zA-Z_][a-zA-Z0-9_]*?
Pergunta extensional: listar cadeias aceitas e rejeitadas.
Pergunta conceitual: explicar a regra que separa aceitas de rejeitadas.
Um autômato finito decide aceitação por estados e transições.
Cada estado resume o que importa sobre o prefixo lido. Para terminar em 01, basta saber se o sufixo atual é vazio, 0 ou 01.
No AFD apresentado, a cadeia 1001 termina em qual estado?
Para cada estado e símbolo, há uma próxima transição definida.
Pode haver múltiplos caminhos ou transições vazias.
A ferramenta pode converter especificações regulares em mecanismos eficientes de reconhecimento.
A análise léxica usa padrões para produzir categorias que o parser consegue consumir.
O scanner transforma caracteres em uma sequência de tokens.
Confundir os dois impede compreender o contrato entre Flex e Bison.
Expressão regular usada na regra.
Trecho concreto reconhecido na entrada.
Categoria devolvida ao parser.
Código executado quando o padrão casa.
Na regra "if" { return IF; }, o que é IF?
Agora o objetivo é explicar o código que você vai executar.
Explique, em 3 linhas, o papel da regra [0-9]+(\.[0-9]+)? em um scanner simples.
Ex.: aceitar 2abc como identificador.
Palavras reservadas devem ser tratadas antes de identificadores genéricos.
Ignorar caracteres inválidos pode esconder problemas.
Números e identificadores muitas vezes precisam transportar yytext/yylval.
Se a regra de ID aparece antes da regra "while", qual risco surge?
Compile o exemplo da semana 03 e rode entradas curtas.
Antes de executar, escreva quais tokens devem aparecer.
Acrescente um operador ou palavra reservada.
Explique a mudança usando padrão, lexema e token.
Dada uma entrada simples, antecipo os tokens gerados.
Dada uma regra Flex, separo padrão, ação, lexema e token.
Crio uma nova regra sem quebrar as anteriores.
O objetivo não é decorar sintaxe de expressão regular; é entender qual linguagem cada padrão reconhece e qual token ele produz.
Use este módulo como ponte para a prática de Flex. Ao chegar ao scanner.l, explique cada regra antes de executá-la.