1 / 16

JavaCC

JavaCC. Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife. Contatos. Prof. Guilherme Alexandre Monteiro Reinaldo Apelido: Alexandre Cordel E-mail/ gtalk : alexandrecordel@gmail.com greinaldo@fbv.edu.br

Télécharger la présentation

JavaCC

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. JavaCC Prof. AlexandreMonteiro Baseadoem material cedidopelo Prof. EuclidesArcoverde Recife

  2. Contatos • Prof. Guilherme Alexandre Monteiro Reinaldo • Apelido: Alexandre Cordel • E-mail/gtalk: alexandrecordel@gmail.com greinaldo@fbv.edu.br • Site: http://www.alexandrecordel.com.br/fbv • Celular: (81) 9801-1878

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

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

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

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

  7. Formato de uma Descrição(cont.) • 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) • Características da classes gerada: • Construtor: ReadExpr(InputStream source) .... • Implementação dos não-terminais através de métodos

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

  9. Resolução de ambigüidade • 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. Formato de uma Descrição(cont.) • Define o não-terminal S: void S() : { } { X() <ENTER> } • Equivalente: S  X enter • Sintaxe Geral: TipoDoNaoTerminal NomeNaoTerminal(Argumentos) : { Declaração de variáveis Locais } { Declaração das regras e Ações } • Conflitos na tabela LL geram erros que serão reportados ao projetista

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

  12. PARSER_BEGIN(ReadExpr) public class ReadExpr { } PARSER_END(ReadExpr) SKIP : { " " | "\t" } TOKEN : { <A : (["a"-"z"])+ > | <B : (["0“-”9”])+ > | <ENTER : "\n"> } void S() : { } { X() <ENTER> } void X() : { } { <A> X() | <B> } Descrição Completa

  13. Programa Principal • 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 • Estudem/Revisem as aulas dadas até o presente momento. • Estudar o JavaCC seguindo as referências passadas a seguir. • Existe bastante material na internet (Ex. youtube) • Principais Referências: • http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-cooltools.html • https://javacc.java.net/

  15. Referências • JavaCC • https://javacc.dev.java.net/ • Eclipse JavaCC Plug-in • http://eclipse-javacc.sourceforge.net/ • Tutorial • http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-cooltools.html • Site Oficial • https://javacc.java.net/

  16. Bibliografia • 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)

More Related