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