JavaCC.

Slides:



Advertisements
Apresentações semelhantes
Software Básico Silvio Fernandes
Advertisements

Tópicos em Compiladores
Compiladores Claudio Benossi
Compiladores I Cristiano Damiani Vasconcellos
Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
Software Básico Silvio Fernandes
JavaCC e JJTree Geração de compiladores implementados em Java
Curso Sistemas de Informação Disciplina: Arquitetura de Software
YACC.
Lex e Yacc.
Relações em uma Gramática
Linguagem de Prog. e Programas
Construção de Compiladores
Construção de Compiladores
Sobrecarga e Declaração de Operadores Rafael Fonseca e Romeu Guimarães.
O Portal do Estudante de Computação
Prof. Bruno Moreno Aula 4 – 11/03/2011
Implementar Listas em Linguagem Funcional II
Análise léxica e sintática
Análise léxica e sintática
Aula prática - análise contextual
Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.
Ferramentas para a Construção de Compiladores: Lex & Yacc
Compiladores, Aula Nº 9 João M. P. Cardoso
Gramáticas Livres de Contexto
Compiladores, Aula Nº 10 João M. P. Cardoso
Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat
Estudo dos Conceitos e Paradigmas de Programação
Semântica de Linguagens de Programação
Análises léxica e sintática
SableCC José Francisco Pereira Equipe de Monitores
Análise léxica e sintática
Análise Léxica Primeira fase de um compilador
Mayerber Carvalho Neto
1 PLP – Varargs Adauto Trigueiro de A. Filho Emanoel Barreiros Helaine Lins.
1 JavaCC Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.
Capítulo II Gramáticas e Linguagens
Analise sintática aula-07-analise-sintática.pdf.
Ruby (2/2) André Braga Patrícia Lustosa. Intro Peguem a aula de ontem em /~plvr para ter como referência para os exercícios de hoje.
Análises léxica e sintática
Analise Semântica aula-10-analise-semântica.pdf.
Haskell :: Funções como valores George Darmiton da Cunha Cavalcanti Monitores: Bruno Barros cin.ufpe.br) Glerter Sabiá (gas2.
Emanuella Aleixo ( José Antônio Juliana Mafra Marcela Balbino
Análise Sintática Prof. Alexandre Monteiro
Análise Léxica Prof. Alexandre Monteiro
Tradução Dirigida por Sintaxe
Melhorias e Mensagens Amigáveis ao Usuário Centro de Informática Universidade Federal de Pernambuco Bruno Felipe Marco André Paulo Fernando Rodolfo Santos.
Mas para que serve um analisador sintático? Verificar se a estrutura gramatical do programa está correta Escrito de outra forma: O texto segue as regras.
Linguagens Livres de Contexto
Faculdade Pernambucana - FAPE Setembro/2007
Aula de SableCC Teoria e Implementação de Linguagens Computacionais (Compiladores) - IF688 – Artur Ribeiro de Aquino – ara Allan Jefferson – ajss.
COMPILADORES 04 Prof. Marcos.
Um Tradutor Dirigido por Sintaxe Simples
1 CIn / UFPE Parsing Tarciana Dias / Gustavo Carvalho / Março 2012.
1 Reestruturação das Linguagens da Disciplina “Paradigmas de Linguagens de Programação” para Java 1.5 Alunos: Angelo Ribeiro (arnpr) Eduardo Tavares (eagt)
Animador e Editor para a Linguagem Funcional 2 Carlos Eduardo Lima Lucas Roberto Bechert Schmitz Leonardo Reis Lucena Centro de Informática – UFPE, 2005.
Linguagem Funcional 2 Equipe: Gustavo Cabral Leonardo Maici Professor: Augusto
Sintaxe de uma Linguagem
Emanuella Aleixo ( José Antônio Juliana Mafra Marcela Balbino
PLP – JavaCC Java Compiler Compiler
Analisador sintático: Tipos de análises sintáticas
1 CIn / UFPE Algoritmos de Parsing Gustavo Carvalho Março 2011.
Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo.
OCLE Object Constraint Language Environment Fábio Moura CIn-UFPE.
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Implementar Listas em Linguagem Funcional II Projeto I - PLP Prof. Augusto Sampaio Equipe :Ana Paula Cavalcanti (apcc2) Clélio Feitosa (cfs) Zildomar C.
Estrutura de Dados Prof. André Cypriano M. Costa
1 Programação Multi-Paradigma Cristiano Bertolini – Ellison Siqueira – Guilherme Avelino –
1 CIn / UFPE Introdução a Parsing Gustavo Carvalho Abril 2015.
Transcrição da apresentação:

JavaCC

JavaCC Gerador de parser 100% Java Desenvolvido inicialmente pela Sun O mais utilizado pela comunidade Java Desenvolvido inicialmente pela Sun Hoje é mantido pela java.net É um parser top-down Mais fácil de depurar Utiliza uma sintaxe muito próxima de Java

JavaCC Desvantagens Mistura código Java com a gramática Não checa a corretude do código Java inserido Pode gerar classes que não compilam

JavaCC Inclui um pré-processador para geração de árvores sintáticas (jjTree) Possui um repositório de gramáticas bastante extenso disponível – inclui linguagens como Java, C, C++, Perl, etc Possui uma interface gráfica fácil de usar Definições léxicas e sintáticas em um único arquivo Não aceita ambigüidades. Ex: A gramática não pode possuir recursão à esquerda.(ex: expr:= expr ‘+’ expr)

JavaCC Instalação Via Eclipse MarketPlace OU Update site: http://eclipse-javacc.sourceforge.net/

Gramáticas em JavaCC Opções do Parser (Não obrigatório) Uma gramática JavaCC possui a seguinte estrutura: Opções do Parser (Não obrigatório) Definição da classe do Parser Definição dos Tokens (Componente Léxico) Terminais Definição das Produções (Componente Sintático) Ações semânticas associadas Não-Terminais

Opções do parser STATIC – diz se os métodos do parser serão estáticos (default: true) LOOKAHEAD – informa o nível de profundidade do lookahead (default: 1) IGNORE_CASE– instrui o parser a ser ou não case sensitive (default: false) DEBUG_PARSER – instrui o parser a registrar todas as informações durante o parsing do arquivo (default: false) Mais opções : https://javacc.java.net/doc/javaccgrm.html

Definição do Parser Este trecho define a classe do Parser. Nesta classe, podem ser definidos métodos e variáveis auxiliares. O formato é o seguinte: PARSER_BEGIN(parser_name) ... class parser_name ...{ } PARSER_END(parser_name)

Definição dos tokens Serve para especificar os tipos de tokens e as expressões regulares associadas Nesta seção são descritas as palavras reservadas TOKEN: { < NUMBER: (<DIGIT>)+ ( "." (<DIGIT>)+ )? > | < DIGIT: ["0"-"9"] > | < EOL: "\n" > }

Definição das produções Obedecem o seguinte formato: tipoRetorno nomeProducao(listaParametros): { código Java } subProducao1() { ação semântica correspondente } [lista de subProducoes] Declaração de variáveis, invocação de métodos, etc Código Java. Em geral, corresponde a montagem da árvore

Exemplo: BNF SOMA Calculadora ::= Soma | Subtracao Soma ::= Numero “+” Numero Subtracao  ::= Numero “-” Numero Numero::= [0-9]+

Exemplo: EBNF Programa ::= Expressao Expressao ::= Valor | ExpUnaria | ExpBinaria Valor ::= ValorConcreto ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString ExpUnaria ::= "-" Expressao | "not" Expressao | "length" Expressao ExpBinaria ::= Expressao "+" Expressao | Expressao "-" Expressao | Expressao "and" Expressao | Expressao "or" Expressao | Expressao "==" Expressao | Expressao "++" Expressao

Exemplo: EBNF Programa ::= Expressao Expressao ::= Valor | ExpUnaria | ExpBinaria Valor ::= ValorConcreto ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString ExpUnaria ::= "-" Expressao | "not" Expressao | "length" Expressao ExpBinaria ::= Expressao "+" Expressao | Expressao "-" Expressao | Expressao "and" Expressao | Expressao "or" Expressao | Expressao "==" Expressao | Expressao "++" Expressao Lembre-se de que o JavaCC não permite recursão à esquerda, por isso, é necessário modificar a gramática antes de traduzí-la.

Exemplo: EBNF Programa ::= Expressao Expressao ::= ExpressaoPar ExpressaoPar ::= ExpCondicionalOr ExpCondicionalOr ::= ExpCondicionalAnd ("or" ExpCondicionalAnd)* ExpCondicionalAnd ::= ExpIgualdade ("and" ExpIgualdade)* ExpIgualdade ::= ExpAritmetica ("==" ExpAritmetica)? ExpAritmetica ::= ExpConcatenacao (("+" | "-") ExpConcatenacao)* ExpConcatenacao ::= ExpUnaria ("++" ExpUnaria)* ExpUnaria ::= "-" Expressao | "not" Expressao | ValorConcreto ValorConcreto ::= ValorInteiro | ValorBooleano | ExpPar ExpPar ::= “(“Expressao“)”

Exercício Altere o exemplos dados para que estes possam reconhecer as seguintes expressões: exponenciação -> expr ::= expr ^ expr Valor concreto String e a expressão “length” Acrescente o que for necessário para fazer o parser de Expressões2

Exemplo: EBNF Programa ::= Expressao Expressao ::= ExpressaoPar ExpressaoPar ::= ExpCondicionalOr ExpCondicionalOr ::= ExpCondicionalAnd ("or" ExpCondicionalAnd)* ExpCondicionalAnd ::= ExpIgualdade ("and" ExpIgualdade)* ExpIgualdade ::= ExpAritmetica ("==" ExpAritmetica)? ExpAritmetica ::= ExpConcatenacao (("+" | "-") ExpConcatenacao)* ExpConcatenacao ::= ExpUnaria ("++" ExpUnaria)* ExpUnaria ::= "-" Expressao | "not" Expressao | "length" Expressao | ValorConcreto ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString | ExpPar ExpPar ::= “(“Expressao“)”

Referências https://javacc.dev.java.net/ https://javacc.dev.java.net/doc/docindex.html http://www.cs.aau.dk/~bt/SPOF07/Lecture4.htm http://www.antlr.org/works/index.html http://en.wikipedia.org/wiki/Top-down_parsing http://en.wikipedia.org/wiki/Bottom-up_parsing

PLP – JavaCC Java Compiler Compiler Joabe Jesus - jbjj@cin.ufpe.br Prof. Augusto Sampaio