5.5 – análise bottom-up

100
5.5 – Análise Bottom-Up 5.5 – Análise Bottom-Up Tentativa de construir uma árvore sintática Tentativa de construir uma árvore sintática para a sentença analisada, para a sentença analisada, começando das começando das folhas folhas , indo em direção , indo em direção à raiz à raiz (pós-ordem , (pós-ordem , em alguns métodos) em alguns métodos) Esse processo pode ser encarado como a Esse processo pode ser encarado como a redução redução total total de uma sentença ou um programa de uma sentença ou um programa ao ao símbolo inicial símbolo inicial da gramática da gramática Redução unitária Redução unitária (ou simplesmente (ou simplesmente redução redução ) ) : : numa forma sentencial, uma numa forma sentencial, uma sub-cadeia sub-cadeia de de símbolos igual ao símbolos igual ao lado direito lado direito de uma de uma produção é substituído pelo não-terminal do produção é substituído pelo não-terminal do lado lado esquerdo esquerdo dessa produção dessa produção

Upload: allegra-moses

Post on 04-Jan-2016

20 views

Category:

Documents


0 download

DESCRIPTION

5.5 – Análise Bottom-Up. Tentativa de construir uma árvore sintática para a sentença analisada, começando das folhas , indo em direção à raiz (pós-ordem , em alguns métodos) Esse processo pode ser encarado como a redução total de uma sentença ou um programa ao símbolo inicial da gramática - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 5.5 – Análise Bottom-Up

5.5 – Análise Bottom-Up5.5 – Análise Bottom-Up Tentativa de construir uma árvore sintática para Tentativa de construir uma árvore sintática para

a sentença analisada, a sentença analisada, começando das folhascomeçando das folhas, , indo em direção indo em direção à raiz à raiz (pós-ordem , em alguns (pós-ordem , em alguns métodos)métodos)

Esse processo pode ser encarado como a Esse processo pode ser encarado como a reduçãoredução total total de uma sentença ou um programa de uma sentença ou um programa ao ao símbolo inicialsímbolo inicial da gramática da gramática

Redução unitária Redução unitária (ou simplesmente (ou simplesmente reduçãoredução)):: numa forma sentencial, uma numa forma sentencial, uma sub-cadeiasub-cadeia de de símbolos igual ao símbolos igual ao lado direitolado direito de uma produção de uma produção é substituído pelo não-terminal do é substituído pelo não-terminal do ladolado esquerdo esquerdo dessa produçãodessa produção

Page 2: 5.5 – Análise Bottom-Up

Risco: escolher reduções erradas e nunca chegar ao símbolo inicial S

Exemplo:

Page 3: 5.5 – Análise Bottom-Up

Uma forma sentencial pode apresentar várias Uma forma sentencial pode apresentar várias alternativas conflitantesalternativas conflitantes para reduções: para reduções:

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Se a gramática não for ambígua, só uma delas coopera para se chegar ao símbolo inicial

Page 4: 5.5 – Análise Bottom-Up

5.5.1 – Análise por deslocamento e 5.5.1 – Análise por deslocamento e reduçãoredução

Os Os átomosátomos da sentença são da sentença são deslocadosdeslocados um um por um para dentro de uma por um para dentro de uma pilha para pilha para reduçõesreduções

Essas ocorrem para terminais e/ou não-Essas ocorrem para terminais e/ou não-terminais do terminais do topotopo da pilha da pilha

Se a Se a sub-cadeiasub-cadeia é devidamente escolhida a é devidamente escolhida a cada cada reduçãoredução, o resultado é uma completa , o resultado é uma completa derivação mais à direita reversaderivação mais à direita reversa

Page 5: 5.5 – Análise Bottom-Up

Exemplo:Exemplo: Seja a gramática: Seja a gramática:

S S a A B e A a A B e A A b c | b B A b c | b B d d

Seja a sentença Seja a sentença abbcdeabbcde e sua redução total a e sua redução total a SS::

a a bb b c d e b c d e a a A b c A b c d e d e a A a A dd e e a A B e a A B e S S

Esta redução total é inversa a seguinte derivação Esta redução total é inversa a seguinte derivação mais à direita:mais à direita:

SS mdmd a A a A BB e e mdmd a a AA d e d e mdmd a a AA b c d b c d e e mdmd

a b b c d ea b b c d e

Page 6: 5.5 – Análise Bottom-Up

S S a A B e A a A B e A A b c | b B A b c | b B d d

Sentença Sentença abbcdeabbcde e sua redução total a e sua redução total a SS::

a b b c d e a b b c d e a A b c d e a A b c d e a A d e a A d e a A B a A B e e S S

Três possíveis reduções da forma sentencial:Três possíveis reduções da forma sentencial:

a A b c d ea A b c d e

A

A B

Redução

escolhida

Não leva a S, mas é o

primeiro lado direito que se forma no topo

da pilha

A ser feita mais tarde, quando ‘d’

cair na pilha

Page 7: 5.5 – Análise Bottom-Up

S S a A B e A a A B e A A b c | b B A b c | b B d d

Simulação da redução de Simulação da redução de a b b c d ea b b c d e::

Observa-se que Observa-se que Pilha Pilha Entrada Entrada é uma é uma forma sentencial (derivada de forma sentencial (derivada de SS), se a entrada ), se a entrada for corretafor correta

PilhaPilha EntradaEntrada

a b b c d e

Page 8: 5.5 – Análise Bottom-Up

S S a A B e A a A B e A A b c | b B A b c | b B d d

Simulação da redução de Simulação da redução de a b b c d ea b b c d e::

Observa-se que Observa-se que Pilha Pilha Entrada Entrada é uma é uma forma sentencial (derivada de forma sentencial (derivada de SS), se a entrada ), se a entrada for corretafor correta

PilhaPilha EntradaEntrada

aa b b c d e

Page 9: 5.5 – Análise Bottom-Up

S S a A B e A a A B e A A b c | b B A b c | b B d d

Simulação da redução de Simulação da redução de a b b c d ea b b c d e::

Observa-se que Observa-se que Pilha Pilha Entrada Entrada é uma é uma forma sentencial (derivada de forma sentencial (derivada de SS), se a entrada ), se a entrada for corretafor correta

PilhaPilha EntradaEntrada

a ba b b c d e

Lado direito de uma produção: Reduzir

Page 10: 5.5 – Análise Bottom-Up

S S a A B e A a A B e A A b c | b B A b c | b B d d

Simulação da redução de Simulação da redução de a b b c d ea b b c d e::

Observa-se que Observa-se que Pilha Pilha Entrada Entrada é uma é uma forma sentencial (derivada de forma sentencial (derivada de SS), se a entrada ), se a entrada for corretafor correta

PilhaPilha EntradaEntrada

a Aa A b c d e

Page 11: 5.5 – Análise Bottom-Up

S S a A B e A a A B e A A b c | b B A b c | b B d d

Simulação da redução de Simulação da redução de a b b c d ea b b c d e::

Observa-se que Observa-se que Pilha Pilha Entrada Entrada é uma é uma forma sentencial (derivada de forma sentencial (derivada de SS), se a entrada ), se a entrada for corretafor correta

PilhaPilha EntradaEntrada

a A ba A b c d e

Lado direito de uma produção: Não reduzir

Page 12: 5.5 – Análise Bottom-Up

S S a A B e A a A B e A A b c | b B A b c | b B d d

Simulação da redução de Simulação da redução de a b b c d ea b b c d e::

Observa-se que Observa-se que Pilha Pilha Entrada Entrada é uma é uma forma sentencial (derivada de forma sentencial (derivada de SS), se a entrada ), se a entrada for corretafor correta

PilhaPilha EntradaEntrada

a A b ca A b c d e

Lado direito de uma produção: Reduzir

Page 13: 5.5 – Análise Bottom-Up

S S a A B e A a A B e A A b c | b B A b c | b B d d

Simulação da redução de Simulação da redução de a b b c d ea b b c d e::

Observa-se que Observa-se que Pilha Pilha Entrada Entrada é uma é uma forma sentencial (derivada de forma sentencial (derivada de SS), se a entrada ), se a entrada for corretafor correta

PilhaPilha EntradaEntrada

a Aa A d e

Page 14: 5.5 – Análise Bottom-Up

S S a A B e A a A B e A A b c | b B A b c | b B d d

Simulação da redução de Simulação da redução de a b b c d ea b b c d e::

Observa-se que Observa-se que Pilha Pilha Entrada Entrada é uma é uma forma sentencial (derivada de forma sentencial (derivada de SS), se a entrada ), se a entrada for corretafor correta

PilhaPilha EntradaEntrada

a A da A d e

Lado direito de uma produção: Reduzir

Page 15: 5.5 – Análise Bottom-Up

S S a A B e A a A B e A A b c | b B A b c | b B d d

Simulação da redução de Simulação da redução de a b b c d ea b b c d e::

Observa-se que Observa-se que Pilha Pilha Entrada Entrada é uma é uma forma sentencial (derivada de forma sentencial (derivada de SS), se a entrada ), se a entrada for corretafor correta

PilhaPilha EntradaEntrada

a A Ba A B e

Page 16: 5.5 – Análise Bottom-Up

S S a A B e A a A B e A A b c | b B A b c | b B d d

Simulação da redução de Simulação da redução de a b b c d ea b b c d e::

Observa-se que Observa-se que Pilha Pilha Entrada Entrada é uma é uma forma sentencial (derivada de forma sentencial (derivada de SS), se a entrada ), se a entrada for corretafor correta

PilhaPilha EntradaEntrada

a A B ea A B e

Lado direito de uma produção: Reduzir

Page 17: 5.5 – Análise Bottom-Up

S S a A B e A a A B e A A b c | b B A b c | b B d d

Simulação da redução de Simulação da redução de a b b c d ea b b c d e::

Observa-se que Observa-se que Pilha Pilha Entrada Entrada é uma é uma forma sentencial (derivada de forma sentencial (derivada de SS), se a entrada ), se a entrada for corretafor correta

PilhaPilha EntradaEntrada

SS

Aceitar a cadeia de entrada

Page 18: 5.5 – Análise Bottom-Up

Exemplo: seja a gramáticaExemplo: seja a gramática

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Page 19: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $10 * ( 5 + 3 ) $

PilhaPilha EntradaEntrada AçãoAção

## 10*(5+3)$#10*(5+3)$#

Page 20: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $10 * ( 5 + 3 ) $

PilhaPilha EntradaEntrada AçãoAção

## 10*(5+3)$#10*(5+3)$# dd

Page 21: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $10 * ( 5 + 3 ) $

PilhaPilha EntradaEntrada AçãoAção

#C#C1010 *(5+3)$#*(5+3)$#

Page 22: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $10 * ( 5 + 3 ) $

PilhaPilha EntradaEntrada AçãoAção

#C#C1010 *(5+3)$#*(5+3)$# r: r: F C

Page 23: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

1010 * ( 5 + 3 ) $ * ( 5 + 3 ) $ FF * ( 5 + 3 ) $ * ( 5 + 3 ) $

PilhaPilha EntradaEntrada AçãoAção

#F#F *(5+3)$#*(5+3)$#

Page 24: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $

PilhaPilha EntradaEntrada AçãoAção

#F#F *(5+3)$#*(5+3)$# r: r: T F

Page 25: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ FF * ( 5 + 3 ) $ * ( 5 + 3 ) $ TT * ( 5 + 3 ) $ * ( 5 + 3 ) $

PilhaPilha EntradaEntrada AçãoAção

#T#T *(5+3)$#*(5+3)$#

Page 26: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $

PilhaPilha EntradaEntrada AçãoAção

#T#T *(5+3)$#*(5+3)$# d d dd d d

Page 27: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $

PilhaPilha EntradaEntrada AçãoAção

#T*(C#T*(C55 +3)$#+3)$#

Page 28: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $

PilhaPilha EntradaEntrada AçãoAção

#T*(C#T*(C55 +3)$#+3)$# r: r: F C

Page 29: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( T * ( 55 + 3 ) $ + 3 ) $ T * ( T * ( FF + 3 ) $ + 3 ) $

PilhaPilha EntradaEntrada AçãoAção

#T*(F#T*(F +3)$#+3)$#

Page 30: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $T * ( F + 3 ) $

PilhaPilha EntradaEntrada AçãoAção

#T*(F#T*(F +3)$#+3)$# r: r: T F

Page 31: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( T * ( FF + 3 ) $ + 3 ) $ T * ( T * ( TT + 3 ) $ + 3 ) $

PilhaPilha EntradaEntrada AçãoAção

#T*(T#T*(T +3)$#+3)$#

Page 32: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $

PilhaPilha EntradaEntrada AçãoAção

#T*(T#T*(T +3)$#+3)$# r: r: E T

Page 33: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T * ( TT + 3 ) $ + 3 ) $ T * ( T * ( EE + 3 ) $ + 3 ) $

PilhaPilha EntradaEntrada AçãoAção

#T*(E#T*(E +3)$#+3)$#

Page 34: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + 3 ) $ T * ( E + 3 ) $

PilhaPilha EntradaEntrada AçãoAção

#T*(E#T*(E +3)$#+3)$# d dd d

Page 35: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + 3 ) $ T * ( E + 3 ) $

PilhaPilha EntradaEntrada AçãoAção

#T*(E+C#T*(E+C33 )$#)$#

Page 36: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + 3 ) $ T * ( E + 3 ) $

PilhaPilha EntradaEntrada AçãoAção

#T*(E+C#T*(E+C33 )$#)$# r: r: F C

Page 37: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + T * ( E + 33 ) $ ) $ T * ( E + T * ( E + FF ) $ ) $

PilhaPilha EntradaEntrada AçãoAção

#T*(E+F#T*(E+F )$#)$#

Page 38: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + 3 ) $ T * ( E + 3 ) $ T * ( E + F ) $T * ( E + F ) $

PilhaPilha EntradaEntrada AçãoAção

#T*(E+F#T*(E+F )$#)$# r: r: T F

Page 39: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + 3 ) $ T * ( E + 3 ) $ T * ( E + T * ( E + FF ) $ ) $

T * ( E+T * ( E+TT )$ )$

PilhaPilha EntradaEntrada AçãoAção

#T*(E+T#T*(E+T )$#)$#

Page 40: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + 3 ) $ T * ( E + 3 ) $ T * ( E + F ) $ T * ( E + F ) $

T * ( E+T )$T * ( E+T )$

PilhaPilha EntradaEntrada AçãoAção

#T*(E+T#T*(E+T )$#)$# r: r: E E+T

Page 41: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + 3 ) $ T * ( E + 3 ) $ T * ( E + F ) $ T * ( E + F ) $

T * ( T * ( E+TE+T )$ )$ T * ( T * ( EE )$ )$

PilhaPilha EntradaEntrada AçãoAção

#T*(E#T*(E )$#)$#

Page 42: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + 3 ) $ T * ( E + 3 ) $ T * ( E + F ) $ T * ( E + F ) $

T * ( E+T )$ T * ( E+T )$ T * ( E )$ T * ( E )$

PilhaPilha EntradaEntrada AçãoAção

#T*(E#T*(E )$#)$# dd

Page 43: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + 3 ) $ T * ( E + 3 ) $ T * ( E + F ) $ T * ( E + F ) $

T * ( E+T )$ T * ( E+T )$ T * ( E )$ T * ( E )$

PilhaPilha EntradaEntrada AçãoAção

#T*(E)#T*(E) $#$#

Page 44: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + 3 ) $ T * ( E + 3 ) $ T * ( E + F ) $ T * ( E + F ) $

T * ( E+T )$ T * ( E+T )$ T * ( E )$ T * ( E )$

PilhaPilha EntradaEntrada AçãoAção

#T*(E)#T*(E) $#$# r: r: F (E)

Page 45: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + 3 ) $ T * ( E + 3 ) $ T * ( E + F ) $ T * ( E + F ) $

T * ( E+T )$ T * ( E+T )$ T * T * ( E )( E )$ $ T * T * FF $ $

PilhaPilha EntradaEntrada AçãoAção

#T*F#T*F $#$#

Page 46: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + 3 ) $ T * ( E + 3 ) $ T * ( E + F ) $ T * ( E + F ) $

T * ( E+T )$ T * ( E+T )$ T * ( E )$ T * ( E )$ T * F $ T * F $

PilhaPilha EntradaEntrada AçãoAção

#T*F#T*F $#$# r: r: T T*F

Page 47: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + 3 ) $ T * ( E + 3 ) $ T * ( E + F ) $ T * ( E + F ) $

T * ( E+T )$ T * ( E+T )$ T * ( E )$ T * ( E )$ T * FT * F $ $ TT $ $

PilhaPilha EntradaEntrada AçãoAção

#T#T $#$#

Page 48: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + 3 ) $ T * ( E + 3 ) $ T * ( E + F ) $ T * ( E + F ) $

T * ( E+T )$ T * ( E+T )$ T * ( E )$ T * ( E )$ T * F $ T * F $ T $ T $

PilhaPilha EntradaEntrada AçãoAção

#T#T $#$# r: r: E T

Page 49: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + 3 ) $ T * ( E + 3 ) $ T * ( E + F ) $ T * ( E + F ) $

T * ( E+T )$ T * ( E+T )$ T * ( E )$ T * ( E )$ T * F $ T * F $ TT $ $ EE $ $

PilhaPilha EntradaEntrada AçãoAção

#E#E $#$#

Page 50: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + 3 ) $ T * ( E + 3 ) $ T * ( E + F ) $ T * ( E + F ) $

T * ( E+T )$ T * ( E+T )$ T * ( E )$ T * ( E )$ T * F $ T * F $ T $ T $ E $ E $

PilhaPilha EntradaEntrada AçãoAção

#E#E $#$# dd

Page 51: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + 3 ) $ T * ( E + 3 ) $ T * ( E + F ) $ T * ( E + F ) $

T * ( E+T )$ T * ( E+T )$ T * ( E )$ T * ( E )$ T * F $ T * F $ T $ T $ E $ E $

PilhaPilha EntradaEntrada AçãoAção

#E$#E$ ##

Page 52: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + 3 ) $ T * ( E + 3 ) $ T * ( E + F ) $ T * ( E + F ) $

T * ( E+T )$ T * ( E+T )$ T * ( E )$ T * ( E )$ T * F $ T * F $ T $ T $ E $ E $

PilhaPilha EntradaEntrada AçãoAção

#E$#E$ ## r: r: L E$

Page 53: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + 3 ) $ T * ( E + 3 ) $ T * ( E + F ) $ T * ( E + F ) $

T * ( E+T )$ T * ( E+T )$ T * ( E )$ T * ( E )$ T * F $ T * F $ T $ T $ E $E $ LL

PilhaPilha EntradaEntrada AçãoAção

#L#L ##

Page 54: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ F * ( 5 + 3 ) $ F * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( 5 + 3 ) $ T * ( F + 3 ) $ T * ( F + 3 ) $ T * ( T + 3 ) $ T * ( T + 3 ) $ T * ( E + 3 ) $ T * ( E + 3 ) $ T * ( E + F ) $ T * ( E + F ) $

T * ( E+T )$ T * ( E+T )$ T * ( E )$ T * ( E )$ T * F $ T * F $ T $ T $ E $ E $ LL

PilhaPilha EntradaEntrada AçãoAção

#L#L ## aceitaraceitar

Page 55: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Derivação mais à direita reversa:Derivação mais à direita reversa:

10 * ( 5 + 3 ) $ 10 * ( 5 + 3 ) $ FF * ( 5 + 3 ) $ * ( 5 + 3 ) $ TT * ( 5 + 3 ) $ * ( 5 + 3 ) $ T * ( T * ( FF + 3 ) $ + 3 ) $ T * ( T * ( TT + 3 ) $ + 3 ) $ T * ( T * ( EE + 3 ) $ + 3 ) $ T * ( E + T * ( E + FF ) $ ) $

T * ( E+T * ( E+TT )$ )$ T * ( T * ( EE )$ )$ T * T * FF $ $ TT $ $ EE $ $ LL

PilhaPilha EntradaEntrada AçãoAção

#L#L ##

Page 56: 5.5 – Análise Bottom-Up

L L E $ E $ E E E opad T | T E opad T | T

T T T opmult F | F T opmult F | F F F cte | ( E )cte | ( E )

Análise da expressão Análise da expressão 10 * (5 + 3)$10 * (5 + 3)$

Além das ações de deslocar, reduzir e aceitar, há Além das ações de deslocar, reduzir e aceitar, há também a de também a de tratar errotratar erro

PilhaPilha EntradaEntrada AçãoAção

#L#L ##

Page 57: 5.5 – Análise Bottom-Up

Há reduções legais e ilegais

Reduções ilegais: não levam ao símbolo inicial

Exemplos de reduções ilegais:

E E E

T T T

F F F

10 * ( 5 + 3 ) $

As ilegais não constroem a árvore

Page 58: 5.5 – Análise Bottom-Up

Das reduções legais, qual fazer?

Com deslocamento e redução, escolhe-se a da esquerda

É a que se forma primeiro na pilha

F F F

10 * ( 5 + 3 ) $

Numa gramática não-ambígua, asa de uma forma sentencial é o lado direito da redução legal mais à esquerda

Redução escolhida

Page 59: 5.5 – Análise Bottom-Up

Numa gramática não-ambígua, Numa gramática não-ambígua, asa de uma asa de uma forma sentencialforma sentencial é o lado direito da redução é o lado direito da redução legal mais à esquerdalegal mais à esquerda

AsaAsa em Inglês é em Inglês é handle handle (termo usado nos (termo usado nos livros)livros)

Numa tal gramática, a Numa tal gramática, a asaasa de uma forma de uma forma sentencial é sentencial é únicaúnica

Em gramáticas Em gramáticas ambíguasambíguas, há formas , há formas sentenciais com sentenciais com mais de uma asamais de uma asa

Page 60: 5.5 – Análise Bottom-Up

Exemplo: Exemplo: seja a gramática ambígua seja a gramática ambígua G = {G = {, N, , N, P, S} P, S} tal que:tal que:

= {a, b}; N = {S}; P = {S = {a, b}; N = {S}; P = {S S b S S b S a} a}

AA sentença sentença ababaababa tem duas árvores sintáticas: tem duas árvores sintáticas:

Então é necessário definir Então é necessário definir asa asa de modo mais de modo mais abrangenteabrangente

Redução (asas em amarelo):

a b a b a S b a b a S b S b a S b a S b S S

Redução (asas em amarelo):

a b a b a S b a b a S b S b a S b S b S S b S SA forma sentencial S b S b a tem 2 asas

Page 61: 5.5 – Análise Bottom-Up

Asa de uma forma sentencial:Asa de uma forma sentencial:

Uma de suas Uma de suas sub-cadeiassub-cadeias que corresponde ao que corresponde ao lado direitolado direito de uma produção tal que de uma produção tal que

Sua redução para o não-terminal à esquerda Sua redução para o não-terminal à esquerda dessa produção representa um passo de uma dessa produção representa um passo de uma derivação mais à direita reversaderivação mais à direita reversa

Em gramáticas Em gramáticas ambíguasambíguas, pode haver sentenças , pode haver sentenças com mais de uma com mais de uma derivação mais à direitaderivação mais à direita

O grande problema é O grande problema é determinar qualdeterminar qual(ais)(ais) a a(s)(s) asaasa(s)(s) de uma forma sentencial, para poder fazer de uma forma sentencial, para poder fazer uma uma reduçãoredução

Nesta disciplina Nesta disciplina nãonão serão abordadas gramáticas serão abordadas gramáticas ambíguasambíguas

Page 62: 5.5 – Análise Bottom-Up

Exemplo:Exemplo: Asas da redução de Asas da redução de abbcdeabbcde

a a bb b c d e b c d e a a A b cA b c d e d e a A a A dd e e a A B ea A B e S S

Exemplo: Exemplo: Asas da redução de Asas da redução de 10 * ( 5 + 3 ) $10 * ( 5 + 3 ) $

1010 * ( 5 + 3 ) $ * ( 5 + 3 ) $ FF * ( 5 + 3 ) $ * ( 5 + 3 ) $ T*( T*( 55 + 3 ) $ + 3 ) $ T * T *

( ( FF+3 ) $ +3 ) $ T * ( T * ( TT+3 ) $ +3 ) $ T * ( E+ T * ( E+33 ) $ ) $ T *( E + T *( E + FF ) )

$ $ T * ( T * ( E+TE+T )$ )$ T * T * ( E )( E )$ $ T * F T * F $ $ TT $ $ E $E $ L L

Análise por deslocamento e redução faz o Análise por deslocamento e redução faz o corte corte das asasdas asas formadas no formadas no topo da pilhatopo da pilha

Sem ambiguidades, uma vez formada a Sem ambiguidades, uma vez formada a asa no asa no topo da pilhatopo da pilha, ela deve ser , ela deve ser cortadacortada (reduzida) (reduzida)

O problema é identificar asas no topo da pilha

Page 63: 5.5 – Análise Bottom-Up

Já que Já que Pilha Pilha Entrada Entrada é uma forma é uma forma sentencial (derivada de sentencial (derivada de SS))

O conteúdo da pilha é chamado de O conteúdo da pilha é chamado de prefixoprefixo dessa formadessa forma

Prefixo viável Prefixo viável de uma forma sentencial é um de uma forma sentencial é um prefixo dessa forma que não vai além do final prefixo dessa forma que não vai além do final da da asa mais à direitaasa mais à direita da mesma:  da mesma: 

É um prefixo que pode aparecer na É um prefixo que pode aparecer na pilhapilha de um analisador por de um analisador por deslocamento e deslocamento e reduçãoredução

Page 64: 5.5 – Análise Bottom-Up

Para gramáticas não ambíguas, Para gramáticas não ambíguas, prefixo viável prefixo viável de de uma forma sentencial é um prefixo dessa forma uma forma sentencial é um prefixo dessa forma que não vai além do que não vai além do final de sua asafinal de sua asa

Exemplo: Exemplo: sejam as seguintes situações na pilhasejam as seguintes situações na pilha

5 5 e e E+TE+T são as asas de suas respectivas formas são as asas de suas respectivas formas

Os prefixos Os prefixos #T*(5+ #T*(5+ e e #T*(E+T)#T*(E+T) são inviáveis são inviáveis

Deslocar o Deslocar o ‘+’‘+’ ou ou ‘)’‘)’ equivale a equivale a enterrar asasenterrar asas

PilhaPilha EntradaEntrada#T*(#T*(55 +3)$#+3)$#

PilhaPilha EntradaEntrada#T*(#T*(E+TE+T )$#)$#

Page 65: 5.5 – Análise Bottom-Up

Para gramáticas não ambíguas, Para gramáticas não ambíguas, prefixo viável prefixo viável de uma forma sentencial é um prefixo dessa de uma forma sentencial é um prefixo dessa forma que não vai além do forma que não vai além do final de sua asafinal de sua asa

Um Um analisadoranalisador por deslocamento e redução por deslocamento e redução faz faz detecção de prefixos inviáveisdetecção de prefixos inviáveis em sua em sua pilhapilha

Isso é Isso é fundamentalfundamental para a decisão entre para a decisão entre deslocar ou reduzirdeslocar ou reduzir

Page 66: 5.5 – Análise Bottom-Up

5.5.2 – Gramáticas LR(k) e LR(1)5.5.2 – Gramáticas LR(k) e LR(1)

Gramáticas LR(k):Gramáticas LR(k): admitem analisadores por admitem analisadores por deslocamento e redução que: deslocamento e redução que:

Analisam as sentenças da Analisam as sentenças da esquerdaesquerda para a para a direita (direita (L - leftL - left))

Produzem derivações Produzem derivações mais à direita reversasmais à direita reversas ((R - rightR - right))

Precisam Precisam analisaranalisar no máximo, os próximos no máximo, os próximos k k símbolossímbolos, para , para decidirdecidir se vão reduzir ou se vão reduzir ou deslocar e, se forem reduzir, que produção usardeslocar e, se forem reduzir, que produção usar

■ Gramáticas LR(1): Gramáticas LR(1): gramáticas gramáticas LR(k)LR(k) em que em que k k = 1= 1

Page 67: 5.5 – Análise Bottom-Up

Comparação entre analisadores LL e LR:Comparação entre analisadores LL e LR:

Analisador LR(k):Analisador LR(k): reconhece o lado direito de reconhece o lado direito de uma produção, depois de ter lido todo o trecho do uma produção, depois de ter lido todo o trecho do programa derivado desse lado direito, analisando programa derivado desse lado direito, analisando os próximos os próximos kk terminais de entrada terminais de entrada

Analisador LL(k):Analisador LL(k): reconhece o uso de uma reconhece o uso de uma produção para expandir um não-terminal, produção para expandir um não-terminal, analisando os próximos analisando os próximos k k terminais de entrada, terminais de entrada, sem levar em consideração nada que já foi lidosem levar em consideração nada que já foi lido

Analisadores LR Analisadores LR utilizam mais informações da utilizam mais informações da entrada que entrada que analisadores LLanalisadores LL para tomar decisões; para tomar decisões; suas dúvidas e conflitos são menos numerosassuas dúvidas e conflitos são menos numerosas

Analisadores Analisadores LRLR podem analisar mais gramáticas podem analisar mais gramáticas que que LLLL

Page 68: 5.5 – Análise Bottom-Up

5.5.3 – Analisadores LR5.5.3 – Analisadores LR

São analisadores sintáticos para São analisadores sintáticos para gramáticas LRgramáticas LR

Métodos LR Métodos LR conseguem analisar GLC’s conseguem analisar GLC’s recursivas à esquerdarecursivas à esquerda

Um Um analisador LRanalisador LR consegue detectar um erro consegue detectar um erro sintático sintático tão cedo quanto possíveltão cedo quanto possível, numa , numa análise da análise da esquerdaesquerda para a para a direitadireita da sentença da sentença

É É grande o trabalhogrande o trabalho de construir um de construir um analisador LR analisador LR manualmentemanualmente

É providencial poder contar com um É providencial poder contar com um gerador gerador automáticoautomático; a ferramenta ; a ferramenta Yacc é LRYacc é LR

Page 69: 5.5 – Análise Bottom-Up

Esquema de um analisador LR:Esquema de um analisador LR:

Page 70: 5.5 – Análise Bottom-Up

Autômato: detecta prefixos inviáveis na Autômato: detecta prefixos inviáveis na pilha; governa todo analisadorpilha; governa todo analisador

Page 71: 5.5 – Análise Bottom-Up

Elemento da pilha: um símbolo e um estado Elemento da pilha: um símbolo e um estado do autômatodo autômato

Page 72: 5.5 – Análise Bottom-Up

Tabela de ações:Tabela de ações: Ação[e, a] Ação[e, a] ((aa – átomo de – átomo de entrada corrente entrada corrente

ee – estado no topo da pilha) pode ser: – estado no topo da pilha) pode ser:

Deslocar, e’Deslocar, e’ - - e’e’ é um estado é um estado Reduzir, pReduzir, p - - pp é o número de uma é o número de uma

produção produção AA AceitarAceitar ErroErro

Page 73: 5.5 – Análise Bottom-Up

Tabela de transições:Tabela de transições: Goto[e, A] Goto[e, A] ((ee – estado, – estado,

AA – não-terminal) pode ser: – não-terminal) pode ser:

Um outro estadoUm outro estado ErroErro

Page 74: 5.5 – Análise Bottom-Up

Funcionamento Funcionamento

do analisador:do analisador:

Se Se Ação [eAção [emm, a, aii] = Deslocar, e] = Deslocar, e::

(e, a(e, aii)) é empilhado (o autômato muda de é empilhado (o autômato muda de estado)estado)

aai+1i+1 passa a ser o átomo de entrada corrente passa a ser o átomo de entrada corrente

Page 75: 5.5 – Análise Bottom-Up

Funcionamento Funcionamento

do analisador:do analisador:

Se Se Ação [eAção [emm, a, aii] = Reduzir, p ] = Reduzir, p ((pp é é AA):):

r r elementos da pilha são desempilhados (elementos da pilha são desempilhados (rr – – comprimento de comprimento de ))

(e(em-rm-r, X, Xm-rm-r)) passa a ser o topo da pilha passa a ser o topo da pilha

e e Goto [e Goto [em-rm-r, A], A] (e, A)(e, A) é empilhado (o autômato muda de é empilhado (o autômato muda de

estado)estado)

Page 76: 5.5 – Análise Bottom-Up

Funcionamento Funcionamento

do analisador:do analisador:

Se Se Ação [eAção [emm, a, aii] = Aceitar] = Aceitar: encerra-se a análise: encerra-se a análise

Se Se Ação [eAção [emm, a, aii] = Erro] = Erro: chama tratamento de : chama tratamento de erroerro

A A saídasaída pode ser a relação de pode ser a relação de produçõesproduções usadas usadas nas reduçõesnas reduções

Page 77: 5.5 – Análise Bottom-Up

Algoritmo 5.8: Análise LRAlgoritmo 5.8: Análise LR

Empilhar (eEmpilhar (e00); w ); w sentença || $; p sentença || $; p &(w[0]); &(w[0]);

Repetir sempre{Repetir sempre{

e e estado do topo da pilha; a estado do topo da pilha; a *p; *p;

caso (Ação [e, a]) seja {caso (Ação [e, a]) seja {

Aceitar: retornar;Aceitar: retornar; Erro: TratarErro ( );Erro: TratarErro ( );

Deslocar, e’: { Empilhar (e’, a); Avançar (p); }Deslocar, e’: { Empilhar (e’, a); Avançar (p); }

Reduzir, p (p = AReduzir, p (p = A, r = comprimento(, r = comprimento()): {)): {

Imprimir (AImprimir (A); Desempilhar (r ); Desempilhar (r elementos);elementos);

e e estado do topo da pilha; estado do topo da pilha;

Empilhar (Goto [e, A], A); Empilhar (Goto [e, A], A);

}}

}}

}}

Page 78: 5.5 – Análise Bottom-Up

Exemplo: Exemplo: seja a seguinte gramática de seja a seguinte gramática de expressões:expressões:

1) E 1) E E + T E + T 3) T 3) T T * F T * F 5) F 5) F ( E ) ( E )

2) E 2) E T T 4) T 4) T F F 6) F 6) F id id

Seja a seguinte Seja a seguinte sentençasentença em análise: em análise: id * id id * id + id+ id

Tabelas de ações e transiçõesTabelas de ações e transições (construção (construção apresentada a seguir)apresentada a seguir)::

Page 79: 5.5 – Análise Bottom-Up

Situação inicial:Situação inicial:

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Ação: d 5

Saída

Page 80: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Ação: r 6

Saída

F id

id5

Page 81: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Saída

F id

id5

Page 82: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Ação: r 4

Saída

F id T F

F3

F id

Page 83: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Ação: r 4

Saída

F id T F

F3

Page 84: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Ação: d 7

Saída

F id T F

T2

Não reduz segundo E

T

Page 85: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Ação: d 5

Saída

F id T F

T2

*7

Page 86: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Ação: r 6

Saída

F id T FF id

T2

*7

id5

F id T F

Page 87: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Saída

F id T FF id

T2

*7

id5

Page 88: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Ação: r 3

Saída

F id T FF idT T*F

T2

*7

F10

F id T FF id

Page 89: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Saída

F id T FF idT T*F

T2

*7

F10

Page 90: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Ação: r 2

Saída

F id T FF idT T*FE T

T2

F id T FF idT T*F

Page 91: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Saída

F id T FF idT T*FE T

T2

Page 92: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Ação: d 6

Saída

F id T FF idT T*FE T

E1

Page 93: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Ação: d 5

Saída

F id T FF idT T*FE T

+6

E1

Page 94: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Ação: r 6

Saída

F id T FF idT T*FE TF id+6

E1

id5

F id T FF idT T*FE T

Page 95: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Saída

F id T FF idT T*FE TF id+6

E1

id5

Page 96: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Ação: r 4

Saída

F id T FF idT T*FE TF idT F+6

E1

F3

F id T FF idT T*FE TF id

Page 97: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Saída

F id T FF idT T*FE TF idT F+6

E1

F3

Page 98: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Ação: r 1

Saída

F id T FF idT T*FE TF idT FE E+T

+6

E1

T9

F id T FF idT T*FE TF idT F

Page 99: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Saída

F id T FF idT T*FE TF idT FE E+T

+6

E1

T9

Page 100: 5.5 – Análise Bottom-Up

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Ação: act

Saída

F id T FF idT T*FE TF idT FE E+TE1