Geradores de analisadores léxicos
O que é?

Até o momento desenvolvemos o nosso próprio
analisador léxico a partir de um autômato finito.

Dessa forma fizemos algo parecido com o diagrama
abaixo que representa um autômato e uma
implementação que simula o funcionamento desse
autômato.

Implementar um analisador léxico é uma tarefa muito
trabalhosa, como essa complexidade é frequente
surgiriam algumas ferramentas que apoiam esse tipo de
programação.

Essas ferramentas são conhecidas como geradores de
analisadores léxicos, elas automatizam o processo de
implementação de um autômato no reconhecimento de
sentenças regulares partir de expressões regulares.

Existem diversas implementações para gerar analisadores
léxicos para diferentes linguagens de programação.
Exemplo de GAL
Flex – versão GNU do lex para C.
http://flex.sourceforge.net/
JFlex – versão Java com pequena diferença na sintaxe de entrada.
http://jflex.de/download.html
Turbo Pascal Lex/Yacc
http://www.musikwissenschaft.uni-mainz.de/~ag/tply/
Flex++
http://www.kohsuke.org/flex++bison++/
CSLex – versão C#, derivada do Jlex.
http://www.cybercom.net/~zbrad/DotNet/Lex

Os geradores de analisadores léxicos geram rotinas
para fazer a análise léxica de uma linguagem de
programação a partir de um arquivo de
especificações contendo basicamente expressões
regulares que descrevem os tokens.

É possível fazer a identificação de cada token através
do seu padrão, após esse processo é gerado um
arquivo fonte com a implementação do analisador
léxico que transforma os padrões de em uma
sequencia de tokens

O GAL utiliza uma linguagem denominada linguagem
Lex e a ferramenta em si é conhecida como
“compilador Lex”.
JFlex

A figura abaixo define a estrutura de um processo de
geração de um analisador léxico utilizando a
ferramenta JFlex, outros analisadores que
implementam a linguagem Lex utilizando o mesmo
processo

Um arquivo de entrada escrito em linguagem Lex
chamado regras.flex descreve o analisador léxico em
si, o “Flex transforma o arquivo regras.flex em um
código fonte Java chamado do yylex.java que será
utilizado para processar o fluxo de caracteres da
linguagem de programação.
Estrutura básica da linguagem Lex.
Declarações
%%
%{
Funções - variaveis
%}
Definições regulares
%%
Regras de tradução
Download

Slide - Compiladores