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