A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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.

Apresentações semelhantes


Apresentação em tema: "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."— Transcrição da apresentação:

1 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 Redução unitária (ou simplesmente redução): numa forma sentencial, uma sub-cadeia de símbolos igual ao lado direito de uma produção é substituído pelo não-terminal do lado esquerdo dessa produção

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

3 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Uma forma sentencial pode apresentar várias alternativas conflitantes para reduções: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Se a gramática não for ambígua, só uma delas coopera para se chegar ao símbolo inicial

4 5.5.1 – Análise por deslocamento e redução
Os átomos da sentença são deslocados um por um para dentro de uma pilha para reduções Essas ocorrem para terminais e/ou não-terminais do topo da pilha Se a sub-cadeia é devidamente escolhida a cada redução, o resultado é uma completa derivação mais à direita reversa

5 a b b c d e  a A b c d e  a A d e  a A B e  S
Exemplo: Seja a gramática: S  a A B e A  A b c | b B  d Seja a sentença abbcde e sua redução total a S: a b b c d e  a A b c d e  a A d e  a A B e  S Esta redução total é inversa a seguinte derivação mais à direita: S md a A B e md a A d e md a A b c d e md a b b c d e

6 A ser feita mais tarde, quando ‘d’ cair na pilha
S  a A B e A  A b c | b B  d Sentença abbcde e sua redução total a S: a b b c d e  a A b c d e  a A d e  a A B e  S Três possíveis reduções da forma sentencial: a A b c d e A Redução escolhida A ser feita mais tarde, quando ‘d’ cair na pilha Não leva a S, mas é o primeiro lado direito que se forma no topo da pilha A B

7 a b b c d e S  a A B e A  A b c | b B  d
Simulação da redução de a b b c d e: Observa-se que Pilha  Entrada é uma forma sentencial (derivada de S), se a entrada for correta Pilha Entrada a b b c d e

8 a b b c d e S  a A B e A  A b c | b B  d
Simulação da redução de a b b c d e: Observa-se que Pilha  Entrada é uma forma sentencial (derivada de S), se a entrada for correta Pilha Entrada a b b c d e

9 a b b c d e S  a A B e A  A b c | b B  d
Simulação da redução de a b b c d e: Observa-se que Pilha  Entrada é uma forma sentencial (derivada de S), se a entrada for correta Pilha Entrada a b b c d e Lado direito de uma produção: Reduzir

10 a A b c d e S  a A B e A  A b c | b B  d
Simulação da redução de a b b c d e: Observa-se que Pilha  Entrada é uma forma sentencial (derivada de S), se a entrada for correta Pilha Entrada a A b c d e

11 a A b c d e S  a A B e A  A b c | b B  d
Simulação da redução de a b b c d e: Observa-se que Pilha  Entrada é uma forma sentencial (derivada de S), se a entrada for correta Pilha Entrada a A b c d e Lado direito de uma produção: Não reduzir

12 a A b c d e S  a A B e A  A b c | b B  d
Simulação da redução de a b b c d e: Observa-se que Pilha  Entrada é uma forma sentencial (derivada de S), se a entrada for correta Pilha Entrada a A b c d e Lado direito de uma produção: Reduzir

13 a A d e S  a A B e A  A b c | b B  d
Simulação da redução de a b b c d e: Observa-se que Pilha  Entrada é uma forma sentencial (derivada de S), se a entrada for correta Pilha Entrada a A d e

14 a A d e S  a A B e A  A b c | b B  d
Simulação da redução de a b b c d e: Observa-se que Pilha  Entrada é uma forma sentencial (derivada de S), se a entrada for correta Pilha Entrada a A d e Lado direito de uma produção: Reduzir

15 a A B e S  a A B e A  A b c | b B  d
Simulação da redução de a b b c d e: Observa-se que Pilha  Entrada é uma forma sentencial (derivada de S), se a entrada for correta Pilha Entrada a A B e

16 a A B e S  a A B e A  A b c | b B  d
Simulação da redução de a b b c d e: Observa-se que Pilha  Entrada é uma forma sentencial (derivada de S), se a entrada for correta Pilha Entrada a A B e Lado direito de uma produção: Reduzir

17 S S  a A B e A  A b c | b B  d Simulação da redução de a b b c d e:
Observa-se que Pilha  Entrada é uma forma sentencial (derivada de S), se a entrada for correta Pilha Entrada S Aceitar a cadeia de entrada

18 Exemplo: seja a gramática L  E $ E  E opad T | T
T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$

19 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $ Pilha Entrada Ação # 10*(5+3)$#

20 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $ Pilha Entrada Ação # 10*(5+3)$# d

21 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $ Pilha Entrada Ação #C10 *(5+3)$#

22 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $ Pilha Entrada Ação #C10 *(5+3)$# r: F  C

23 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $ Pilha Entrada Ação #F *(5+3)$#

24 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $ Pilha Entrada Ação #F *(5+3)$# r: T  F

25 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $ Pilha Entrada Ação #T *(5+3)$#

26 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $ Pilha Entrada Ação #T *(5+3)$# d d d

27 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $ Pilha Entrada Ação #T*(C5 +3)$#

28 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $ Pilha Entrada Ação #T*(C5 +3)$# r: F  C

29 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $ Pilha Entrada Ação #T*(F +3)$#

30 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $ Pilha Entrada Ação #T*(F +3)$# r: T  F

31 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $ Pilha Entrada Ação #T*(T +3)$#

32 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $ Pilha Entrada Ação #T*(T +3)$# r: E  T

33 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $ Pilha Entrada Ação #T*(E +3)$#

34 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $ Pilha Entrada Ação #T*(E +3)$# d d

35 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $ Pilha Entrada Ação #T*(E+C3 )$#

36 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $ Pilha Entrada Ação #T*(E+C3 )$# r: F  C

37 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $  T * ( E + F ) $ Pilha Entrada Ação #T*(E+F )$#

38 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $  T * ( E + F ) $ Pilha Entrada Ação #T*(E+F )$# r: T  F

39 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $  T * ( E + F ) $  T * ( E+T )$ Pilha Entrada Ação #T*(E+T )$#

40 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $  T * ( E + F ) $  T * ( E+T )$ Pilha Entrada Ação #T*(E+T )$# r: E  E+T

41 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $  T * ( E + F ) $  T * ( E+T )$  T * ( E )$ Pilha Entrada Ação #T*(E )$#

42 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $  T * ( E + F ) $  T * ( E+T )$  T * ( E )$ Pilha Entrada Ação #T*(E )$# d

43 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $  T * ( E + F ) $  T * ( E+T )$  T * ( E )$ Pilha Entrada Ação #T*(E) $#

44 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $  T * ( E + F ) $  T * ( E+T )$  T * ( E )$ Pilha Entrada Ação #T*(E) $# r: F  (E)

45 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $  T * ( E + F ) $  T * ( E+T )$  T * ( E )$  T * F $ Pilha Entrada Ação #T*F $#

46 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $  T * ( E + F ) $  T * ( E+T )$  T * ( E )$  T * F $ Pilha Entrada Ação #T*F $# r: T  T*F

47 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $  T * ( E + F ) $  T * ( E+T )$  T * ( E )$  T * F $  T $ Pilha Entrada Ação #T $#

48 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $  T * ( E + F ) $  T * ( E+T )$  T * ( E )$  T * F $  T $ Pilha Entrada Ação #T $# r: E  T

49 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $  T * ( E + F ) $  T * ( E+T )$  T * ( E )$  T * F $  T $  E $ Pilha Entrada Ação #E $#

50 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $  T * ( E + F ) $  T * ( E+T )$  T * ( E )$  T * F $  T $  E $ Pilha Entrada Ação #E $# d

51 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $  T * ( E + F ) $  T * ( E+T )$  T * ( E )$  T * F $  T $  E $ Pilha Entrada Ação #E$ #

52 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $  T * ( E + F ) $  T * ( E+T )$  T * ( E )$  T * F $  T $  E $ Pilha Entrada Ação #E$ # r: L  E$

53 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $  T * ( E + F ) $  T * ( E+T )$  T * ( E )$  T * F $  T $  E $  L Pilha Entrada Ação #L #

54 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $  T * ( E + F ) $  T * ( E+T )$  T * ( E )$  T * F $  T $  E $  L Pilha Entrada Ação #L # aceitar

55 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $  F * ( ) $  T * ( ) $  T * ( F + 3 ) $  T * ( T + 3 ) $  T * ( E + 3 ) $  T * ( E + F ) $  T * ( E+T )$  T * ( E )$  T * F $  T $  E $  L Pilha Entrada Ação #L #

56 Análise da expressão 10 * (5 + 3)$
L  E $ E  E opad T | T T  T opmult F | F F  cte | ( E ) Análise da expressão 10 * (5 + 3)$ Além das ações de deslocar, reduzir e aceitar, há também a de tratar erro Pilha Entrada Ação #L #

57 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 * ( ) $

58 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 * ( ) $ Numa gramática não-ambígua, asa de uma forma sentencial é o lado direito da redução legal mais à esquerda Redução escolhida

59 Numa gramática não-ambígua, asa de uma forma sentencial é o lado direito da redução legal mais à esquerda Asa em Inglês é handle (termo usado nos livros) Numa tal gramática, a asa de uma forma sentencial é única Em gramáticas ambíguas, há formas sentenciais com mais de uma asa Então é necessário definir asa de modo mais abrangente

60 Asa de uma forma sentencial:
Uma de suas sub-cadeias que corresponde ao lado direito de uma produção tal que Sua redução para o não-terminal à esquerda dessa produção representa um passo de uma derivação mais à direita reversa Em gramáticas ambíguas, pode haver sentenças com mais de uma derivação mais à direita O grande problema é determinar qual(ais) a(s) asa(s) de uma forma sentencial, para poder fazer uma redução Nesta disciplina não serão abordadas gramáticas ambíguas

61 a b b c d e  a A b c d e  a A d e  a A B e  S
Exemplo: Asas da redução de abbcde a b b c d e  a A b c d e  a A d e  a A B e  S Exemplo: Asas da redução de 10 * ( ) $ 10 * ( ) $  F * ( ) $  T*( ) $  T * ( F+3 ) $  T * ( T+3 ) $  T * ( E+3 ) $  T *( E + F ) $  T * ( E+T )$  T * ( E )$  T * F $  T $  E $  L Análise por deslocamento e redução faz o corte das asas formadas no topo da pilha Sem ambiguidades, uma vez formada a asa no topo da pilha, ela deve ser cortada (reduzida) O problema é identificar asas no topo da pilha

62 Já que Pilha  Entrada é uma forma sentencial (derivada de S)
O conteúdo da pilha é chamado de prefixo dessa forma Prefixo viável de uma forma sentencial é um prefixo dessa forma que não vai além do final da asa mais à direita da mesma:  É um prefixo que pode aparecer na pilha de um analisador por deslocamento e redução

63 5 e E+T são as asas de suas respectivas formas
Para gramáticas não ambíguas, prefixo viável de uma forma sentencial é um prefixo dessa forma que não vai além do final de sua asa Exemplo: sejam as seguintes situações na pilha 5 e E+T são as asas de suas respectivas formas Os prefixos #T*(5+ e #T*(E+T) são inviáveis Deslocar o ‘+’ ou ‘)’ equivale a enterrar asas Pilha Entrada #T*(5 +3)$# Pilha Entrada #T*(E+T )$#

64 Para gramáticas não ambíguas, prefixo viável de uma forma sentencial é um prefixo dessa forma que não vai além do final de sua asa Um analisador por deslocamento e redução faz detecção de prefixos inviáveis em sua pilha Isso é fundamental para a decisão entre deslocar ou reduzir

65 5.5.2 – Gramáticas LR(k) e LR(1)
Gramáticas LR(k): admitem analisadores por deslocamento e redução que: Analisam as sentenças da esquerda para a direita (L - left) Produzem derivações mais à direita reversas (R - right) Precisam analisar no máximo, os próximos k símbolos, para decidir se vão reduzir ou deslocar e, se forem reduzir, que produção usar Gramáticas LR(1): gramáticas LR(k) em que k = 1

66 Comparação entre analisadores LL e LR:
Analisador LR(k): reconhece o lado direito de uma produção, depois de ter lido todo o trecho do programa derivado desse lado direito, analisando os próximos k terminais de entrada Analisador LL(k): reconhece o uso de uma produção para expandir um não-terminal, analisando os próximos k terminais de entrada, sem levar em consideração nada que já foi lido Analisadores LR utilizam mais informações da entrada que analisadores LL para tomar decisões; suas dúvidas e conflitos são menos numerosas Analisadores LR podem analisar mais gramáticas que LL

67 5.5.3 – Analisadores LR São analisadores sintáticos para gramáticas LR Métodos LR conseguem analisar GLC’s recursivas à esquerda Um analisador LR consegue detectar um erro sintático tão cedo quanto possível, numa análise da esquerda para a direita da sentença É grande o trabalho de construir um analisador LR manualmente É providencial poder contar com um gerador automático; a ferramenta Yacc é LR

68 Esquema de um analisador LR:

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

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

71 Tabela de ações: Ação[e, a] (a – átomo de entrada corrente
e – estado no topo da pilha) pode ser: Deslocar, e’ - e’ é um estado Reduzir, p - p é o número de uma produção A Aceitar Erro

72 Tabela de transições: Goto[e, A] (e – estado,
A – não-terminal) pode ser: Um outro estado Erro

73 Funcionamento do analisador: Se Ação [em, ai] = Deslocar, e: (e, ai) é empilhado (o autômato muda de estado) ai+1 passa a ser o átomo de entrada corrente

74 Funcionamento do analisador: Se Ação [em, ai] = Reduzir, p (p é A): r elementos da pilha são desempilhados (r – comprimento de ) (em-r, Xm-r) passa a ser o topo da pilha e  Goto [em-r, A] (e, A) é empilhado (o autômato muda de estado)

75 Funcionamento do analisador: Se Ação [em, ai] = Aceitar: encerra-se a análise Se Ação [em, ai] = Erro: chama tratamento de erro A saída pode ser a relação de produções usadas nas reduções

76 Algoritmo 5.8: Análise LR Empilhar (e0); w  sentença || $; p  &(w[0]); Repetir sempre{ e  estado do topo da pilha; a  *p; caso (Ação [e, a]) seja { Aceitar: retornar; Erro: TratarErro ( ); Deslocar, e’: { Empilhar (e’, a); Avançar (p); } Reduzir, p (p = A, r = comprimento()): { Imprimir (A); Desempilhar (r elementos); e  estado do topo da pilha; Empilhar (Goto [e, A], A); }

77 Exemplo: seja a seguinte gramática de expressões:
1) E  E + T 3) T  T * F 5) F  ( E ) 2) E  T 4) T  F 6) F  id Seja a seguinte sentença em análise: id * id + id Tabelas de ações e transições (construção apresentada a seguir):

78 Programa analisador LR
Estado inicial: Ação: d 5 Sentença de entrada id * + $ Programa analisador LR Saída Pilha

79 Programa analisador LR
Ação: r 6 Sentença de entrada F  id id * + $ Programa analisador LR id 5 Saída Pilha

80 Programa analisador LR
Sentença de entrada F  id id * + $ Programa analisador LR id 5 Saída Pilha

81 Programa analisador LR
Ação: r 4 Sentença de entrada F  id T  F F  id id * + $ Programa analisador LR F 3 Saída Pilha

82 Programa analisador LR
Ação: r 4 Sentença de entrada F  id T  F id * + $ Programa analisador LR F 3 Saída Pilha

83 Programa analisador LR
Ação: d 7 Não reduz segundo E  T Sentença de entrada F  id T  F id * + $ Programa analisador LR T 2 Saída Pilha

84 Programa analisador LR
Ação: d 5 Sentença de entrada F  id T  F id * + $ * 7 Programa analisador LR T 2 Saída Pilha

85 Programa analisador LR
Ação: r 6 Sentença de entrada F  id T  F F  id T  F id * + $ id 5 * 7 Programa analisador LR T 2 Saída Pilha

86 Programa analisador LR
Sentença de entrada F  id T  F id * + $ id 5 * 7 Programa analisador LR T 2 Saída Pilha

87 Programa analisador LR
Ação: r 3 Sentença de entrada F  id T  F T  T*F F  id T  F id * + $ F 10 * 7 Programa analisador LR T 2 Saída Pilha

88 Programa analisador LR
Sentença de entrada F  id T  F T  T*F id * + $ F 10 * 7 Programa analisador LR T 2 Saída Pilha

89 Programa analisador LR
Ação: r 2 Sentença de entrada F  id T  F T  T*F F  id T  F T  T*F E  T id * + $ Programa analisador LR T 2 Saída Pilha

90 Programa analisador LR
Sentença de entrada F  id T  F T  T*F E  T id * + $ Programa analisador LR T 2 Saída Pilha

91 Programa analisador LR
Ação: d 6 Sentença de entrada F  id T  F T  T*F E  T id * + $ Programa analisador LR E 1 Saída Pilha

92 Programa analisador LR
Ação: d 5 Sentença de entrada F  id T  F T  T*F E  T id * + $ + 6 Programa analisador LR E 1 Saída Pilha

93 Programa analisador LR
Ação: r 6 Sentença de entrada F  id T  F T  T*F E  T F  id T  F T  T*F E  T id * + $ id 5 + 6 Programa analisador LR E 1 Saída Pilha

94 Programa analisador LR
Sentença de entrada F  id T  F T  T*F E  T id * + $ id 5 + 6 Programa analisador LR E 1 Saída Pilha

95 Programa analisador LR
Ação: r 4 Sentença de entrada F  id T  F T  T*F E  T F  id T  F T  T*F E  T id * + $ F 3 + 6 Programa analisador LR E 1 Saída Pilha

96 Programa analisador LR
Sentença de entrada F  id T  F T  T*F E  T id * + $ F 3 + 6 Programa analisador LR E 1 Saída Pilha

97 Programa analisador LR
Ação: r 1 Sentença de entrada F  id T  F T  T*F E  T E  E+T F  id T  F T  T*F E  T id * + $ T 9 + 6 Programa analisador LR E 1 Saída Pilha

98 Programa analisador LR
Sentença de entrada F  id T  F T  T*F E  T E  E+T id * + $ T 9 + 6 Programa analisador LR E 1 Saída Pilha

99 Programa analisador LR
Ação: act Sentença de entrada F  id T  F T  T*F E  T E  E+T id * + $ Programa analisador LR E 1 Saída Pilha


Carregar ppt "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."

Apresentações semelhantes


Anúncios Google