La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Análisis sintáctico (Look ahead LR)

Presentaciones similares


Presentación del tema: "Análisis sintáctico (Look ahead LR)"— Transcripción de la presentación:

1 Análisis sintáctico (Look ahead LR)
Método LALR Análisis sintáctico (Look ahead LR)

2 Análisis Sintáctico LR
Este tipo de análisis se puede realizar mediante 3 técnicas: LR(k): Leen la entrada de izquierda a derecha (Left to rigth). SLR(1): Mejora el LR(1) pero hace uso de la búsqueda hacia delante. LALR(1): Más potente que SLR(1) y más sencillo que LR(1).

3 Análisis Sintáctico LALR Conceptos
Significa «lookahead LR« Esta técnica generalmente se usa en la practica. Este es un análisis sintáctico de búsqueda hacia adelante. Esta técnica es mas larga de realizar, pero también es la mas efectiva. Es una técnica intermedia entre SLR(1) y LR(k). Aquí básicamente lo que se hace la unión de los conjuntos de elementos que tengan elementos comunes en sus goto(Ui, α), y que únicamente varíe la parte del lookahead de cada conjunto.

4 Análisis Sintáctico LALR Algoritmo
ENCONTRANDO FIRS Y FOLLOW Simbolo First/Primero Si x es terminal F(x) ={x} Si x ->e Anadir e al F(x) X -> YZW Anadir F(U) al F(x) Simbolo Follow/Look a head Si x es simbolo inicial F(x) {$} Si x -> αYM F(Y) =F(M) Si el F(M) contiene e entonces añadir el first(X) al F(Y) Si x -> αY Anadir el F(x) al F(Y)

5 Análisis Sintáctico LALR Algoritmo
Por ejemplo si tenemos dos conjuntos Ui y Uj Podemos hacer la unión de sus lookahead , creando así un conjunto Uij, así: Ui = X->Y ·Z {a} Uj = X->Y ·Z {b} Ui = X->Y ·Z {a} Uij = X->Y ·Z {a,b} Uj = X->Y ·Z {b}

6 Análisis Sintáctico LALR Algoritmo
Entrada: Gramática aumentada G’ Método: Construir la colección de conjuntos de elementos LR(1). Para cada conjunto en LR(1), encontrar todos los conjuntos con los mismos elementos y sustituir todos por su unión de lookahead. Construir las acciones de análisis sintáctico para cada nuevo estado (acción e ir_a iguales que el algoritmo de LR Canónico).

7 Análisis Sintáctico LALR Ejemplo
Construiremos las transiciones de la siguiente gramática: (1)S → A (2)S → xb (3)A → aAb (4)A → B (5)B → x • Necesitaremos aumentarla, asi: (0)S’ → S$

8 Análisis Sintáctico LALR Ejemplo
Haciendo las transiciones (siguiendo la plantilla del método LR) , hacemos los goto de nuestros conjuntos: Para empezar nuestro So: Lookahead S’ -> •S {$} S -> •A {$} S -> • xb {$} A -> • aAb {$} A -> •B {$} B -> •x {$}

9 Creando Goto S1: Goto (So, S): S4: Goto (So, x) S’ -> S • • {$}
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 producción padre. S1: Goto (So, S): S4: Goto (So, x) (0)S’ →• S (1)S → •A (2)S → •xb (3)A → •aAb (4)A →• B (5)B → •x S’ -> S {$} S -> x b {$} A -> x {$} S2: Goto (So, A) S’ -> A {$} S5: Goto(So, a) S5:Goto(S0, a) A -> a Ab {$} A -> •aAb {$} A -> •B {$} B -> •x {$} S3: Goto (So, B) A’ -> B {$}

10 Análisis Sintáctico LALR Ejemplo
S1:Goto(S0,S) S4:Goto (S0, x) S’ -> S • {$} S -> x •b {$} A -> x • {$} S2:Goto(S0, A) S5:Goto(S0, a) S -> A • {$} A -> a •Ab {$} A -> •aAb {$} S3:Goto (S0, B) A -> •B {$} A -> B • {$} A -> •x {$} Tendremos en cuenta que cuando movemos el • con un No terminal y este es el ultimo elemento este pasa a ser un kernel.

11 Análisis Sintáctico LALR Ejemplo
S13:Goto (S4,b) S -> xb • {$} S6:Goto (S5,A): S8:Goto (S5,B)(Goto S7,B) A -> a •Ab {$} A -> B • {$} A -> •aAb {b} A-> •B {b} S9:Goto (S5,x) Goto(S7,x): B -> •x {b} B -> x • {$} S7:Goto (S5,a) Goto(S7,a): A -> a •Ab {b} A -> •B {b} B -> •x {b}

12 Análisis Sintáctico LALR Ejemplo
S10:Goto (S6,b) S -> xb • {$} S11:Goto (S7,A) S -> aA•b {b} S12:Goto (S11,b) S -> aAb• {$}

13 S10 A -> aAb • {$} S1 S3 A -> B • {$} S’ -> S • {$} S6 b A -> aA •b {$} S2 S -> A • {$} S B S7 A -> a •Ab {b} A -> •aAb {b} A-> •B {b} B -> •x {b} A S0 S5 S’ -> •S {$} S -> •A {$} S -> •xb {$} A -> •aAb {$} A -> •B {$} B -> •x {$} A -> a •Ab {$} A -> •aAb {b} A-> •B {b} B -> •x {b} A A a x a S9 x B S11 B -> x • {b} a A -> aA• b {b} B S8 b x A -> B • {b} S12 S4 S13 A -> aAb• {b} S -> x•b {$} B -> x • {$} b S -> xb • {$}

14 Y así con todos los demás..
Ahora trataremos de unir todos los conjuntos que tengan elementos en común y también uniendo sus lookahead. Con estos Conjuntos: S3 con S8 S5 con S7 S6 con S11 S10 con S12 Teniendo S3={A→B• {$}} S8={A→B• {b} Pasaremos a: S3_8={A→B• {$,b} Y así con todos los demás.. Nota: al unir estos conjuntos tenemos que unir también sus transiciones.

15 S10_12 A -> aAb • {$,b} S1 S3_8 A -> B • {b,$} S’ -> S • {$} b B S2 S6_11 S S -> A • {$} A -> aA •b {$, b} B S0 A S’ -> •S {$} S -> •A {$} S -> •xb {$} A -> •aAb {$} A -> •B {$} B -> •x {$} A S5_7 A -> a •Ab {$,b} A -> •aAb {b} A-> •B {b} B -> •x {b} a a S9 x B -> x • {b} x S4 S13 S -> x•b {$} B -> x • {$} b S -> xb • {$}

16 Construcción de la Tabla de AS
1. Construir la colección de conjuntos de elementos. 2. Ui es el estado i. Las acciones se determinan: Si A -> α · aβ está en Ui e ir_a(Ui, a) = Uj entonces “desplazar j” en acción[i, a]. Si A -> α · está en Ui entonces “reducir A -> α” en acción [i, a] para toda a en Look a head(A). Si S´ -> S · está en Ui entonces “aceptar” en acción[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]

17 Construcción de Tabla de AS
Evaluar Cadena No terminales Estados Si Terminales a b x $ S’ S A B d5_7 d4 1 2 3_8 Acepta r1 r4 4 d13 r5 5_7 d9 6_11 d10_12 9 10_12 r3 13 r2 Los Goto son desplazar y los kernel son reducir

18 Evaluar una cadena de entrada.
Cadena de entrada: aaxbb Para iniciar en nuestra pila tenemos 0 y a la par tenemos nuestra cadena de entrada. Vamos evaluando (0,a)=S5_7, movemos a la pila a, seguido de 5_7 Cuando encontramos un ri en la tabla, nos vamos al numero de producción que lo produjo y reemplazamos la producción por el no terminal. (0)S’ → S$ (1)S → A (2)S → xb (3)A → aAb (4)A → B (5)B → x Pila Entrada Tabla LALR aaxbb$ (0,a) = S5_7 0a5_7 axbb$ (5_7,a)= S5_7

19 *Si la casilla esta vacia es error
Pila Entrada Tabla LALR aaxbb$ (0,a)= S5_7 0a5_7a5_7 axbb$ (5_7,a)= S5_7 0a5_7 xbb%$ (5_7,x)= S9 Ver Tabla 0a5_7a5_7x9 bb$ (9,b) = r5 -> B -> x bb$ 0a5_7a5_7B (5_7,B) = 3_8 0a5_7a5_7B3_8 bb$ (3_8,b) = r4 -> A -> B 0a5_7a5_7A bb$ (5_7,A)= 6_11 0a5_7a5_7A6_11 bb$ (6_11,b) =S10_12 (0)S’ → S$ (1)S → A (2)S → xb (3)A → aAb (4)A → B (5)B → x b$ 0a5_7a5_7A6_11b10_12 (10_12,b)=r3 -> A -> aAb 0a5_7A b$ (5_7, A)= 6_11 (6_11,b)=S10_12 0a5_7A6_11 b$ 0a5_7A6_11b10_12 $ (10_12,$)=r3-> A->aAb 0A (0,A)=2 $ 0A2 $ (2,$)=r1 -> S->A 0S $ (0,S)=1 0S1 $ (1,$)= ACEPTADA *Si la casilla esta vacia es error

20 Cadena Aceptada FIN


Descargar ppt "Análisis sintáctico (Look ahead LR)"

Presentaciones similares


Anuncios Google