A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Gerador de Analisadores Léxicos Prof. André Luis Meneses Silva

Apresentações semelhantes


Apresentação em tema: "1 Gerador de Analisadores Léxicos Prof. André Luis Meneses Silva"— Transcrição da apresentação:

1 1 Gerador de Analisadores Léxicos Prof. André Luis Meneses Silva

2 2 Antes de Começar Instalar a JDK Instalar o Eclipse IDE (JDT) Instalar o JFLEX e o CUP Instalar o JFLEX e CUP Plugin

3 3 JFlex: Um gerador de Analisadores Léxicos Permite especificar analisadores léxicos Gera um analisador léxico, escrito em Java Versão moderna do Lex e versão eficiente de JLex JFLEX Especificação Léxica Analisador Léxico ( Yylex.java ) Compilador Java (javac) Analisador Léxico ( Yylex.class )

4 4 Especificações JFlex 1. código do usuário % 2. diretivas do JFlex e definições regulares % 3. regras Código do Usuário package e imports Definição de classes utilitárias Diretivas Customização da classe parser gerada. Definições regulares auxiliares Regra: expressão regular com um código java associado

5 5 Exemplo // Código do usuário package exemplo.lex; import exemplo.token.*; % //Diretivas do Jflex %function proximoToken %type Token

6 6 Exemplo //Código incluído a classe do parser. %{private TabelaSimbolos tabela; public Yylex(tabelaSimbolos tabela) { this.tabela = tabela; private int instalarId(String id) {...} //inst na tabela %}

7 7 Exemplo //definições regulares auxiliares delim=[\ \t\n\r] ws={delim}+ letra=[a-zA-Z] digito=[0-9] id={letra}({letra}|{digito})* numero={digito}+ (\.{digito}+)? (E[+\-]? {digito}+)?

8 8 Exemplo //Regras % {ws}{} if{return new Token(sym.IF);} {id}{int i = instalarId(yytext()); return new Token(sym.ID,new Integer(i));} {numero}{return new Token(sym.NUM, new Double(yytext()));} "<"{return new Token(sym.LT);} "<="{return new Token(sym.LE);}.... {system.out.println("caract. desconhecido");}

9 9 Como é feito o casamento 1.É escolhido o token de maior tamanho possível. –Se há mais de dois, o primeiro na listagem é escolhido Ex.: palavras reservadas deverão ser listadas primeiro para não serem ocultas por {id} 2.É executada a ação associada.

10 10 Expressões Regulares no JFlex Metacaracteres ? * + | ( ) ^ $ / ;. = [ ] { } " \ ! ~ precisam ser escapados com aspas ou \ Expresões regulares –e f, e | f, e*, e+, e? e (e) significado normal –\b, \n, \t, \f, \r, \udddd, \., \\, \$,.... –$ fim de linha –. tudo menos \n –"...." string sem escape, exceto para " e \ –{nome} macro –[bde\n], [a-zA-Z], [a-z0-9] [^a-z] // Tudo com exceção de a-z –classes de caracteres

11 11 Exemplo: Comentários "/*" [^]* "*/" { /*não faça nada */} Funciona? Outro tentativa: "/*" [^*]* "*" ([^/] [^*]* "*")* "/ Atividade 1 valendo ponto para projeto: Resolver esse problema para a próxima aula.

12 12 Outros operadores do JFlex A negação de uma exp. reg. !e Casa com todas as cadeias que não casam e O operador upto ~e Casa tudo até a primeira ocorrência de e (incluindo) ~e equivale com !([^]* e [^]* | "") e Exemplo dos comentários "/*" ~"*/" Cuidado: negação e upto são muito ineficientes (na geração)

13 13 Estados Mistura de Exp. Reg. com estados (autômatos) Especificações mais operacionais No entanto, as vezes mais adequadas. { "*/" {yybegin( YYINITIAL) ; } [^] { /*nada*/ } } {.... }... } { if {return new Token...} {id} {return new Token... } "/*" {yybegin(COMMENT);} "/**" {yybegin( DOC-COMMENT);}... }

14 14 Exercício Atividade 2 Valendo ponto para o projeto. Como poderia especificar comentários aninhados usando estados?

15 15 O operador de lookahead e / f Casa um e (onde e é uma expressão regular) seguido de um f. O texto relativo ao f não é consumido e $ Casa com e seguido de (operador de fim de linha). Operador ineficiente (na execução)

16 16 Outras ferramenta alternativas Lex Primeira ferramenta neste estilo. Gera C e C++ JAVACC Gerador de Analisador Léxico e Sintático (2 em 1). Oficial da Sun. Sintaxe das exp. regulares diferente. Poder de expressão equiparável. SableCC 2 em 1

17 17 Atividade 3 (valendo ponto para o projeto). Definir para a linguagem da última aula o analisador léxico. Tokens: if, identificadores, liteirais numéricos, operadores e delimitadores. Ver slide lexico.ppt Entrega das 3 atividades (08/set). Tarefa


Carregar ppt "1 Gerador de Analisadores Léxicos Prof. André Luis Meneses Silva"

Apresentações semelhantes


Anúncios Google