JavaCC e JJTree Geração de compiladores implementados em Java

Slides:



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

Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
Software Básico Silvio Fernandes
Uma linguagem de programação para o ambiente Virtuosi
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.
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
Curso Sistemas de Informação Disciplina: Arquitetura de Software
YACC.
Lex e Yacc.
Construção de Compiladores
7 Abstração Genérica Unidades genéricas e instanciação.
1 Aula 7 ImplementandoSubprogramas Universidade do Vale do Rio dos Sinos
Documentando con Javadoc
Estrutura de Dados em Java
Prof. Bruno Moreno Aula 4 – 11/03/2011
JAVA: Conceitos Iniciais
Departamento de Estatística e Informática
Programação Orientada a Objetos com Java
Análise léxica e sintática
Aula prática – geração de código (.NET)
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
Gramáticas Livres de Contexto
Programação I Aula 2 (Métodos)
Entendendo as definições de classe
O Processo de Compilação
Teoria e Implementação de Linguagens Computacionais – IF688
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
Mayerber Carvalho Neto
1 JavaCC Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.
Ambiente de Execução - Rotinas
Orientação a Objetos e Java Graduação em Ciência da Computação
Esquemas de Tradução Prof. Alexandre Monteiro
Análise Léxica.
Aula 14 1 Análise Sintáctica Compiladores, Aula Nº 14 João M. P. Cardoso.
Analise sintática aula-07-analise-sintática.pdf.
LPII Professora Lucélia. Pacotes Um pacote em Java é um diretório onde ficam armazenadas uma ou mais classes. Geralmente as classes com a mesma afinidade.
Wagner Santos C. de Jesus
Análises léxica e sintática
Analise Semântica aula-10-analise-semântica.pdf.
Aula sobre JavaCC Parsing Tarciana Dias Abril 2013.
Analisador Léxico Prof. Alexandre Monteiro
Projeto de Tradutor Preditivo. Introdução Introdução Esquemas L-atribuidos são reconhecidos por analisadores Top-Down. Entre estes analisadores, se encontra.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Análise Léxica Prof. Alexandre Monteiro
CES-41 COMPILADORES Aulas Práticas Capítulo II A Ferramenta Yacc.
AST no ANTLR Teoria e Implementação de Linguagens Computacionais - IF688 Allan J. Souza
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.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Um Tradutor Dirigido por Sintaxe Simples
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
Laboratório de Programação II Método main Dados e Métodos de Classes.
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
Estrutura de Dados Prof. André Cypriano M. Costa
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Ambientação com a Sintaxe de Java: parte 2 Prof. Gustavo Wagner Slides Originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB  Centro de.
Transcrição da apresentação:

JavaCC e JJTree Geração de compiladores implementados em Java fonte (texto) ações árvore sintática Parser

JavaCC e JJTree JJTree é um pré-processador para o JavaCC Auxilia a definição da árvore sintática JJTree JavaCC Java Esquema de tradução

Estrutura do arquivo JavaCC options { STATIC = false; //Não criar métodos estáticos OUTPUT_DIRECTORY = "c:/temp"; //Diretório de saída dos arquivos gerados } PARSER_BEGIN(ParserExemplo) ... public class ParserExemplo { . . . PARSER_END(ParserExemplo) . . . //PRODUÇÕES BNF QUE FORMAM A GRAMÁTICA DO PARSER

Produções Parser reconhece: 1 + 1, 2 + 1, 15 + 14, . . . TOKEN : /* OPERAÇÕES */ { < SOMA: "+" > } TOKEN : /* OPERADORES */ < NUMERO: ( <DIGITO> )+ > | < #DIGITO: ["0" - "9"] > void termo() : { } { <NUMERO> } void soma() : termo() <SOMA> termo() Parser reconhece: 1 + 1, 2 + 1, 15 + 14, . . .

Produções Símbolos não-terminais da gramática são escritos exatamente como métodos em Java tipo_retorno_java identificador_java "(" lista_parametros_java ")" ":" bloco_java "{" escolhas_expansão "}” Símbolos não terminais são traduzidos como chamadas de métodos

Produções Parser reconhece: 7, 1 + 1, 2 + 2 + 3, . . . void soma() : { } { termo() <SOMA> expressao() } void expressao() : { } { soma() | termo() } Parser reconhece: 7, 1 + 1, 2 + 2 + 3, . . .

Produções + Ações Parser retorna o resultado da operação. { a = termo() <SOMA> b = expressao() {return a + b;} } int expressao() : {int result;} ( result = soma() | result = termo() ) {return result;} int termo() : { Token t; } { t = <NUMERO> return (new Integer(t.image) ).intValue(); } int soma() : {int a, b;} Parser retorna o resultado da operação.

Tokens TOKEN : { < NUMERO: ( <DIGITO> )+ > | < PALAV1: “a” (“b” | “c”)* > } . TOKEN Tokens da gramática SPECIAL_TOKEN Tokens que não têm significado durante o parsing, entretanto ainda é acessível SKIP Tokens simplesmente descartados MORE Armazena em um buffer até: encontrar um TOKEN/SPECIAL_TOKEN Concatena em um só TOKEN/ SPECIAL_TOKEN encontrar um SKIP Descarta

JJTree void Soma() : void Termo() : {} {} { termo() <SOMA> expressao() } void Expressao() : soma() | termo() void Termo() : {} { t = <NUMERO> }

JJTree void Soma() : void Termo() : {} { Token t; } { termo() <SOMA> expressao() } Expressao Expressao() : ( soma() | termo() ) {return jjtThis;} void Termo() : { Token t; } { t = <NUMERO> jjtThis.setValor ( (new Integer(t.image) ).intValue() ); }

Referências http://www.di.ufpe.br/~java http://www.di.ufpe.br/~java/docs/JavaCC/doc/DOC/