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

22
Introdução Objetivo Analisadores Sintáticos Top-Down Tipos de A.S.D.R Com Retrocesso Construção de Compiladores Aula 16 - Análise Sintática Bruno Müller Junior Departamento de Informática UFPR 25 de Setembro de 2014 Bruno Müller Junior Departamento de Informática UFPR Construção de Compiladores Aula 16 - Análise Sintática

Transcript of Construção de Compiladores Aula 16 - Análise Sintática ·...

Page 1: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 2: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 3: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 4: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 5: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 6: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 7: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 8: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 9: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 10: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 11: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 12: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 13: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 14: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 15: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 16: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 17: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 18: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 19: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 20: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 21: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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

Page 22: Construção de Compiladores Aula 16 - Análise Sintática · IntroduçãoObjetivoAnalisadoresSintáticosTop-DownTiposdeA.S.D.R ComRetrocesso Introdução Aanálisesintática(parsing)éumprocessoqueverificaseuma

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