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) 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 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 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 Risco: escolher reduções erradas e nunca chegar ao símbolo inicial S Exemplo:

3 Uma forma sentencial pode apresentar várias alternativas conflitantes para reduções: 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 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 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 Se a sub-cadeia é devidamente escolhida a cada redução, o resultado é uma completa derivação mais à direita reversa

5 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: 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: 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 S a A B e A A b c | b B d Sentença abbcde e sua redução total a S: 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: Três possíveis reduções da forma sentencial: a 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

7 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 PilhaEntrada a b b c d e

8 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 PilhaEntrada a b b c d e

9 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 PilhaEntrada a b b c d e Lado direito de uma produção: Reduzir

10 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 PilhaEntrada a A b c d e

11 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 PilhaEntrada a A b c d e Lado direito de uma produção: Não reduzir

12 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 PilhaEntrada a A b c d e Lado direito de uma produção: Reduzir

13 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 PilhaEntrada a A d e

14 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 PilhaEntrada a A d e Lado direito de uma produção: Reduzir

15 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 PilhaEntrada a A B e

16 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 PilhaEntrada a A B e Lado direito de uma produção: Reduzir

17 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 PilhaEntrada S Aceitar a cadeia de entrada

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

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

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

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

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

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

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

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

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

27 L E $E E opad T | T T T opmult F | FF cte | ( E ) Análise da expressão 10 * (5 + 3)$ Derivação mais à direita reversa: 10 * ( ) $ F * ( ) $ T * ( ) $ PilhaEntradaAção #T*(C 5 +3)$# +3)$#

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

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

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

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

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

33 L E $E E opad T | T T T opmult F | FF 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 ) $ PilhaEntradaAção #T*(E +3)$# +3)$#

34 L E $E E opad T | T T T opmult F | FF 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 ) $ PilhaEntradaAção #T*(E +3)$# +3)$# d d

35 L E $E E opad T | T T T opmult F | FF 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 ) $ PilhaEntradaAção #T*(E+C 3 )$# )$#

36 L E $E E opad T | T T T opmult F | FF 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 ) $ PilhaEntradaAção #T*(E+C 3 )$# )$# r: r: F C

37 L E $E E opad T | T T T opmult F | FF 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 ) $ PilhaEntradaAção #T*(E+F )$# )$#

38 L E $E E opad T | T T T opmult F | FF 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 ) $ PilhaEntradaAção #T*(E+F )$# )$# r: r: T F

39 L E $E E opad T | T T T opmult F | FF 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 )$PilhaEntradaAção #T*(E+T )$# )$#

40 L E $E E opad T | T T T opmult F | FF 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 )$PilhaEntradaAção #T*(E+T )$# )$# r: r: E E+T

41 L E $E E opad T | T T T opmult F | FF 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 * ( E+T )$ T * ( E )$PilhaEntradaAção #T*(E )$# )$#

42 L E $E E opad T | T T T opmult F | FF 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 * ( E+T )$ T * ( E )$PilhaEntradaAção #T*(E )$# )$#d

43 L E $E E opad T | T T T opmult F | FF 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 * ( E+T )$ T * ( E )$PilhaEntradaAção #T*(E) $# $#

44 L E $E E opad T | T T T opmult F | FF 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 * ( E+T )$ T * ( E )$PilhaEntradaAção #T*(E) $# $# r: r: F (E)

45 L E $E E opad T | T T T opmult F | FF 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+T )$ T * ( E )$ T * F $PilhaEntradaAção #T*F $# $#

46 L E $E E opad T | T T T opmult F | FF 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+T )$ T * ( E )$ T * F $PilhaEntradaAção #T*F $# $# r: r: T T*F

47 L E $E E opad T | T T T opmult F | FF 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 $ T * ( E+T )$ T * ( E )$ T * F $ T $PilhaEntradaAção #T $# $#

48 L E $E E opad T | T T T opmult F | FF 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 $ T * ( E+T )$ T * ( E )$ T * F $ T $PilhaEntradaAção #T $# $# r: r: E T

49 L E $E E opad T | T T T opmult F | FF 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 $ T * ( E+T )$ T * ( E )$ T * F $ T $ E $PilhaEntradaAção #E $# $#

50 L E $E E opad T | T T T opmult F | FF 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 $ T * ( E+T )$ T * ( E )$ T * F $ T $ E $PilhaEntradaAção #E $# $#d

51 L E $E E opad T | T T T opmult F | FF 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 $ T * ( E+T )$ T * ( E )$ T * F $ T $ E $PilhaEntradaAção #E$ #

52 L E $E E opad T | T T T opmult F | FF 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 $ T * ( E+T )$ T * ( E )$ T * F $ T $ E $PilhaEntradaAção #E$ # r: r: L E$

53 L E $E E opad T | T T T opmult F | FF 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 T * ( E+T )$ T * ( E )$ T * F $ T $ E $ LPilhaEntradaAção #L #

54 L E $E E opad T | T T T opmult F | FF 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 T * ( E+T )$ T * ( E )$ T * F $ T $ E $ LPilhaEntradaAção #L #aceitar

55 L E $E E opad T | T T T opmult F | FF 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 T * ( E+T )$ T * ( E )$ T * F $ T $ E $ LPilhaEntradaAção #L #

56 L E $E E opad T | T T T opmult F | FF 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 PilhaEntradaAçã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 10 * ( ) $

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 10 * ( ) $ 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 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) Asa em Inglês é handle (termo usado nos livros) Numa tal gramática, a asa de uma forma sentencial é única Numa tal gramática, a asa de uma forma sentencial é única Em gramáticas ambíguas, há formas sentenciais com mais de uma asa Em gramáticas ambíguas, há formas sentenciais com mais de uma asa Então é necessário definir asa de modo mais abrangente Então é necessário definir asa de modo mais abrangente

60 Asa de uma forma sentencial: Asa de uma forma sentencial: Uma de suas sub-cadeias que corresponde ao lado direito de uma produção tal que 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 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 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 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 Nesta disciplina não serão abordadas gramáticas ambíguas

61 Exemplo: Asas da redução de abbcde 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 * ( ) $ 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 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) 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) Já que Pilha Entrada é uma forma sentencial (derivada de S) O conteúdo da pilha é chamado de prefixo dessa forma 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: 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 É um prefixo que pode aparecer na pilha de um analisador por deslocamento e redução

63 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 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 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 PilhaEntrada #T*(5 +3)$#PilhaEntrada #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 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 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 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: Gramáticas LR(k): admitem analisadores por deslocamento e redução que: Analisam as sentenças da esquerda para a direita (L - left) Analisam as sentenças da esquerda para a direita (L - left) Produzem derivações mais à direita reversas (R - right) 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 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 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 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 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 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 Analisadores LR podem analisar mais gramáticas que LL

67 5.5.3 – Analisadores LR São analisadores sintáticos para gramáticas LR São analisadores sintáticos para gramáticas LR Métodos LR conseguem analisar GLCs recursivas à esquerda Métodos LR conseguem analisar GLCs 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 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 É grande o trabalho de construir um analisador LR manualmente É providencial poder contar com um gerador automático; a ferramenta Yacc é LR É 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 Deslocar, e - e é um estado Reduzir, p- p é o número de uma produção A Reduzir, p- p é o número de uma produção A Aceitar Aceitar Erro Erro

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

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

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

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

76 Algoritmo 5.8: Análise LR Empilhar (e 0 ); 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 * F5) F ( E ) 2) E T 4) T F 6) F id Seja a seguinte sentença em análise: id * id + id Seja a seguinte sentença em análise: id * id + id Tabelas de ações e transições (construção apresentada a seguir) : Tabelas de ações e transições (construção apresentada a seguir) :

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

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

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

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

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

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

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

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

86 Programa analisador LR id* + $ Sentença de entrada 0 Pilha Saída F id T F F id T2*7id5

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

88 Programa analisador LR id* + $ Sentença de entrada 0 Pilha Saída F id T F F id T T*F T2*7F10

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

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

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

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

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

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

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

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

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

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

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


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