Академический Документы
Профессиональный Документы
Культура Документы
Anlisis Sintctico LR
Este tipo de anlisis se puede realizar mediante 3 tcnicas: LR(k): Leen la entrada de izquierda a derecha (Left to rigth). SLR(1): Mejora el LR(1) pero hace uso de la bsqueda hacia delante. LALR(1): Ms potente que SLR(1) y ms sencillo que LR(1).
Si x -> Y
1. 2. 3. 4. 5. 6.
S -> S {$} S -> A {$} S -> xb {$} A -> aAb {$} A -> B {$} B -> x {$}
Ahora hacemos los goto(Si, ), donde Si es el conjunto que vamos a crear y es el terminal o no terminal a donde vamos a movernos; copiando sus lookahead de la produccin padre.
(0)S S (1)S A (2)S xb (3)A aAb (4)A B (5)B x
Creando Goto
S1: Goto (So, S):
S -> S {$}
{b}
{$}
S1
S -> S {$} S
S3
S0
B
S -> S {$} S -> A {$} S -> xb {$} A -> aAb {$} A -> B {$} B -> x {$} x A
S5
S7
A -> a Ab {b} A -> aAb {b} A-> B {b} B -> x {b} a B S11 A -> aA b {b} A
S4 b
S13
A -> B {b}
S -> xb {$}
Ahora trataremos de unir todos los conjuntos que tengan elementos en comn y tambin uniendo sus lookahead. Con estos Conjuntos: S3 con S8 S5 con S7 Nota: al unir estos S6 con S11 conjuntos tenemos que unir tambin sus S10 con S12
transiciones.
Teniendo
S3={AB S8={AB {$}} {b}
Pasaremos a:
S3_8={AB {$,b}
S1
S -> S {$} S
S3_8
A -> B {b,$} S2 B
S10_12 b
S0
B
S -> S {$} S -> A {$} S -> xb {$} A -> aAb {$} A -> B {$} B -> x {$} x A
S -> A {$}
S5_7
S6_11
A
A -> a Ab {$,b} A -> aAb {b} A-> B {b} B -> x {b} x
A -> aA b {$, b}
S9
B -> x {b}
S4 b
Construccin de la Tabla de AS
1. Construir la coleccin de conjuntos de elementos. 2. Ui es el estado i. Las acciones se determinan:
1.
2.
3.
Si A -> a est en Ui e ir_a(Ui, a) = Uj entonces desplazar j en accin[i, a]. Si A -> est en Ui entonces reducir A -> en accin [i, a] para toda a en Look a head(A). Si S -> S est en Ui entonces aceptar en accin[i,$].
3. Si ir_a(Ui, A) = Uj, entonces ir_a(i, A) = j 4. Todas las entradas no definidas por 2 y 3 son error. 5. El estado inicial del analizador es el que contiene [S -> S]
Construccin de Tabla de AS
Terminales x b $ S S 1 Acepta r1 r4 d13 d5_7 d10_12 r5 r3 r3 r2 d9 r4 r5 6_11 A 2 B d5_7 d4
No terminales
3_8
3_8
Cuando encontramos un ri en la tabla, nos vamos al numero de produccin que lo produjo y reemplazamos la produccin por el no terminal.
Pila
0
Tabla LALR
(0,a)= S5_7 (5_7,a)= S5_7 (5_7,x)= S9 (9,b) = r5 -> B -> x (5_7,B) = 3_8
0a5_7a5_7 0a5_7 0a5_7a5_7x9 0a5_7a5_7B 0a5_7a5_7B3_8 0a5_7a5_7A 0a5_7a5_7A6_11 0a5_7A 0a5_7A6_11 0a5_7A6_11b10_12 0A 0A2 0S 0S1
Ver Tabla
0a5_7a5_7A6_11b10_12 b$
$ $
$ $
Cadena Aceptada
FIN