JavaCC

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

description

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] - PowerPoint PPT Presentation

Transcript of JavaCC

1

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]

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

Parser Recursivo Descendente

Técnica para implementar tabelas LL

Exemplo:

Regras = { X a X

X b }

Tabela LL:

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

}

}

a b

X a X b

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

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>

}

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

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)