5.5 – análise bottom-up tentativa de construir uma árvore sintática para a sentença analisada,...

99
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: internet

Post on 16-Apr-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

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

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

Exemplo:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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)$

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)$#

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

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)$#

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

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)$#

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

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)$#

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

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)$#

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

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)$#

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

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)$#

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

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)$#

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

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 )$#)$#

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

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 )$#)$#

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

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 )$#)$#

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

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 )$#)$#

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

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) $#$#

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)

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 $#$#

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

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 $#$#

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

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 $#$#

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

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$ ##

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$

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 ##

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

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 ##

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 ##

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 ) $

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

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

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

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

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

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 de uma forma sentencialPrefixo viável de uma forma sentencial é é um prefixo dessa forma que não vai além do um prefixo dessa forma que não vai além do final da final 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

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

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 )$#)$#

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

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

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

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 analisadores LL para tomar decisões; entrada que analisadores LL 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

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

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

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

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

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

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

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

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)

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

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);

}}

}}

}}

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)::

Estado inicial:Estado inicial:

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Ação: d 5

Saída

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Ação: r 6

Saída

F id

id5

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Saída

F id

id5

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Ação: r 4

Saída

F id T F

F3

F id

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Ação: r 4

Saída

F id T F

F3

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

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Ação: d 5

Saída

F id T F

T2

*7

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

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Saída

F id T FF id

T2

*7

id5

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

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Saída

F id T FF idT T*F

T2

*7

F10

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

Programa

analisador LR

id * id + id $

Sentença de entrada

0Pilha

Saída

F id T FF idT T*FE T

T2

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

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

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

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

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

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

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

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

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