1 / 19

SableCC

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.

Download Presentation

SableCC

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 jfp@cin.ufpe.br

  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. HelperDeclarations • 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. TokenDeclarations • 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 | 10 13 | 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: (45 + 36 / 2) * 3 + 5 * 2 Saída : Análise léxica e sintática realizadas com sucesso!!!

  18. Exemplo: AST Gerada

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

More Related