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

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

1 JavaCC Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.

Apresentações semelhantes


Apresentação em tema: "1 JavaCC Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife."— Transcrição da apresentação:

1 1 JavaCC Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife

2 Contatos n Prof. Guilherme Alexandre Monteiro Reinaldo n Apelido: Alexandre Cordel n /gtalk: n Site: n Celular: (81)

3 3 JavaCC n Java Compiler-Compiler n Ferramenta geradora de compiladores para a linguagem Java n Abrange as fases de análise léxica e sintática n Suporta E-BNF n Produz parsers recursivos descendentes

4 4 Parser Recursivo Descendente n Técnica para implementar tabelas LL n Exemplo: Regras = { X  a X X  b } n Tabela LL: n Parser recursivo descendente: void readTerm(Terminal c) { if (currentTerm!=c) throw new SyntaxError(); currentTerm = getNextTerm(); } void readX() { switch (currentTerm) { case a: readTerm(a); readX(); break; case b: readTerm(b); break; default: throw new SyntaxError(); } ab Xa Xb

5 5 Utilização n javacc desc Implementa a linguagem descrita em “desc” n jjdoc desc Produz uma E-BNF da linguagem “desc” n jjtree desc Implementa a árvore sintática para “desc” Será estudado futuramente.

6 6 Formato de uma Descrição n Configura o parser gerado (opcional): Options { opções } n Alguns tipos de opções: lookahead = 2; ignore_case = true; unicode_input = false;

7 7 Formato de uma Descrição (cont.) n Define a classe em que será implementada o Parser: PARSER_BEGIN(ReadExpr) public class ReadExpr {... Colocar aqui definições de métodos e variáveis úteis... } PARSER_END(ReadExpr) n Características da classes gerada: Construtor: ReadExpr(InputStream source).... Implementação dos não-terminais através de métodos

8 8 Formato de uma Descrição (cont.) n Define os caracteres que devem ser ignorados: SKIP : { " " | "\t" } n Define os tokens importantes da linguagem: TOKEN : { | }

9 9 Resolução de ambigüidade n Se a mesma palavra puder produzir dois ou mais tokens diferentes será considerado: O token que consumir mais caracteres O que foi declarado primeiro.

10 10 Formato de uma Descrição (cont.) n Define o não-terminal S: void S() : { } { X() } n Equivalente: S  X enter n Sintaxe Geral: TipoDoNaoTerminal NomeNaoTerminal(Argumentos) : { Declaração de variáveis Locais } { Declaração das regras e Ações } n Conflitos na tabela LL geram erros que serão reportados ao projetista

11 11 Formato de uma Descrição (cont.) n Declaração do não-terminal X: void X() : { } { X() | } n Equivale a: X  a X X  b

12 12 Descrição Completa PARSER_BEGIN(ReadExpr) public class ReadExpr { } PARSER_END(ReadExpr) SKIP : { " " | "\t" } TOKEN : { | } void S() : { } { X() } void X() : { } { X() | }

13 13 Programa Principal n Programa que cria e executa um parser: public static void main(String args[]) { ReadExpr parser = new ReadExpr(System.in); try { parser.S(); System.out.println("OK!!!!"); } catch (ParseException ex) { System.out.println("Error : " + ex); }

14 Próxima Aula – 07/NOV n Estudem/Revisem as aulas dadas até o presente momento. n Estudar o JavaCC seguindo as referências passadas a seguir. n Existe bastante material na internet (Ex. youtube) n Principais Referências: /jw-1229-cooltools.htmlhttp://www.javaworld.com/javaworld/jw /jw-1229-cooltools.html https://javacc.java.net/https://javacc.java.net/

15 15 Referências n JavaCC https://javacc.dev.java.net/ n Eclipse JavaCC Plug-in n Tutorial /jw-1229-cooltools.htmlhttp://www.javaworld.com/javaworld/jw /jw-1229-cooltools.html n Site Oficial https://javacc.java.net/

16 16 Bibliografia n AHO, A., LAM, M. S., SETHI, R., ULLMAN, J. D., Compiladores: princípios, técnicas e ferramentas. Ed. Addison Wesley. 2a Edição, 2008 (Capítulo 4)


Carregar ppt "1 JavaCC Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife."

Apresentações semelhantes


Anúncios Google