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

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

SableCC José Francisco Pereira Equipe de Monitores

Apresentações semelhantes


Apresentação em tema: "SableCC José Francisco Pereira Equipe de Monitores"— Transcrição da apresentação:

1 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

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

6 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

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
Sablecc.org


Carregar ppt "SableCC José Francisco Pereira Equipe de Monitores"

Apresentações semelhantes


Anúncios Google