Revisão de GLC e Analisadores Descendentes



Documentos relacionados
Compiladores. A seção das regras. Especificação (F)lex. Plano da aula. Escolha das regras. Compilação típica com FLEX

Compiladores. Exemplo. Caraterísticas de Gramáticas. A αβ 1 αβ 2. A αx X β 1 β 2. Lembrando... Gramáticas Livres de Contexto

Plano da aula. Compiladores. Os erros típicos são sintáticos. Análise Sintática. Usando Gramáticas. Os erros típicos são sintáticos

Gramáticas Livres de Contexto

Compiladores Aula 5. Celso Olivete Júnior.

Analisadores Descendentes Tabulares; Cjs First Follow

Plano da aula. Compiladores. Top-Down x Bottom Up. Redução Exemplo 1. Redução Exemplo 1. Redução Exemplo 1. A Abc b B d.

Analisadores Ascendentes ou Empilha-Reduz. Mais um exemplo... Mais um exemplo... Top-Down x Bottom Up. Conteúdo da aula. Analisadores Ascendentes

Compiladores - Análise Preditiva

Análise Sintática (Cap. 04) Análise Sintática Descendente

Compiladores. Transformações de GLCs. Plano da aula. Análise Top-Down. Análise Top-Down Exemplo. Gramáticas Livres de Contexto.

Vantagens de uma Gramática. Sintaxe de uma Linguagem. Analisador Sintático - Parser. Papel do Analisador Sintático. Tiposde Parsers para Gramáticas

Análise semântica. Análise Semântica. Estrutura de um compilador. Anotação da árvore sintática. Tipos de comunicação de atributos?

V Análise Sintática. V.1.1 Gramáticas Livres de Contexto Definições de GLC

Teoria da Computação Linguagens e Expressões Regulares, Autómatos de Estados Finitos

Sintaxe e Semântica. Fases da Compilação. programa fonte

Compiladores. Análise Sintática

Compiladores Aula 4. Celso Olivete Júnior.

Compiladores. Análise Sintática

Linguagens Formais e Compilação Ficha de exercícios

6.3 Equivalência entre Autômatos com Pilha Não-Determinísticos e Gramáticas Livre do Contexto

LFA Aula 09. Gramáticas e Linguagens Livres de Contexto 18/01/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior.

Compiladores Aula 6. Celso Olivete Júnior.

Compiladores. Análise léxica. Plano da aula. Vocabulário básico. Motivação para análise léxica. Estrutura de um compilador

Parsing Preditivo. Antes de ser abordado o Parsing Preditivo, será apresentado o Analisador Sintático Descendente Recursivo.

Gramáticas Livres de Contexto

V Teoria de Parsing. Termos Básicos: Parser Analisador Sintático Parsing Analise Sintática Parse Representação da analise efetuada

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

Compiladores - Análise Preditiva

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza.

Compiladores - Especificando Sintaxe

Análise Sintática II: Analisadores Descendentes Preditivos

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: Prof. Dr. Raimundo Moura

Geração de código intermediário. Novembro 2006

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

Análise Sintática Descendente

MAB Análise Sintática. Wednesday, April 4, 12

Analisadores Sintáticos. Análise Recursiva com Retrocesso. Análise Recursiva Preditiva. Análise Recursiva Preditiva 05/04/2010

MAB Análise Sintática. Wednesday, August 31, 11

Teoria da Computação e Algoritmos. Introdução à Linguagem Pascal. ALGORITMO <Nome do algoritmo>; <definições>; INÍCIO <Comandos>; FIM.

Definição 2.2 (Palavra) As sequências finitas de letras são designadas por palavras sobre o alfabeto V.

Se o símbolo inicial não fizer parte do conjunto de símbolos férteis, a linguagem gerada pela gramática é vazia.

Nesta aula serão apresentados alguns comandos de condição, repetição e gráficos.

PROGRAMAÇÃO II 4. ÁRVORE

Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE Prof. Jefferson Morais

Compiladores - Análise Preditiva

e à Linguagem de Programação Python

Linguagens Formais e Autômatos. Alfabetos, Palavras, Linguagens e Gramáticas

Linguagens Livres de Contexto

JavaScript (ou JScript)

Análise Sintática. Análise Sintática. Tipos de Analisadores Gramáticais: PARSERS

Linguagens Livres de Contexto e Autômatos a Pilha (Push- Down) Um Modelo de Computação de Força Intermediária. Gramática Livre de Contexto

Árvores Binárias de Busca

Ambigüidade em gramáticas livre de contexto: Um problema não-solucionável

Compiladores Analisador Sintático. Prof. Antonio Felicio Netto Ciência da Computação

ESTRUTURA CONDICIONAL

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 30. Instituto de C

CONVENÇÃO DE CÓDIGO JAVA

Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida)

Linguagem C: Estruturas de Controle. Prof. Leonardo Barreto Campos 1

Testes Baseados na Implementação. (fluxo de controle) Baseado em notas de aula da profa. Eliane Martins

Compiladores - Análise SLR

Compiladores. Prof. Bruno Moreno Aula 11 20/05/2011

Construção de Compiladores Aula 16 - Análise Sintática

Autômatos a pilha. UFRN/DIMAp/DIM0330 Linguagens formais. David Déharbe. david/enseignement/2003.

Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1

Aula anterior... Definição do algoritmo (continuação)

UFRPE Prof. Gustavo Callou

Expressões. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Compiladores - Análise Léxica

Paradigmas de Linguagem de Programação

Linguagem de Programação III

PYTHON LISTAS. Introdução à Programação SI2

Gramática. Prof. Yandre Maldonado e Gomes da Costa. Prof. Yandre Maldonado - 1

Gramática. Gramática. Gramática

IV Gramáticas Livres de Contexto

1. Estrutura de seleção. Seleção: algumas etapas (passos) do algoritmo são executadas dependendo do resultado de uma condição

Avaliação de Expressões

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Linguagens, Gramáticas e Máquinas

Matemática - UEL Compilada em 18 de Março de Prof. Ulysses Sodré Matemática Essencial:

FUNDAÇÃO EDUCACIONAL DE ITUIUTABA

Análise Sintáctica. Definições: Conjuntos First() e Follow() Compiladores, Aula Nº 19 João M. P. Cardoso. Conjunto First(β)

Análise Sintática Bottom-up

Árvores e Árvores Binárias

Processamento da Informação Teoria. Algoritmos e Tipos de dados

Compiladores: P ASCAL jr

Compiladores Análise Semântica

Compiladores - Análise Recursiva

IFTO TÉCNICO EM INFORMÁTICA DESENVOLVIMENTO DE SISTEMAS AULA 01

UNIVERSIDADE DO VALE DO ITAJAÍ. Juliano de Souza Gaspar PROTÓTIPO DE UMA FERRAMENTA DE APOIO AO ENSINO DE LINGUAGENS LIVRE DE CONTEXTO

Por que o quadrado de terminados em 5 e ta o fa cil? Ex.: 15²=225, 75²=5625,...

Linguagens Formais e Autômatos (LFA)

Internet e Programação Web

1) Digitar o código-fonte no editor do compilador Turbo Pascal para windows, exatamente como apresentado a seguir:

ESTRUTURA DE DADOS PILHA

Aluísio Eustáquio da Silva

LÓGICA DE PROGRAMAÇÃO. Vitor Valerio de Souza Campos

Transcrição:

Conteúdo da aula 1. xemplos de Gramáticas Revisão de GLC e Analisadores Descendentes Marcelo Johann 2. Propriedades: Ambíguas, sem ciclos, ε-livres, fatoradas à esquerda, recursivas à esquerda, simplificadas 3. Transformações: liminação de produções vazias, de recursividade à esquerda (direta, indireta), fatoração 4. Analisadores Descendentes Recursivos com Retrocesso Recursivos Preditivos Conjunto FIRST e Implementação INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 2 xemplos Gramática para Comandos xemplos Gramática para xpressões cmd if expr then cmd else cmd print expr ( bool ) expr && expr expr expr bool true false OP ( ) x OP * / + - INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 3 INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 4 xemplos Gramática para Listas S a [ L ] L S ; L S Convenções Ressaltando Símbolos que representam terminais em minúsculos: u, v, x, y,... Símbolos que representam não-terminais em maiúsculos: X, Y, TRM, S,... Símbolos que representam formas sentenciais (seqüências de terminais e não-terminais): letras gregas ou sublinhadas: α, β, ω, w, z Outras INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 5 INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 6 1

Derivações Derivação em um passo A xy Derivação em múltiplos passos Se A w 2 w 3 w n dizemos que A * w n Tipos e Características Gramáticas Ambíguas Gramáticas sem ciclos Gramáticas ε-livres Gramáticas fatoradas à esquerda Gramáticas recursivas à esquerda Gramáticas simplificadas INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 7 INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 8 Gramática Ambígua Considere 5 3 * 2 OP ( ) x OP * / + - Gramática sem ciclos: Uma gramática sem ciclos é uma GLC que não possui derivações da forma A + A para algum A N 5 - * 3 2 5 3 - * 2 Gramática ε-livre : GLC que não possui produções vazias do tipo A ε exceto a produção S ε (S é o símbolo inicial). INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 9 INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 10 Transformações de GLCs Gramática fatorada à esquerda: GLC que não possui produções do tipo A αβ 1 αβ 2 para alguma forma sentencial α. Gramática recursiva à esquerda: GLC que permite a derivação A + Aα para algum A N O não terminal A deriva ele mesmo, de forma direta ou indireta, como símbolo mais à esquerda de uma subpalavra gerada. (A) liminação de produções vazias (B) liminação de recursividade à esquerda: recursão direta recursão indireta (C) Fatoração de uma gramática INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 11 INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 12 2

liminação de Produções Vazias liminação de Produções Vazias INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 13 INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 14 liminação de Produções Vazias (B) liminação de recursividade à esquerda xemplo de GLC recursiva à esquerda: A Aa b Gramáticas transformadas equivalentes: Com a palavra vazia A bx X ax ε Sem a palavra vazia A b bx X a ax Obs: pode ainda haver recursão indireta! INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 15 INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 16 (B) Outro exemplo de recursividade -> +T T T -> T*F F F -> () Id A regra -> +T T se torna: -> T -> +T ε A regra T- > T*F F se torna: T -> FT T -> *FT ε (C) Fatoração de uma gramática limina a indecisão de qual produção aplicar quando duas ou mais produções iniciam com a mesma forma sentencial A αβ 1 αβ 2 Se torna: A αx X β 1 β 2 INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 17 INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 18 3

(C) xemplo de Fatoração a squerda Análise top-down e bottom-up Cmd if xpr then Cmd else Cmd Cmd if xpr then Cmd Cmd Outro Fatorando a esquerda: Cmd if xpr then Cmd lseopc Cmd Outro lseopc else Cmd ε INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 19 INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 20 Analisadores Descendentes Também chamados recursivos ou top-down Recursivos com Retrocesso Testam cada possível derivação xemplo Recursivos Preditivos Determinam produção pelo símbolo terminal atual xemplo Conjunto FIRST e método de encontrá-lo Implementação xemplo Gramática para Listas S a [ L ] L S ; L S ntrada: [ a ] $ INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 21 INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 22 S A B A c ε Top-Down: Backtracking B cbb ca Gera S * cbca? S cbca tentar S AB AB cbca tentar A c cb cbca casar c B bca sem-saída, tentar A ε εb cbca tentar B cbb cbb cbca casar c bb bca casar b B ca tentar B cbb cbb ca casar c bb a sem-saída, tentar B ca ca ca casar c a a casar a -> Fim! Observações sobre o método recursivo com retrocesso É fácil de implementar. É necessário: 1. Que a gramática não seja recursiva à esquerda A Aa se tornará ReconheceA() { ReconheceA();... } Recursão infinita! INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 23 INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 24 4

Analisadores Descendentes Também chamados recursivos ou top-down Recursivos com Retrocesso Testam cada possível derivação xemplo Recursivos Preditivos Determinam produção pelo símbolo terminal atual xemplo Conjunto FIRST e método de encontrá-lo Implementação xemplo Gramática onde é fácil distinguir produções CMD if XPR then CMD CMD while XPR do CMD CMD repeat LISTA until XPR CMD ID := XPR INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 25 INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 26 xemplo Mesma Gramática com mais Não-Terminais CMD COND ITR ATRIB COND if XPR then CMD ITR while XPR do CMD repeat LISTA until XPR ATRIB ID := XPR INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 27 xemplo Outra Gramática CMD: IF ASS WHIL BL; BL: { CMDL } ; CMDL: CMD RSTO; RSTO: ; CMDL epsilon; IF: "if" "then" CMD; WHIL: "while" "do" CMD; ASS: L = ; L: * ; : NUM ID; INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 28 Definição: Conjuntos First Seja α qualquer seqüência de símbolos terminais ou não terminais First(α): Definição informal: conjunto de todos os terminais que começam qualquer seqüência derivável de α. Definição formal: Se existe um t T e um β V* tal que α * t β então t First(α) Se α * ε então ε First(α) A B C D B b C c D d First(A)={b,c,d} First(B)={b} First(C)={c} First(D)={d} INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 29 Condição para que se possa usar um analisador preditivo Informalmente: no caso que em os First() dos lados direitos das regras de produção sejam simpáticos, não terá retrocesso. Formalmente: para qualquer produção A α 1 α 2... α n, quer-se: First(α 1 ) First(α 2 )... First(α n ) = Ø INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 30 5

Repeat { proc First(α: string of symbols) Para todas as produções α X 1 X 2 X 3 X n do if X 1 T then // caso simples onde X 1 é um terminal First(α) := First(α) {X 1 } else { // caso menos simples: X 1 é um não-terminal First(α) = First(α) First{X 1 } \ {ε}; for (i=1 ; i<=n ; i++) { if ε is in First(X 1 ) and in First(X 2 ) and in First(X i-1 ) First(α) := First(α) First(X i ) \ {ε} } } if (α =>* ε) then First(α) := First(α) {ε} end do } until no change in any First(α) INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 31 Observações sobre o método recursivo preditivo É fácil de implementar. É necessário: 1. Que a gramática não seja recursiva à esquerda A Aa se tornará ReconheceA() { ReconheceA();... } Recursão infinita! 2. Que a gramática seja fatorada à esquerda Senão, há ambigüidade na escolha da derivação. 3. Que os primeiros terminais deriváveis possibilitem a decisão de uma produção a aplicar! Não há retrocesso sobre não-terminais... INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 32 Implementação CMD: IF ASS WHIL BL; BL: '{' CMDL '}'; CMDL: CMD RSTO; RSTO: ';' CMDL; IF: "if" "then" CMD; WHIL: "while" "do" CMD; ASS: L '=' ; L: '*' ; : NUM ID; INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 33 tapas voltando ao yacc INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 34 Leituras e Tarefas sugeridas Ler e Reler o Livro Implementar outra GLC Ligar sua implementação com yylex Ligar com autômato INF01033 - Compiladores B - Marcelo Johann - 2012/1 Aula 07 : Slide 35 6