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

Slides:



Advertisements
Apresentações semelhantes
Estruturas de Repetição
Advertisements

II – Análise léxica DEI Papel do analisador léxico.
II – Análise léxica DEI lex: linguagem de especificação para analisadores léxicos Implementação de simuladores de autómatos finitos Bibliografia aconselhada:
III – Análise sintáctica
III – Análise sintáctica
III – Análise sintáctica Geradores de parsers Bibliografia aconselhada: –Aho, Sethi e Ullman – secção 4.9 LFA 1999/ Jorge Morais.
Capítulo 1 Introdução.
Tratamento de Exceções
Aula Teste INFNET terça-feira, 11 de janeiro de 2011
Software Básico Silvio Fernandes
Linguagens de Programação Orientadas a Objetos
De 17 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes Aula.
Programação Básica em Java
Recursividade Inhaúma Neves Ferraz
JavaCC e JJTree Geração de compiladores implementados em Java
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Capítulo 13 Pacotes. 2 Capítulo 13 – Pacotes Pacotes Pacote Cláusula package Cláusula import Executando uma classe de pacote Modificadores de acesso.
Construção de Compiladores
9 Controle de fluxo Seqüenciadores. Jumps. Escapes. Exceções.
André Luis Meneses Silva
JAVA ENUMS © 2009 by Jorge L. de Souza Leão março de 2009 PEE - COPPE/UFRJ.
Introdução a Programação JAVA
Estrutura de Dados em Java
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
Análise de Sistemas Contábeis
JAVA: Conceitos Iniciais
Sistemas de Informação Gerenciais
Programação Orientada a Objetos com Java
JAVA Linguagem Ambiente de Desenvolvimento
Ferramentas para a Construção de Compiladores: Lex & Yacc
Prof. Guilherme Alexandre Monteiro Reinaldo Recife
Programação I Aula 2 (Métodos)
Prof. Alexandre Monteiro Recife
Prof. Alexandre Monteiro Recife
Prof. Alexandre Monteiro
Geração de Código Intermediário
Orientação a Objetos e Java Graduação em Ciência da Computação
Esquemas de Tradução Prof. Alexandre Monteiro
Sistemas Operacionais
Prof. Guilherme Alexandre Monteiro Reinaldo Recife
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
KNN – K Nearest Neighbor (K Vizinhos mais Próximos)
Análise Sintática LR Prof. Alexandre Monteiro
Arquitetura de Desenvolvimento Web MVC vs. Three Tiers
Análises léxica e sintática
1 JAVA I/O (Entrada e Saída em JAVA) Prof. Alexandre Monteiro Recife.
Prof. Guilherme Alexandre Monteiro Reinaldo Recife
Aula sobre JavaCC Parsing Tarciana Dias Abril 2013.
Analisador Léxico Prof. Alexandre Monteiro
Tratamento de Exceções
Inteligência Artificial
e-Commerce (Comércio Eletrônico)
Análise Sintática Prof. Alexandre Monteiro
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Polimorfismo.
Análise Léxica Prof. Alexandre Monteiro
Estrutura de Controle em JAVA
Exceções Profa. Patrícia A. Jaques Alterada por Leandro Tonietto abr-15.
1 Características do Projeto Web Prof. Alexandre Monteiro Recife.
Hibernate Mapeamento Objeto-Relacional Aula Prática I
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
Revisão Compiladores – AP2
Análise Sintática de Descida Recursiva
Revisão Compiladores – AP1
1 Trabalho Extra SIG Prof. Guilherme Alexandre Monteiro Reinaldo Recife.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
JavaCC.
Sintaxe de uma Linguagem
PLP – JavaCC Java Compiler Compiler
1 Lista de Exercício (Algoritmos de Substituição de Páginas) Prof. Alexandre Monteiro Recife.
Transcrição da apresentação:

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

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

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 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 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 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 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 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 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 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 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 Descrição Completa PARSER_BEGIN(ReadExpr) public class ReadExpr { } PARSER_END(ReadExpr) SKIP : { " " | "\t" } TOKEN : { | } void S() : { } { X() } void X() : { } { X() | }

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

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:// /jw-1229-cooltools.html

15 Referências n JavaCC n Eclipse JavaCC Plug-in n Tutorial /jw-1229-cooltools.htmlhttp:// /jw-1229-cooltools.html n Site Oficial

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)