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



Documentos relacionados
Aula 8: Gramáticas Livres de Contexto

Compiladores Aula 5. Celso Olivete Júnior.

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

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

Análise Sintática Descendente

Compiladores. Análise Sintática

Análise Léxica. Construção de Compiladores. Capítulo 2. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Faculdade de Computação

Analisadores Descendentes Tabulares; Cjs First Follow

Análise Sintática I: Analisadores Descendentes com Retrocesso

Capítulo 3. Autómatos e respectivas linguagens

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.

Revisão de GLC e Analisadores Descendentes

Resumo da última aula. Compiladores. Conjuntos de itens LR(0) Exercício SLR(1) Análise semântica

BNF (Backus-Naur Form) Gramática Livres de Contexto / Estruturas Recursivas

Teoria da Computação. Unidade 3 Máquinas Universais (cont.) Referência Teoria da Computação (Divério, 2000)

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

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

Faculdade de Computação

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

Projeto de Compiladores Professor Carlos de Salles

Alocação sequencial - Pilhas

URICER Universidade Regional Integrada do Alto Uruguai e das Missões Campus de Erechim Apostila de COMPILADORES

Compiladores. Exemplo First/Follow. proc Follow(B N) Gramática LL(1) proc First(α: string of symbols) Observações First/Follow

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

DCC-UFRJ Linguagens Formais Primeira Prova 2008/1

Compiladores Aula 6. Celso Olivete Júnior.

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

Aula 4: Autômatos Finitos Autômatos Finitos Não-Determinísticos

Linguagens Regulares e Autômatos de Estados Finitos. Linguagens Formais. Linguagens Formais (cont.) Um Modelo Fraco de Computação

Análise sintática. Questão. E se a análise sintática pudesse ser modelada por autômatos?

Hierarquia de Chomsky

O Autômato Adaptativo como Modelo de Computação e sua Aplicação em Reconhecimento de Padrões*

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

Análise Sintática II: Analisadores Descendentes Preditivos

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

Linguagens Formais e Autômatos (LFA)

Análise Sintáctica Descendente

Análise Sintática Bottom-up

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

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

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

Apostila 02 - Linguagens Regulares Exercícios

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

Algoritmos de Busca de Palavras em Texto

Revisão. Fases da dacompilação

Compiladores I. Caracterizar um método de análise bottom-up. Compreender os mecanismos básicos envolvidos no processo de análise LR.

INE5318 Construção de Compiladores. AULA 4: Análise Sintática

Análise sintática. Prof. Thiago A. S. Pardo. Análise sintática ascendente

Linguagens Formais e Autômatos (LFA)

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

Acoplamento. Tipos de acoplamento. Acoplamento por dados. Acoplamento por imagem. Exemplo. É o grau de dependência entre dois módulos.

Compiladores - Análise Preditiva

CÁLCULO NUMÉRICO. Profa. Dra. Yara de Souza Tadano.

Compiladores. Análise Sintática

LRE LSC LLC. Autômatos Finitos são reconhecedores para linguagens regulares. Se não existe um AF a linguagem não é regular.

Avaliação de Expressões

Compilação: Erros. Detecção de Erros: * Analisadores Top-Down - Preditivo Tabular (LL) - Feito a mão. * Analisadores Botton-Up: - Shift-Reduce (SLR)

Compiladores - Análise Ascendente

Compiladores - Análise Ascendente

1 Fórmulas de Newton-Cotes

Programação II. Ordenação (sort) Bruno Feijó Dept. de Informática, PUC-Rio

Compiladores - Análise SLR

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

ESTRUTURA DE DADOS PILHA

Compiladores: P ASCAL jr

Análise Sintática LL(1)

Linguagens Formais Capítulo 5: Linguagens e gramáticas livres de contexto

Pontifícia Universidade Católica de Campinas Centro de Ciências Exatas, Ambientais e de Tecnologias Faculdade de Engenharia de Computação

LL Parser ( TOP-DOWN)

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

Analisadores Sintáticos LR

Regras. Resumo do Jogo Resumo do Jogo. Conteúdo. Conteúdo. Objetivo FRENTE do Jogo

INE5317 Linguagens Formais e Compiladores. AULA 10: Anális e S intática

Análise Sintática - Final

Análise sintática. Análise sintática. Top-down ou descendente. Com retrocesso: por tentativa e erro. Preditiva: para gramáticas LL(1) 09/04/2012

3. Seja Σ um alfabeto. Explique que palavras pertencem a cada uma das seguintes linguagens:

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

Linguagens Formais e Autômatos

Gramáticas Regulares. Capítulo Gramáticas regulares

Semelhança e áreas 1,5

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

CENTRO UNIVERSITÁRIO CATÓLICA DE SANTA CATARINA Pró-Reitoria Acadêmica Setor de Pesquisa

MÉTODO DA POSIÇÃO FALSA EXEMPLO

EXERCÍCIOS RESOLVIDOS DE TEORIA DOS GRAFOS

ntexto finição presentação áfica ilização TempMed(input,output); Var Var Begin Begin readln(t1); readln(t1); readln(t2); readln(t2);

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

Reduce: reduz o que está imediatamente à esquerda do foco usando uma produção

FUNDAÇÃO EDUCACIONAL DE ITUIUTABA

Análise sintática. Análise sintática ascendente. Parte-se dos símbolos terminais em direção ao símbolo inicial da gramática. Derivação mais à direita

Compiladores - Análise Preditiva

IES-300. Tecnologia em Análise e Desenvolvimento de Sistemas Prof. Me. Álvaro d Arce alvaro@darce.com.br

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

EXAME DE INGRESSO º Período

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

Árvores e Árvores Binárias

Teoria de Linguagens 2 o semestre de 2014 Professor: Newton José Vieira Primeira Lista de Exercícios Entrega: até 16:40h de 23/10.

MÉTODOS DE ORDENAÇÃO

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

PROGRAMAÇÃO II 4. ÁRVORE

Transcrição:

Anlisdores intáticos Análise Descendente (Top-down) Anlisdores sintáticos descendentes: Recursivo com retrocesso (bcktrcking) Recursivo preditivo Tbulr preditivo Análise Redutiv (Bottom-up) Anlisdores de precedênci d operdores Anlisdores LR(k) Análise Recursiv com Retrocesso Exemplo 3.6 Pssos de um nlisdor descendente entenç ou progrm: [] Grmátic: e L ; L [ ] $ [ ] $ [ ] $ [ ] $ [ ] $ [ ] $ ucesso! ; L ; L ; L Expndir L Fonte: Implementção de Lingugens de Progrmção: Compildores. An Mri Price & imão. Toscni. Ed. gr Luzztto, 2000. Expndir ucesso! Flh! ucesso! Exemplo 3.7 Implementção Exemplo 3.1 sem bcktrcking begin /* min */ token := LETOKEN; if then if token = $ then write( sucesso ) else write( erro1 ) else write( erro2 ) end function ; if token = then { } else if token = [ then if L then if token = ] then { } function L; MARCA_PONTO; if then if token = ; then { if L then } else { RETROCEDE; if then } begin /* min */ token := LETOKEN; if then if token = $ then write( sucesso ) else write( erro ) else write( erro ) end function ; if token = then { } else if token = [ then if L then if token = ] then { } function L; if then if token = ; then { if L then } else Análise Recursiv Preditiv Exigêncis: Grmátic sem recursividde à esquerd Grmátic estej ftord à esquerd Pr os não-terminis com mis de um regr de produção, os primeiros terminis deriváveis devem ser cpzes de identificr, univocmente, regr de produção ser plicd Exemplo 1: Comndo if Expr then Comndo while Expr do Comndo repet List until Expr id := Expr Análise Recursiv Preditiv Exemplo 2: Comndo Condicionl Itertivo Atribuição Condicionl if Expr then Comndo Itertivo while Expr do Comndo repet List until Expr Atribuição id := Expr FIRT(β): e β * ε então ε é um elemento de FIRT(β); e β * δ então é um elemento de FIRT(β), sendo um símbolo terminl e δ um form sentencil qulquer, podendo ser vzi 1

Exemplo 3.8 Anlisdor recursivo preditivo: implementção function Comndo; if token = if then if Condicionl then else if token = while or token = repet then if Itertivo then else if token = id then if Atribuição then Análise Preditiv Tbulr O nlisdor busc produção ser plicd n tbel de nálise, levndo em cont o nãoterminl no topo d pilh e o token sob o cbeçote de leitur Pilh X Y Z $ Fit de entrd + b $ Anlisdor preditivo Tbel de Análise Exemplo 3.10 Pssos de um nlisdor tbulr preditivo Considere grmátic não-mbígu que ger expressões lógics: E E T T T T & F F Eliminndo-se recursividde à esquerd, tem-se: E TE E TE ε T FT T &FT ε Tbel de nálise preditiv: id & $ E E TE E TE E E TE E ε T T FT F FT T T ε T &FT T ε F F id F F Pssos de um nlisdor: Pilh Entrd Ação $E id id&id$ E TE $E T id id&id$ F FT $E T F id id&id$ F id $E T id id id&id$ $E T id&id$ T ε $E id&id$ E TE $E T id&id$ $E T id&id$ T FT......... Algoritmo do Anlisdor Preditivo Tbulr Entrd: Um sentenç s e um tbel de nálise M pr grmátic G Resultdo: Um derivção mis à esquerd de s, se s está em L(G), ou um erro, cso contrário Método: Configurção inicil: pilh=$ e fit=s$ Posicion o cbeçote sobre o primeiro símbolo de s$; ej X o símbolo do topo d pilh e o símbolo sob o cbeçote. Repete e X é um terminl Então e X = Então desempilhe X e vnç o cbeçote enão ERRO enão /* X é um símbolo não-terminl */ e M[X,] = X Y 1 Y 2...Y k Então desempilh X; empilh Y k Y k-1...y 1 com Y 1 no topo; enão ERRO Até que X = $ /* pilh vzi */ Algoritmo do Anlisdor Preditivo Tbulr A mior dificuldde está n construção d tbel de nálise. FIRT(α) é o conj. de terminis que inicim forms sentenciis derivds prtir de α (se α ==>* ε, então plvr vzi tmbém fz prte do conjunto) FOLLOW(A) é o conj. de terminis que podem precer imeditmente à direit de A em lgum form sentencil. Isto é, o conj. de terminis, tl que existe um derivção d form ==>* αaβ pr α e β quisquer. 2

Algoritmo pr clculr FIRT(X) 1) e é terminl, então FIRT() = {} 2) e X ε é um produção, então dicione ε FIRT(X) 3) e X Y 1 Y 2...Y k é um produção e, pr lgum i, todos Y 1,Y 2,...,Y i-1 derivm ε, então FIRT(Y i ) está em FIRT(X). e todo Y j (j=1,2,...,k) deriv ε,, então ε está em FIRT(X) Algoritmo pr clculr FOLLOW(X) 1) e é o símbolo inicil d grmátic e $ é o mrcdor de fim de sentenç, então $ está em FOLLOW() 2) e existe produção do tipo A αxβ, então todos os terminis de FIRT(β) fzem prte de FOLLOW(X) 3) e existe produção do tipo A αx, ou A αxβ, sendo que β ==>* ε, então todos os terminis que estiverem em FOLLOW(A) fzem prte de FOLLOW(X) Exemplo 3.11 Determinção ds funções FIRT e FOLLOW Considere grmátic de expressões lógics: E TE E TE ε T FT T &FT ε FIRT(F) = {, id} FIRT(T ) = {&, ε} FIRT(E ) = {, ε} FIRT(T) = FIRT(F) = {, id} FIRT{E} = FIRT(T) = {, id} FOLLOW(E) = {$} regr 1 FOLLOW(E ) = FOLLOW(E) = {$} regr 3, prod. 1 FOLLOW(T) = FIRT(E ) FOLLOW(E ) = {, $} regrs 2 e 3, prod. 2 e 3 FOLLOW(T ) = FOLLOW(T) = {, $} regr 3, prod. 4 FOLLOW{F} = FIRT(T ) FOLLOW(T ) = {&,, $} regrs 2 e 3, prod.5 Algoritmo pr construir um tbel de nálise preditiv Entrd: Um grmátic G Resultdo: Tbel de nálise M Método: 1) Pr cd produção A α de G, execute os pssos 2 e 3 (pr cd linh A d tbel M) 2) Pr cd terminl de FIRT(α), dicione produção A α M[A,] 3) e FIRT(α) inclui plvr vzi, então dicione A α M[A,b] pr cd b em FOLLOW(A) Def. 3.12 Grmátic LL(1) Um grmátic não recursiv à esquerd é LL(1) ssse, sempre que A αe A β são produções, ocorre que: 1) FIRT(α) FIRT(β) = 2) No máximo um dos dois, α ou β, deriv plvr vzi 3) e β ==>* ε, então FIRT(α) FOLLOW(A) = Análise Redutiv (Bottom-up) Os nlisdores redutivos são chmdos empilh-reduz e são implementdos por utômtos de pilh, com controle dirigido por um tbel de nálise. e, em cd entrd d Tbel de Análise, existe pens um produção, então grmátic é do tipo LL(1). Left to right, Leftmost derivtion, com 1 símbolo de entrd 3

Exemplo 3.13: Movimentos de um Anlisdor Redutivo ej grmátic que ger lists: e L L ; Pr sentenç: [ ; ], tem-se os movimentos: Pilh Entrd Ação $ [ ; ]$ Empilh [ $[ ; ]$ Empilh $[ ; ]$ Reduz $[ ; ]$ Reduz L $[L ; ]$ Empilh ; $[L; ]$ Empilh $[L; ]$ Reduz $[L; ]$ Reduz L L ; $[L ]$ Empilh ] $[L] $ Reduz [L] $ $ Aceit! Análise Redutiv: Hndle ão sequêncis de símbolos que são ldos direitos de produção, tis que sus reduções levm, no finl, à redução pr o símbolo inicil d grmátic, trvés do reverso de um derivção mis à direit. e grmátic G é não-mbígu, então tod form sentencil gerd por G tem extmente um hndle. Reconhecedor empilh-reduz: ções Empilh: coloc no topo d pilh o símbolo que está sendo lido e vnç o cbeçote de leitur; Reduz: substitui o hndle do topo d pilh pelo não-terminl correspondente; Aceit: reconhece que sentenç de entrd foi gerd pel grmátic; Erro: ocorrendo erro de sintxe, chm um subrotin de tendimento erros. Anlisdores de precedênci de operdores Atum sobre clsse ds grmátics de operdores Bstnte eficiente e é plicdo no reconhecimento de expressões Dificuldde em lidr com operdores iguis que tenh significdos distintos ão plicdos um clsse restrit de grmátics Grmátics de Operdores Os não-terminis precem sempre seprdos por símbolos terminis (nunc precem dois terminis djcentes) As produções não derivm plvr vzi E E O E ( E ) id O + - * / ^ E E T T T T & F F F ( E ) id Anlisdores LR(k): (Left to right with Rightmost derivtion) ão cpzes de reconhecer prticmente tods s estruturs sintátics definids por um GLC É um método mis gerl que o precedênci de operdores e pode ser implementdo com o mesmo gru de eficiênci ão cpzes de descobrir erros sintáticos em um momento mis cedo Dificuldde de implementção 4

Anlisdores LR(k): (Left to right with Rightmost derivtion) LR (imple LR) fáceis de plicr, porém plicáveis um clsse restrit de grmátics; LR Cnônicos mis poderosos e plicdos um grnde número de LLC; LALR (Look Ahed LR) nível intermediário e implementção eficiente, que funcion pr miori de lingugens de progrmção. O YACC ger esse tipo de nlisdor. Funcionmento de Anlisdores LR Pilh E m X m : : X 1 E 0 Fit de entrd 1... i... n $ Anlisdor Tbel de Análise A pilh rmzen símbolos d grmátic (X j ) intercldos com estdos (E j ) do nlisdor Estrutur d Tbel de Análise E TA DO AÇÃO TERMINAI empilh reduz ceit erro TRANIÇÃO NÃO-TERMINAI E TA DO 5