A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal.

Apresentações semelhantes


Apresentação em tema: "José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal."— Transcrição da apresentação:

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

2 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.

3 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

4 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

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

6 Arquivo de Especificação A sintaxe do SableCC é baseada no BNF Membros do arquivo: → [ ] [ ] Um arquivo vazio é aceito

7 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

8 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’])*

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

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

11 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;

12 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)

13 Passos para construir um compilador usando SableCC

14 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

15 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

16 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_; }

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

18 Exemplo: AST Gerada

19 Referências Brainy Creatures Sablecc.org


Carregar ppt "José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal."

Apresentações semelhantes


Anúncios Google