Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouKauane Avelar Alterado mais de 10 anos atrás
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.