SlideServe
Menu
Préférences
© SlideServe · v2026

Aula de SableCC

monty avatar
24 diapositives · 367 Views · Sep 19, 2014

Aula de SableCC. Teoria e Implementação de Linguagens Computacionais (Compiladores) - IF688 – 2008.1. Artur Ribeiro de Aquino – ara Allan Jefferson – ajss. Roteiro. Introdução Motivação Procedimentos Gramática Execução do SableCC Pós-execução do SableCC Package node Execução

Aula de SableCC - slide 1
01 / 24Aula de SableCC
1 / 17

Télécharger la présentation

Aula de SableCC
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  1. Aula de SableCC Teoria e Implementação de Linguagens Computacionais (Compiladores) - IF688 – 2008.1 Artur Ribeiro de Aquino – ara Allan Jefferson – ajss

  2. Roteiro • Introdução • Motivação • Procedimentos • Gramática • Execução do SableCC • Pós-execução do SableCC • Package node • Execução • Alternative output

  3. Introdução (1/3) • Analisador léxico – lê a sequência de caracteres e organiza como tokens; • Analisador sintático – agrupa caracteres ou tokens em estruturas hierárquicas com algum significado.

  4. Introdução (2/3) Código fonte Análise Léxica Tokens e lexemas implementação abstração Árvoresintáticaabstrata Análise Sintática Análise Semântica AST decorada CódigoMáquina Geração de Código

  5. Introdução (3/3) • “SableCC is a parsergeneratorwhichgeneratesfullyFeaturedobject-oriented frameworks for buildingcompilers, interpretersandothertextparsers.” http://sablecc.org • Utiliza o parser LALR(1) – melhoramento sobre o LR(1); • Vasta documentação; • Muitos exemplos de linguagens (PHP, Java, etc.); • Produzido no meio acadêmico; • Versão estendida do padrão Visitor.

  6. Motivação • Geração automática do analisador léxico e sintático; • Constrói a árvore de sintaxe abstrata; • Fornece métodos para caminhar na árvore; • Ganho no ciclo de desenvolvimento.

  7. Procedimentos (1/2) • Construção do compilador • Criar arquivo de especificação • Definições léxicas e a gramática • Gerar o framework (rodar o SableCC) • Criar classes para análise semântica, geração de código, otimizações, etc. • Criar a “Driver Class” – “O” compilador • Compilar o compilador

  8. Procedimentos (2/2)

  9. Gramática (1/7) • A sintaxe é baseada na BNF (Backus-Naur Form); • Membros do arquivo de especificação: <Grammar> → [<package declaration>] [<helper declarations>] [<states declarations>] [<token declarations>] [<ignored tokes>] [<productions>] • Arquivos vazios são aceitos

  10. Gramática (2/7) - Package • Informa os pacotes que serão utilizados como destino do código Java que será gerado pelo SableCC • Exemplo: • br.ufpe.cin.if688.AulaMonitoria O código será gerado no diretório .\br\ufpe\cin\if1688\AulaMonitoria

  11. Gramática (3/7) - Helper • Usados como auxiliares para outras declarações (“constantes”) • Mapeiam e identificam os caracteres a serem utilizados • Exemplos: • a = ‘a’ | ‘A’ ; • digit = [‘0’ .. ‘9’] ; • letter = [‘a’..‘z’]; • id = letter (letter|digit)* // Uso no token

  12. Gramática (4/7) - States • Usados para lidar com declarações de tokens, cada state está associado a um conjunto de tokens; • Quando o analisador léxico está num estado (state) somente reconhece tokens associados a este estado; • Transições de estado (AFD) são acionadas no reconhecimento dos tokens; • Exemplo: • Dispensável pro nosso projeto. States bol, inline Tokens {bol -> inline, inline} char [[0..0xffff] – [10 + 13]]; {bol, inline -> bol} eol = 10 | 13 | 10 13;

  13. Gramática (5/7) - Tokens • Definições dos terminais para uso nas produções - significado • Palavras reservadas, identificadores, comentários, “ignored tokens”, ... • Exemplos: • number = digit+ ; • plus = ‘+’ ; • id = letter (letter | digit)* ;

  14. Gramática (6/7) - Productions • Regras da gramática, funcionam como “operações” sobre os tokens; • SableCC suporta a sintaxe da EBNF (extended-BNF) para as produções; • Exemplo: Productions /* grammar */ exp = [‘0’ .. ‘9’]| add; add = ‘(’ [l_exp]exp ‘+’ [r_exp]exp ‘)’;

  15. Gramática (7/7) - Exemplo /*simpleAdder.sable - A verysimpleprogramthatrecognizestwointegersbeingadded.*/ Package simpleAdder; Helpers //Ourhelpers digit = ['0' .. '9'] ; sp = ' ' ; nl = 10 ; Tokens // Oursimpletokendefinition(s) integer = digit+ sp*; plus = '+' sp*; semi = ';' nl?; Productions // Oursuper-simplegrammar program = [left]:integerplus [right]:integer semi;

  16. Execução do SableCC

  17. Pós-execução do SableCC • Quatro subdiretórios gerados: • Lexer (Análise Léxica) • Parser (Análise Sintática) • Node (Nós da AST – Abstract Sintax Tree) • Analysis (usada pra definir caminhamentos na AST)

  18. PackageNode(1/3) • Cada token -> TNomeToken • Exemplos: Classes Geradas TNumber.java TPlus.java TMinus.java TMult.java TDiv.java TMod.java TLPar.java TRPar.java TBlank Extends Token.java Tokens number = ['0' .. '9']+; plus = '+'; minus = '-'; mult = '*'; div = '/'; mod = '%'; l_par = '('; r_par = ')'; blank = (' ' | 13 | 10)+;

  19. PackageNode(2/3) • Cada produção -> PNomeProdução • Cada alternativa -> ANomeAlternativa • Exemplos: 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

  20. PackageNode(3/3) expr = {factor} factor | {plus} expr plus factor | {minus} expr minus factor; class APlusExpr extends PExpr { private PExpr expr_; private TPlus plus_; private PFactor factor_; } class AFactorExpr extends PExpr { private PFactor factor_; }

  21. Execução (1/2) • Digite uma expressão aritmética: (45 + 36 / 2) * 3 + 5 * 2 Saída : Análise léxica e sintática realizadas com sucesso!!!

  22. Execução (2/2) - AST

  23. Alternative output • Geração de código Java para o compilador; • Para outras alternativas: • Utilizando o SableCC: • <http://www.mare.ee/indrek/sablecc/> • Outras ferramentas: • Visite a página da disciplina (link Ferramentas)

  24. Referências • SableCC - <http://sablecc.org/> • Teoria e implementação de linguagens computacionais - <www.cin.ufpe.br/~if688> • Indrek’s SableCC page - <http://www.mare.ee/indrek/sablecc>