O LEX / FLEX servem para gerar automaticamente programas (usualmente em “C”) fazendo a leitura de uma entrada, de modo a varrer um texto e/ou programa (“scanners”) a fim de obter uma seqüência de unidades léxicas (“tokens”). Os tokens gerados pelos programas criados pelo LEX/FLEX serão usualmente processados posteriormente por um programa que realizará a analise sintática. Lex => Gerador de analisadores léxicos (UNIX – Ex.: Lex AT&T, Berkeley BSD) Flex => Gerador de analisadores léxicos (LINUX / Windows-DOS – GNU Lex) Entrada: Arquivo de descrição do analisador léxico Saída: Programa na linguagem “C” que realiza a análise léxica (default: lexyy.c) Outros geradores de analisadores: TPly – TP Lex / Yacc => Gera um programa em PASCAL (scanner em Pascal) JavaCC => Para linguagem Java Flex++ ou Flexx => Para linguagem C++ (orientado a objetos) Usando o FLEX: 1. FLEX -o .l *.l => Arquivos que contêm as definições das unidades léxicas a serem identificadas Contém um conjunto de especificações de expressões regulares que serão usadas para reconhecer os tokens. *.c => Arquivo do programa “C” que implementa o analisador léxico especificado. Principais opções do FLEX: -i => Case Insensitive (ignora diferença entre maiúscula/minúsculas) --version => Exibe a versão atual do programa flex em uso -+ => Geração de código de saída em C++ 2. GCC -o -lfl Observações importantes sobre a geração do programa de análise léxica: - É necessário linkar (-l) uma bibliotec (“lib”) do analisador léxico na compilação do código gerado. O FLEX usa a lib “fl” e o LEX usa a lib “l”. - O programa gerado pode ser executado, onde usualmente a entrada do texto a ser analisado é feita pela “stdin” (teclado). 3. Executar o programa gerado... Compiladores 1 – Prof. Osório Pag.: 2 EXPRESSÕES REGULARES – Usada pelo LEX / FLEX: [0-9] => Reconhece um dígito [a-zA-Z] => Reconhece uma letra (comum = sem acentos) [\ \t\n] => Reconhece um espaço em branco ou um tab ou uma nova linha xxxxx => Reconhece a