SableCC José Francisco Pereira Equipe de Monitores

Slides:



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

Tópicos em Compiladores
Compiladores Claudio Benossi
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:
Compiladores I Cristiano Damiani Vasconcellos
Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
Software Básico Silvio Fernandes
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
JavaCC e JJTree Geração de compiladores implementados em Java
Curso Sistemas de Informação Disciplina: Arquitetura de Software
YACC.
Construção de Compiladores
Linguagens Formais e Tradutores
Introdução a Linguagem JAVA
Prof. Bruno Moreno Aula 4 – 11/03/2011
PROGRAMAÇÃO I UNIDADE 1.
Análise léxica e sintática
Lex Linguagem (e compilador) para especificar analisadores léxicos.
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 – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso.
Ferramentas para a Construção de Compiladores: Lex & Yacc
Teoria e Implementação de Linguagens Computacionais
Diêgo Santiago, Leila Soriano e Patrícia Lustosa 27/03/2008 JaTS Java Transformation System.
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
Paradigmas de Linguagens de Programação Linguagem Orientada a Objetos 1 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal.
Augusto Sampaio e Paulo Borba Centro de Informática
Augusto Sampaio e Paulo Borba Centro de Informática
Equipe: Fernando Calheiros Flavia Leite Eduardo Wagner
Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva
Análise léxica e sintática
Análise Léxica Primeira fase de um compilador
Mayerber Carvalho Neto
Análise Léxica e Sintática
Analise sintática aula-07-analise-sintática.pdf.
Semântica de Ações Especificação Completa de Specimen, Actress, Projeto RAT, Considerações Finais.
Análises léxica e sintática
Analise Semântica aula-10-analise-semântica.pdf.
Analisador Léxico Prof. Alexandre Monteiro
Projeto de Linguagens de Programação
Equipe: Osias Carneiro, Anderson Soares, André Araújo
Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.
Análise Léxica Prof. Alexandre Monteiro
Tradução Dirigida por Sintaxe
José Francisco PHP & MySQL. Os slides originais são parte do material de cursos anteriores do curso de PHP, ministrados por Sérgio Clemente.
Monitoria IP ~if669 Garbage Collection e pacotes.
CES-41 COMPILADORES Aulas Práticas Capítulo II A Ferramenta Yacc.
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.
AST no ANTLR Teoria e Implementação de Linguagens Computacionais - IF688 Allan J. Souza
José Francisco PHP & MySQL. Os slides originais são parte do material de cursos anteriores do curso de PHP, ministrados por Sérgio Clemente.
Diêgo Santiago, Leila Soriano e Patrícia Lustosa 27/03/2008 JaTS Java Transformation System Parte 1.
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
Geradores de analisadores léxicos
Compiladores – IF688 Professor: André Santos
Animador e Editor para a Linguagem Funcional 2 Carlos Eduardo Lima Lucas Roberto Bechert Schmitz Leonardo Reis Lucena Centro de Informática – UFPE, 2005.
JavaCC.
Sintaxe de uma Linguagem
Introdução a linguagem de Programação Java. Linguagens de Programação Linguagens de máquina(muito difíceis de usar e compreender) – Comanda ações do computador.
PLP – JavaCC Java Compiler Compiler
Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo.
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Análise Contextual Mauro Araújo Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal de Pernambuco.
SableCC José Francisco Pereira Equipe de Monitores
Transcrição da apresentação:

SableCC José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal de Pernambuco – UFPE jfp@cin.ufpe.br

Motivação Geração de analisador léxico e sintático automática. Maior performance. Parte do conteúdo desta apresentação foi extraída do original feito por Shirley Jacinto.

Roteiro Introdução Passos para construir um compilador usando SableCC Arquivo de Especificação SableCC Pós-Execução SableCC Subdiretório Node (AST Nodes) Exemplo

Introdução Framework orientado a objetos para geração de compiladores implementado em JAVA; Possui vasta documentação Muitos exemplos de linguagem (PHP, Java etc) Produzido no meio acadêmico Utiliza uma versão estendida do Visitor

Construção do compilador Criar o arquivo de especificação Definicões léxicas e a gramática Gerar o framework utilizando o SableCC Criar classe para a análise semântica, geração de código, otimizações etc. Criar a “Driver Class”, o compilador propriamente dito Compilar o compilador

Arquivo de Especificação A sintaxe do SableCC é baseada no BNF Membros do arquivo: <Grammar> → [<package declaration>] [<helper declarations>] [<states declarations>] [<token declarations>] [<ignored tokes>] [<productions>] Um arquivo vazio é aceito

Package Basicamente informa os pacotes que serão utilizados no código JAVA gerado do compilador. Ex: br.ufpe.cin.if688.AulaMonitoria O código será gerado no diretório .\br\ufpe\cin\if688\AulaMonitoria

Helper Declarations Funcionam como constantes. Utilizados para auxiliar outras declarações. Helpers letter = [‘a’ .. ‘z’]; digit = [‘0’ .. ‘9’]; id = letter (letter | digit)* // Token Ou id = [‘a’ .. ‘z’] ([‘a’ .. ‘z’] | [‘0’ .. ‘9’])*

Token Declarations Definições dos terminais e “Tokens” para serem utilizados nas produções Tokens id = letter number = digit+; plus = ‘+’;

Exemplo Helpers any_charater = [0x0 .. 0xfffff]; nl = ‘\n’; Tokens comment = ‘⁄⁄’ any_character nl blank = 10 | 10 13 | 9; Ignored Tokens comment; blank;

Exemplo: Arquivo de Especificação SableCC Package compilador; Tokens number = ['0' .. '9']+; plus = '+'; minus = '-'; mult = '*'; div = '/'; mod = '%'; l_par = '('; r_par = ')'; blank = (' ' | 13 | 10)+; Ignored Tokens blank; Productions expr = {factor} factor | {plus} expr plus factor | {minus} expr minus factor; factor = {term} term | {mult} factor mult term | {div} factor div term | {mod} factor mod term; term = {number} number | {expr} l_par expr r_par;

Pós-Execução SableCC 4 subdiretórios são gerados: Lexer (Análise léxica) Parser (Análise Sintática) Node (Nodos da AST) Analysis (Análise Contextual)

Passos para construir um compilador usando SableCC

Subdiretório Node (AST Nodes) Para cada Token, uma classe TNomeToken; Tokens number = ['0' .. '9']+; plus = '+'; minus = '-'; mult = '*'; div = '/'; mod = '%'; l_par = '('; r_par = ')'; blank = (' ' | 13 | 10)+; Classes Geradas TNumber.java TPlus.java TMinus.java TMult.java TDiv.java TMod.java TLPar.java TRPar.java TBlank Extends Token.java

Subdiretório Node (AST Nodes) Para cada: Production = PNomeProducao.java Alternativa da producão = ANomeAlternativa Productions expr = {factor} factor | {plus} expr plus factor | {minus} expr minus factor; factor = {term} term | {mult} factor mult term | {div} factor div term | {mod} factor mod term; term = {number} number | {expr} l_par expr r_par; Classes Geradas PExp.java AFactorExp.java APlusExp.java .... Extends PExp.java PFactor.java ATermFactor.java .... Extends PFactor.java PTerm.java ANumberTerm.java ... Extends PTerm.java

Subdiretório Node (AST Nodes) expr = {factor} factor | {plus} expr plus factor | {minus} expr minus factor; class AFactorExpr extends PExpr { private PFactor factor_; } class APlusExpr extends PExpr { private PExpr expr_; private TPlus plus_; private PFactor factor_; }

Exemplo: Execução Type an arithmetic expression: (45 + 36 / 2) * 3 + 5 * 2 Saída : Análise léxica e sintática realizadas com sucesso!!!

Exemplo: AST Gerada

Referências Brainy Creatures Sablecc.org http://www.brainycreatures.org/compiler/sablecc.asp Sablecc.org http://sablecc.org/