construção de compiladores aula 16 - análise sintática ·...
TRANSCRIPT
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Construção de CompiladoresAula 16 - Análise Sintática
Bruno Müller Junior
Departamento de InformáticaUFPR
25 de Setembro de 2014
Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
1 IntroduçãoHierarquia de Chomsky
ReconhecedoresLinguagens Livres de Contexto Determinísticas
DefiniçõesLinguagensGramáticaÁrvore de DerivaçãoGramática AmbíguaLinguagem Ambígua
Contexto2 Objetivo3 Analisadores Sintáticos Top-Down4 Tipos de A.S.D.R5 Com Retrocesso
MétodoExemplo (1)Exemplo (3)Exemplo (3)
Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Introdução
A análise sintática (parsing) é um processo que verifica se umadeterminada entrada (sentença) corresponde ao de umagramática.
Seja G1 uma gramática;Seja L(G1) a linguagem definida por G1;Seja α uma sentença de entrada.Então, formalmente, um analisador sintático é uma ferramentacapaz de dizer se:
α ∈ L(G1)
Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Hierarquia de Chomsky
Hierarquia de Chomsky
é uma classificação de gramáticas formais descrita em 1959pelo linguista Noam Chomsky.
Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Reconhecedores
Reconhecedores
Tipo Nome Exemplo Reconhecedor Complexidade0 Recursivamente Estrutura Maquina de Undecidable
Enumerável de Frase Turing1 Linguagem anbncn Aut. Linearm. NP-Completo
Sensível Cont. Delimitado2 Linguagem Livre anbn Automato a O(n3)
de Contexto Pilha3 Linguagem anb Automato O(n)
Regular Finito
Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Linguagens Livres de Contexto Determinísticas
Linguagens Livres de Contexto Determinísticas
Linguagens livres de contexto determinísticas são umsubconjunto das LLC onde as linguagens não são ambíguas.A teoria (e prática) de compiladores trata desta classe.Todas as linguagens de programação pertencem a esta classe.O que será estudado
Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Definições
Definições
Para se especificar uma linguagem de programação, énecessário formalizar sua sintaxe, semântica e alfabeto.
Para especificar a sintaxe, usa-se a BNF.Para especificar a semântica, usa-se regras informais. Porexemplo, associar o símbolo “*” com a operação demultiplicação.alfabeto: conjunto finito e não vazio de símbolos, por exemplo:Σ = {a, b, ∗, (, )}
Cadeia (palavra ou sentença): sequencia finita de símbolos deΣ.Um caso importante é o conjunto de todas as sentenças de umalfabeto, que é indicada por Σ∗
Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Linguagens
Linguagens
Uma linguagem é um subconjunto de Σ∗.Exemplos de linguagens para Σ = {a, b}.
L1 = ∅L2 = {α ∈ Σ, |α| ≤ 2}L3 = {an, n ≥ 2}L4 = {anbn, n ≥ 1}
As linguagens L1 e L2 são linguagens finitas.As linguagens L3 e L4 são linguagens infinitas.
Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Gramática
Gramática
Uma gramática livre de contexto é definida pela 4-tuplaG = {T ,V ,P, S}, onde:
T Símbolos terminais;V Símbolos não terminais (ou “variáveis”)P Produções ou regras: é uma relação finita de N
para (T ∪ N)∗
S Símbolo inicialExemplo: G1 = {{a, b}, {S}, {S → ab|aSb},S)
Derivações: S ⇒ aSb ⇒ aaSbb ⇒ aaabbb
Linguagem: L(G1) = {anbn, n ≥ 1}
Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Árvore de Derivação
Árvore de Derivação
Uma árvore de derivação é uma alternativa gráfica paramostrar o processo de derivação de uma sentença em umagramática.Seja G1 = {{a, b}, {S}, {S → ab|aSb},S) e as derivaçõesS ⇒ aSb ⇒ aaSbb ⇒ aaabbb
S
S
ba
S
bbaa
ab
bbaa
Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Gramática Ambígua
Gramática Ambígua
Uma gramática é dita ambígua se existe uma sentença para aqual existe mais de uma árvore de derivação.Exemplo: G2 = {E → a|E + E}, α = a + a + a
E
E
a
+E
E
a
+E
a
E
E
E
a
+E
a
+E
a
Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Linguagem Ambígua
Linguagem Ambígua
Para eliminar a ambiguidade de uma gramática G1, deve-sereescrever a gramática para uma nova gramática G2 nãoambígua tal que L(G1)=L(G2). Exemplo:
G1 = {A→ Aa|aA|a}G2 = {A→ Aa|a}
Quando não existe uma G2 não ambígua, dizemos que alinguagem é ambígua. Exemplo:L = {aibjck |i , j , k ≥ 1 e i = j ou j = k}
Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Contexto
Contexto
Gramáticas, linguagens e ambiguidades (entre outros) são oalvo de uma área da teoria da computação que lida comlinguagens formais e autômatos.Em compiladores, o alvo é um subconjunto de linguagens livresde contexto chamadas “Linguagens livres de contextodeterminísticas”, que:
1 não são ambíguas;2 são o conjunto de linguagens do qual fazem parte todas as
linguagens de programação.3 os reconhecedores tem complexidade O(n);
Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Objetivo
Seja α uma sentença e G uma gramática para uma LLCD.O que será estudado aqui são mecanismos para reconhecer seα ∈ L(G ).Para tal, existem duas abordagens: top-down e bottom-up.
Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Analisadores Sintáticos Top-Down
Esta categoria de analisadores sintáticos tem as seguintescaracterísticas:
lêem a entrada da esquerda para a direita (left to rightparsing);constróem a árvore de derivação de cima para baixosubstituindo sempre o terminal mais à esquerda (leftmostderivation)O nome genérico deste tipo de analisador sintátivo é LL (Leftto right parsing producing Leftmost derivation).
Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Tipos de A.S.D.R
Foram desenvolvidos vários analisadores sintáticos para estacategoria. Aqui estudaremos alguns simples:Análise descendente com retrocesso;Melhoramentos:
Eliminar Retrocessos;Eliminar Recursão Esquerda;Fatoração;
Geração automática de um A.S.D.R.
Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Com Retrocesso
faz a análise sintática pelo método da força bruta, verificandotodas as possibilidades.Como exemplo, considere a Gramática L(Gr ) a seguir.α = ”a ∗ b” ∈ Gr ?
Gr = { 1 E → T + E
2 E → E
3 T → T ∗ F4 T → F
5 F → a
6 F → b
7 F → (E )}Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Método
Método
Algoritmo recursivo: Coloque S como raiz da árvore dederivação;Seja X a variável mais à esquerda;Selecione uma produção do tipo X → ABC
Se houverem alguma, pendure;Se não houver, descarte a última produção.Reaplique o algoritmo;
Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Exemplo (1)
Exemplo (1)
α = a ∗ b α = a ∗ b α = a ∗ bInicial Após produção 1 Após produção 3
E
E
E+T
E
E+T
T*F
Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Exemplo (3)
Exemplo (3)
No próximo passo, um token será retirado da entrada (a) ependurado na árvore.com isto, a entrada fica α = *b, sendo que o algoritmo tentaagora colocar “*” na árvore.
E
E+T
T*F
a
Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Exemplo (3)
Exemplo (3)
O processo continua utilizando a seguinte seqüência deproduções: 5 , 3 , 6 .Observe que a entrada já foi toda pendurada, e que asderivações possíveis para T não são viáveis (tente).
E
E+T
T
T*F
b
*F
a
Bruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso
Exemplo (3)
Exemplo (3)
Neste ponto o algoritmo detecta que houve um erro, eretrocede um passo (por isso se chama A.S.D.R comretrocesso).Ao retroceder, procura-se alternativas para F, como não há,retrocede-se para T, e tenta-se a produção seguinte aT → F ∗ T , que é T → F :
E
E+T
T
F
*F
aBruno Müller Junior Departamento de Informática UFPR
Construção de Compiladores Aula 16 - Análise Sintática