Analisadores Bottom-Up
Introduziremos o estilo geral de anlise sinttica bottom-up, conhecido como anlise de empilhar e reduzir. Implementaes:
Anlise sinttica de precedncia de operadores Anlise LR (muito mais genrica)
A anlise gramatical de empilhar e reduzir tenta construir uma rvore gramatical para uma cadeia de entrada comeando pelas folhas e trabalhando rvore acima em direo raiz.
Ex: a sentena abbcde pode ser reduzida a S assim: S ::= aABe abbcde A ::= Abc | b aAbcde B ::= d aAde aABe S (raz)
Anlise LR
Analisadores LR podem ser construdos para reconhecer virtualmente todas as construes de ling. de programao sobre GLCs. O mtodo de decomposio LR o mais geral entre os mtodos sem retrocesso de empilhar e reduzir. A classe de gramticas que podem ser decompostas por mtodos LR um superconjunto das gramticas que podem ser decompostas por mtodos preditivos. Um analisador LR pode detectar um erro sinttico to cedo quanto possvel Desvantagem: muito trabalhoso construir um analisador LR manualmente, para uma gramtica tpica de ling. de prog.
Esquema de Analisador LR
Entrada a1 ... ai ... an $
Pilha
Analisador LR
Sada
Ao
Desvio
Tabela Sinttica
Anlise SLR
Existem 3 mtodos:
LR Simples (SLR): usa itens do tipo LR(0) Cannico: usa itens do tipo LR(1) LALR (lookahead LR) : usa itens do tipo LR(1) (otimizado)
Um item LR(0) uma produo com um ponto em alguma posio no lado direito. Por exemplo, A ::= XYZ possui 4 itens LR(0):
A A A A -> -> -> -> .XYZ X.YZ XY.Z XYZ.
A idia construir, a partir da gramtica, um AFD que reconhea prefixos viveis. Agrupamentos de itens LR(0) formam os estados do AFD. Agrupamentos por operaes de fechamento (Drago pg. 97).
2.
a. b.
c. d.
3.
Para A no-terminal, se desvio(Ii, A) = Ij (transio no AFD) ento desvio[Ii, A] = Ij (tabela) Todas as entradas no definidas por 2. e 3. so tornadas erro Estado inicial do analisador sinttico aquele que contm S ::= .S
4. 5.
I1
S ::= S. S ::= S.S+ S ::= S.S-------------S ::= .SS+ S ::= .SSS ::= .i S
S ::= SS+. +
I4
S ::= SS-. I3 S ::= SS.+ S ::= SS.S ::= S.S+ S ::= S.S-------------S ::= .SS+ S ::= .SSS ::= .i
I5
i i
S ::= i. I2
Ao + I0 I1 I2 I3 I4 I5 REDZ 4 EMP I4 REDZ 2 REDZ 3 REDZ 4 EMP I5 REDZ 2 REDZ 3 i EMP I2 EMP I2 REDZ 4 EMP I2 REDZ 2 REDZ 3 $ ACEITA REDZ 4 REDZ 2 REDZ 3 S -
Desvio S I1 I3 I3 -
OBS: REDZ x reduzir pela regra x da gramtica EMP Ij - empilhar o smbolo de entrada e o estado Ij (ser prximo estado)
Exerccio:
1.
2.
Realizar o processamento da entrada ii-i-i usando a gramtica do exemplo anterior (manter registro da pilha, dos smbolos consumidos da entrada e das aes executadas). Lembrando que:
EMP Ii : empilha o smbolo corrente seguido do prximo estado Ii REDZ [A ::= ]: desempilha 2| | smbolos, revelando o estado Ii. Empilha, em seguida, A seguido de Ij = desvio [Ii, A]