josé francisco pereira equipe de monitores teoria e implementação de linguagens computacionais -...
TRANSCRIPT
![Page 1: José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc142497959413d8df622/html5/thumbnails/1.jpg)
José Francisco PereiraEquipe de Monitores
Teoria e Implementação de Linguagens Computacionais - IF688
Centro de Informática – CInUniversidade Federal de Pernambuco – UFPE
SableCC
![Page 2: José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc142497959413d8df622/html5/thumbnails/2.jpg)
MotivaçãoGeraçã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.
![Page 3: José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc142497959413d8df622/html5/thumbnails/3.jpg)
RoteiroIntroduçãoPassos para construir um compilador
usando SableCCArquivo de Especificação SableCCPós-Execução SableCCSubdiretório Node (AST Nodes)Exemplo
![Page 4: José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc142497959413d8df622/html5/thumbnails/4.jpg)
Introdução Framework orientado a objetos para
geração de compiladores implementado em JAVA;Possui vasta documentaçãoMuitos exemplos de linguagem (PHP, Java
etc)Produzido no meio acadêmicoUtiliza uma versão estendida do Visitor
![Page 5: José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc142497959413d8df622/html5/thumbnails/5.jpg)
Construção do compilador1. Criar o arquivo de especificação
Definicões léxicas e a gramática
2. Gerar o framework utilizando o SableCC3. Criar classe para a análise semântica,
geração de código, otimizações etc.4. Criar a “Driver Class”, o compilador
propriamente dito5. Compilar o compilador
![Page 6: José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc142497959413d8df622/html5/thumbnails/6.jpg)
Arquivo de EspecificaçãoA sintaxe do SableCC é baseada no BNFMembros do arquivo:
<Grammar> → [<package declaration>] [<helper declarations>] [<states declarations>] [<token declarations>] [<ignored tokes>] [<productions>]
Um arquivo vazio é aceito
![Page 7: José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc142497959413d8df622/html5/thumbnails/7.jpg)
PackageBasicamente informa os pacotes que serão
utilizados no código JAVA gerado do compilador. Ex:br.ufpe.cin.if688.AulaMonitoriaO código será gerado no diretório .\br\ufpe\
cin\if688\AulaMonitoria
![Page 8: José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc142497959413d8df622/html5/thumbnails/8.jpg)
Helper DeclarationsFuncionam como constantes. Utilizados
para auxiliar outras declarações.Helpers
letter = [‘a’ .. ‘z’]; digit = [‘0’ .. ‘9’];
id = letter (letter | digit)* // TokenOu
id = [‘a’ .. ‘z’] ([‘a’ .. ‘z’] | [‘0’ .. ‘9’])*
![Page 9: José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc142497959413d8df622/html5/thumbnails/9.jpg)
Token DeclarationsDefinições dos terminais e “Tokens” para
serem utilizados nas produções
Tokens id = letternumber = digit+; plus = ‘+’;
![Page 10: José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc142497959413d8df622/html5/thumbnails/10.jpg)
ExemploHelpers
any_charater = [0x0 .. 0xfffff]; nl = ‘\n’;
Tokens comment = ‘⁄⁄’ any_character nl blank = 10 | 10 13 | 9;
Ignored Tokens comment; blank;
![Page 11: José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc142497959413d8df622/html5/thumbnails/11.jpg)
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;
![Page 12: José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc142497959413d8df622/html5/thumbnails/12.jpg)
Pós-Execução SableCC4 subdiretórios são gerados:
Lexer (Análise léxica)Parser (Análise Sintática)Node (Nodos da AST)Analysis (Análise Contextual)
![Page 13: José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc142497959413d8df622/html5/thumbnails/13.jpg)
Passos para construir um compilador usando SableCC
![Page 14: José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc142497959413d8df622/html5/thumbnails/14.jpg)
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.javaTPlus.javaTMinus.javaTMult.javaTDiv.javaTMod.javaTLPar.javaTRPar.javaTBlank
Extends Token.java
![Page 15: José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc142497959413d8df622/html5/thumbnails/15.jpg)
Subdiretório Node (AST Nodes)
Para cada: Production = PNomeProducao.javaAlternativa da producão = ANomeAlternativa
Productionsexpr ={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 GeradasPExp.javaAFactorExp.javaAPlusExp.java.... Extends PExp.java
PFactor.javaATermFactor.java.... Extends PFactor.java
PTerm.javaANumberTerm.java... Extends PTerm.java
![Page 16: José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc142497959413d8df622/html5/thumbnails/16.jpg)
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_;}
![Page 17: José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc142497959413d8df622/html5/thumbnails/17.jpg)
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!!!
![Page 18: José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc142497959413d8df622/html5/thumbnails/18.jpg)
Exemplo: AST Gerada
![Page 19: José Francisco Pereira Equipe de Monitores Teoria e Implementação de Linguagens Computacionais - IF688 Centro de Informática – CIn Universidade Federal](https://reader033.vdocuments.pub/reader033/viewer/2022051820/552fc142497959413d8df622/html5/thumbnails/19.jpg)
ReferênciasBrainy Creatures
http://www.brainycreatures.org/compiler/sablecc.asp
Sablecc.orghttp://sablecc.org/