Está en la página 1de 4

FACENS - Faculdade de Engenharia de Sorocaba

Tpicos em Computaao I o c

Anlise Sinttica LR(0) a a


Anlise Sinttica Descendente a a
LL Parsing: Left-to-right, Leftmost; Top-down Gramtica: no amb a a gua, sem recurso a esquerda a ` S TE E +T E | T num | (S) 1 + (2) S T E numE num + T E num + (S)E num + (T E )E num + (numE )E num + (num)
S

LR Parsing
anlise formada de operaoes shift e reduce a c shift move token da entrada para pilha pilha T+ T +( entrada (2) 2) ao ca shift shift

T num +

reduce troca dos s mbolos do topo da pilha pelo no terminal a X, da produo X ca


E

pilha 1 T

entrada +(2) +(2)

ao ca reduce T num shift

( T num

S E

estado = pilha de terminais e no terminais a entrada conjunto de terminais

A anlise descendente de uma sentena pode ser vista como a c uma tentativa de construir uma rvore de derivao em pr-ordem a ca e (da esquerda para a direita) para a sentena em questo: cria c a a raiz e, a seguir, cria as sub-rvores lhas, da esquerda para a a direita.

LR Parsing
Left-to-right, Rightmost-derivation Bottom-up (comea com tokens e termina com o estado inicial) c mais poderoso que LL 1 + (2) T + (2) T + (T ) T + (T ) T + (T E ) T + (S) T +T T +T T + TE TE S

O analisador redutivo empilha s mbolos na entrada at ter na e pilha uma seqncia de s ue mbolos que corresponde ` denio de a ca um no-terminal. A operao de reduo consiste em substia ca ca tuir na pilha, o lado direito de uma produo pelo seu lado esca querdo. A seqncia correta de reduoes levar ao s ue c a mbolo inicial da gramtica. Se coletarmos a seqencia de reduoes utilizados a u c na gerao da rvore de derivaoes e olharmos ao reverso, vereca a c mos que foi produzida uma derivao mais ` direita a partir do ca a s mbolo inicial.

S TE E +T E | T num | (S) 1 + (2)

Exemplo
0. 1. 2. 3. S S S S S S; S id := E print(L) 4. 5. 6. 7. E E E E id 8. L E num 9. L L, E E+E (S, E)

A anlise ascendente, tambm conhecida como redutiva ou a e bottom-up, de uma sentena pode ser vista como a tentativa de c construir uma rvore de derivao a partir das folhas, produzindo a ca uma derivao mais ` direita ao reverso. A denominao redutiva ca a ca refere-se ao processo que sofre a sentena de entrada, a qual c e reduzida ate ser atingido o s mbolo inicial da gramtica (raiz da a rvore de derivao). D-se o nome de reduo ` operao de a ca a ca a ca substituio do lado direito de uma produo pelo no-terminal ca ca a correspondente.

Utilize a gramtica acima para ilustrar a execuo a ca da anlise sinttica LR com a seguinte entrada: a a a := 7; b := c + (d := 5 + 6, d)

Profa. Tiemi Christine Sakata

FACENS - Faculdade de Engenharia de Sorocaba

Tpicos em Computaao I o c

Tabela LR (Appel, pag. 59)


id 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 r7 r7 r9 r7 s16 s20 s20 s10 s10 r4 r4 r4 s20 s10 r6 r6 s16 s8 s8 r4 s22 r7 r9 r7 r4 s4 s20 s10 r5 r2 s3 r3 r5 r2 s18 r3 s19 r8 s8 r6 r6 g21 g23 s13 r8 g17 r3 r5 s16 s7 s8 r5 r5 r2 s20 s10 r1 r1 s8 s9 g12 g15 g14 s4 s7 s6 r1 g11 s4 num print s7 s3 a g5 ; , + := ( ) $ S g2 E L

LR(0)
Left-to-right, Rightmost 0 no considera s a mbolos na leitura da entrada (olha s para a pilha) o aoes unicas para cada estado - shift ou reduce c boa introduo para LR(1) ca Estado conjunto de itens item regra de produo com um .do lado ca direito da regra. . indica o ponto atual da anlise a
A anlise LR(0) no muito poderosa em termos do nmero a a e u de gramticas para as quais tm sucesso, mas nos d uma boa a e a introduo de como construir a anlise LR(1). ca a Um item para uma gramtica G uma produo de G com um a e ca ponto em alguma de suas posioes no lado direito. Por exemplo, c a produo A XY Z produz os seguinte itens: ca A XY Z AX YZ A XY Z A XY Z Intuitivamente, um item indica quanto de uma produo j ca a examinamos a uma dada altura do processo de anlise sinttica. a a Por exemplo, o primeiro item acima indica que desejamos em seguida examinar uma cadeia na entrada, derivvel a partir de a XY Z. Para construir o analisador sinttico devemos construir um a AFD. Os estados do AFD so formados por itens. a

A operao de shift coloca no topo da pilha o s ca mbolo que est a sendo lido e avana o cabeote de leitura. A operao de reduce c c ca substitui todos os s mbolos do lado direito de uma produo pelo ca seu lado esquerdo. O analisador sinttico pode reconhecer toda a a sentena com uma operao de accept ou gerar um erro quando c ca ocorre um erro de sintaxe.

Shift-Reduce
Como saber quando utilizar shift ou reduce? utilizando autmatos nitos: o AFD utilizado para a pilha (AFD com pilha) arestas com s mbolos (terminais ou no terminais) a inicialmente, pilha apenas com $ Operaoes: c Shift(n) avana um token na entrada; empilha n c Reduce(k) k. X (reduo usando a regra k) ca desempilha , empilha X. Procure pelo goto a partir do ultimo estado e empilhe o valor do goto Accept / Error

LR(0) - Estados
S S$ S (L) Sx LS L L, S

Estado inicial: engloba a regra inicial e qualquer outra regra que possa comear pelo lado direito da regra inicial c
1 S S S . S$ .x . (L)

Shift: anlise de um token a


2 S x.

3 S L L S S (. L) . L, S .S . (L) .x

Sabemos que as operaoes utilizadas na anlise redutiva c a e composta basicamente por shift e reduce. Essas aoes indicam c quais elementos devemos desempilhar e empilhar na pilha. Porm e esse tipo de anlise tem o controle dirigido por uma tabela de a anlise. Essa tabela constru a partir de um autmato a e da o nito determin stico. As linhas da tabela indicam os estados do autmato, as colunas indicam os s o mbolos lidos. A partir de um estado e um s mbolo lido basta olhar na tabela para saber qual ao tomar. ca

O estado inicial do AFD constru a partir de todas as ree do gras de produo do s ca mbolo inicial. No exemplo do slide, temos S S$. Neste estado, a entrada deve iniciar com S, o que implica que pode iniciar com qualquer derivao de S. Chamamos ca o estado inicial de 1. Considerando um shift em x, o ponto passa para o lado direito de x. Ao efetuar um shift em (, a entrada deve iniciar com alguma cadeia derivvel a partir de L. Portanto, adicionamos as a produoes de L e de forma semelhante adicionamos as produoes c c de S para completar os itens do estado 3.

Profa. Tiemi Christine Sakata

FACENS - Faculdade de Engenharia de Sorocaba

Tpicos em Computaao I o c

LR(0) - Estados
S S$ S (L) Sx
1 S S S . S$ .x . (L)

Algoritmo para gerao de LR(0) ca


Initialize T to {Closure({S .S$})} Initialize E to empty repeat for each state I in T for each item A .X in I let J be Goto(I, X) T T {J}

LS L L, S

Goto: anlise de a um no terminal a


4 S S .$

Reduce: quando o topo da pilha corresponde ao lado direto de alguma regra de produo ca
2 S x.

E E {I J} until E and T did not change in this iteration Reduction: R{} for each state I in T for each item A . in I R R {(I, A )}

A ao goto ocorre quando analisamos um s ca mbolo noa terminal. Isto ocorre aps uma reduo de uma produo. Para o ca ca efetuarmos um goto basta passar o ponto do lado esquerdo de um no-terminal para o seu lado direito. a Quando o ponto est no m de um item, a regra foi analisada a por completo e a produo correspondente est pronta para uma ca a reduo (reduce). ca

O algoritmo acima utilizado para a construo do analisador e ca LR(0). Para o s mbolo $, no feito um goto, mas inserimos a e uma ao de accept, indicando m de anlise. ca a

Estados e DFA
S S$ S (L) Sx
1 x 2 S x S L L S S S L S. (. L) .S . L, S .x . (L) 7 S (L) . x. 3 (

LS L L, S
x 8 L S S L, . S . (L) .x S 9 L L, S .

Algoritmo para gerao de LR(0) ca


Seja I o conjunto de itens e X qualquer s mbolo da gramtica (terminal ou no) a a Closure adiciona itens ao conjunto quando o ponto est ao lado esquerdo de um a no terminal. a
Closure(I) = repeat for any item A .X in I for any production X I I {X .} until I does not change return I

S S S S

. S$ .x . (L) ( 4

,
L 5 S L ) 6 (L .) L . ,S

Goto move o ponto para depois do s mbolo X em todos os itens.


Goto(I, X) = set J to empty set for any item A .X in I add A X. to J return Closure(J)

S.$

A operao closure adiciona mais itens no conjunto de itens ca quando existe um ponto do lado esquerdo de um s mbolo noa terminal. A operao goto move o ponto para depois do s ca mbolo X em todos os itens.

Profa. Tiemi Christine Sakata

FACENS - Faculdade de Engenharia de Sorocaba

Tpicos em Computaao I o c

Tabela do LR(0)
Para toda aresta X I J Na linha I coluna X insira: shift J se X terminal e goto J se X no-terminal e a S S.$ insira accept A . insira reduce para todo token
Aps denirmos os estados da anlise LR(0) e seu AFD, o a e X poss construir a tabela LR(0). Para cada aresta I J do vel AFD, onde X um terminal, nos colocamos a ao shift J na e ca posio (I, X). Se X um no terminal, inserimos um goto ca e a na posio (I, X). Para cada estado I contendo um item com ca ponto antes do $, inserimos a ao accept na posio (I, $). Fica ca nalmente, para o estado contendo um ponto no nal da produo, ca inserimos um reduce na em todas as colunas de tokens da linha I. + s2 s2 s2 r3 r4 s2 s2 r1 r2 * s3 s3 s3 r3 r4 s3 s3 r1 r2 a s4 s4 s4 r3 r4 s4 s4 r1 r2 b s5 s5 s5 r3 r4 s5 s5 r1 r2 $ a g6 g7 r3 r4 g8 g9 r1 r2 E g1

Exerc cio
Construa a tabela LR(0) para a gramtica abaixo: a G = ({E}, {a, b, +, }, P, E) P = E a | b | + EE | EE

0 1 2 3 4 5 6 7 8 9

Tabela LR(0)
( 1 2 3 4 5 6 7 8 9 r1 r3 s3 r4 r4 s6 r1 r3 r1 r3 s2 r4 r4 r4 s8 r1 r3 r1 r3 g9 s3 r2 s3 r2 ) x s2 r2 s2 a r2 r2 g7 g5 , $ S g4 L

Profa. Tiemi Christine Sakata

También podría gustarte