Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


COMP aula5, Notas de aula de Informática

Compiladores ensinado por Patrick Pedreira.

Tipologia: Notas de aula

Antes de 2010

Compartilhado em 01/12/2009

ygor-dos-santos-luz-3
ygor-dos-santos-luz-3 🇧🇷

4.7

(3)

55 documentos

1 / 39

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Introdução à Análise Sintática
Parte
Este material é baseado nos materiais de autoria da profa. V. Feltrim
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27

Pré-visualização parcial do texto

Baixe COMP aula5 e outras Notas de aula em PDF para Informática, somente na Docsity!

Introdução à Análise Sintática

2ª Parte

Este material é baseado nos materiais de autoria da profa. V. Feltrim

Análise Sintática Descendente• Vimos que a recursividade à esquerda não é permitidanos métodos de ASD– Derivação infinita• Se gramática recursiva à esquerda, deve-se eliminaressa recursividade• Exemplo^ Recursão à esquerda eliminada?Dada uma cadeia, produzem a mesma árvore de derivação?

::= op | ::= a

::= op | ::= a

Recursividade à Esquerda

  • Dois tipos: -^ recursividade direta

A^ →

Aa | b

-^ recursividade indireta

S^ →

AA | a A^ →

SS | b

Eliminação de Recursividade à

Esquerda

  • Eliminando recursividade

direta

:

  • Substituir cada regra da forma

A^ →

| A 1

α^2

| ... | A

αn^

|^ β^1

|^ β

βm

  • onde nenhum

βi

começa com A, por

A^

→ β

A’ | 1

β^2

A’ | ... |

βm

A’

A’^

→ α

A’ | 1

α^2

A’ | ... |

αn

A’ |

λ

Se produções vazias não são permitidas, asubstituição deve ser:A^ → β

|^ β 1

| ... | 2

βm

|^ β

A’^1 |^ β^2

A’^ | ... |

βm

A’

A’^ → α

|^ α 1

| ... | 2

αn^

|^ α^1

A’^ |^

αA’^2

| ... |

αA’n

Eliminação de Recursividade à

Esquerda

  • Eliminando recursividade

indireta

:

  • 1º passo:
    • transforme a recursividade indireta em direta porsubstituição
      • 2º passo:

S • elimine a recursividade direta

AA | a A^ →

SS | b

S^ →

AA | a A^ →

AAS | aS | b

O 1º S da regra A

→^

SS é substituído pelas produções de S,

i.e., S

→^

AA e S

→^

a

Eliminação de Recursividade à

Esquerda

  • Eliminando recursividade

indireta

:

  • 1º passo (substituição)– 2º passo (eliminar recursividade direta)

S^ →

AA | a A^ →

SS | b

S^ →

AA | a A^ →

AAS | aS | b

S^ →

AA | a A^ →

AAS | aS | b

S^

→^

AA | a A^

→^

aSA’ | bA’ A’^

→^

ASA’ |

λ

Recursãodireta

Eliminação de Recursividade à

Esquerda

-^

Dada a gramática abaixo, elimine a recursão àesquerdaP:^

E^ →

E+T | T

P:^

E^ →

TE’

T^ →

T*F | F

E’^

→^

+TE’ |

λ

F^ →

(E) | id

T^

→^

FT’

T’^

→^

*FT’ |

λ

F^

→^

(E) | id

e

ASD

•^

A análise só é eficiente quando se eliminam retrocessos– Sabe-se de antemão qual r gra aplicar

-^

Além de não serem recursivas à esquerda, asgramáticas devem obedecer duas outras restrições– O lado direito das produções devem começar por terminais– Para um não terminal qualquer, não devem existir duas regras

que comecem com um mesmo terminal

-^

Com isso, olhando o primeiro símbolo da entrada, sabe-se qual regra aplicar

ASD

  • a * b a (1) E

  • a * b a (2) E + E E

(3) a * b aE + E E

(4) a * b aE + E Ea

(5) * b aE + E Ea

(6) * b aE + E Ea

  • E E

1.^

::= +

2.^

::= *

3.^

::= a

4.^

::= b

Observe que não foram necessários retrocessos

ASD

(7) b a E + E Ea^

  • E E

(8) b a E + E Ea^

  • E Eb

(9) a E + E Ea^ * E E

b

(10)a E + E Ea^ * E E

b^ a

(11)^ ^ E + E Ea^ * E E

b^ a

1.^

::= +

2.^

::= *

3.^

::= a

4.^

::= b

ASD

•^

Além de não serem recursivas à esquerda, asgramáticas devem obedecer duas restrições^ – O lado direito das produções devem começar por

terminais – Para um não terminal qualquer, não devem existir duas regrasque comecem com um mesmo terminal

-^

Restrição muito severa!^ – Generalização

: podem existir não terminais

começando os lados direitos das regras de um nãoterminal,

mas

seus conjuntos

Primeiro

( First

) devem

ser disjuntos

Cálculo dos Conjuntos

Primeiro

ASD

-^

Além de não serem recursivas à esquerda, asgramáticas devem obedecer duas restrições^ – O lado direito das produções devem começar por

terminais – Para um não terminal qualquer, não devem existirduas regras que comecem com um mesmo símbolo

-^

Restrição muito severa!– Generalização

: podem existir não terminais começando os lados

direitos das regras de um não terminal, mas seus conjuntos Primeiro

devem ser disjuntos

Fatoração àesquerda

Fatoração à Esquerda

-^

Transformação que elimina regras quecomecem com o mesmo

prefixo

  • Adiamos a decisão de qual regra usar até quetenhamos visto o suficiente da entrada parapodermos fazer a escolha

Fatoração à Esquerda

-^

Regra:– para cada não terminal A, achar o maior prefixo

α

comum a duas ou mais alternativas;– se há um prefixo em comum, então substituir aprodução A

→ αβ

αβ

|^ n

(em que

^ representa as alternativas que não

começam por

α) por

A^ → α

A’|

A’^

→ β

βn

A^ → αβ

|^ αβ 1

2  A^ → α

A’

A’^

→ β

|^ β 1 2