Javacc
This presentation is the property of its rightful owner.
Sponsored Links
1 / 16

JavaCC PowerPoint PPT Presentation


  • 59 Views
  • Uploaded on
  • Presentation posted in: General

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 : [email protected] [email protected]

Download Presentation

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Javacc

JavaCC

Prof. AlexandreMonteiro

Baseadoem material cedidopelo Prof. EuclidesArcoverde

Recife


Contatos

Contatos

  • Prof. Guilherme Alexandre Monteiro Reinaldo

  • Apelido: Alexandre Cordel

  • E-mail/gtalk: [email protected]

    [email protected]

  • Site: http://www.alexandrecordel.com.br/fbv

  • Celular: (81) 9801-1878


Javacc1

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


Parser recursivo descendente

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


Utiliza o

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.


Formato de uma descri o

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;


Formato de uma descri o cont

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


Formato de uma descri o cont1

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">

    }


Resolu o de ambig idade

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.


Formato de uma descri o cont2

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


Formato de uma descri o cont3

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


Descri o completa

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


Programa principal

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);

    }

    }


Pr xima aula 07 nov

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/


Refer ncias

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/


Bibliografia

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)


  • Login