1 / 20

Método LALR

Método LALR. Análisis sintáctico (Look ahead LR). 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.

jaguar
Download Presentation

Método LALR

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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 LALRConceptos • Significa «lookahead LR« • Estaté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 lookaheadde cada conjunto.

  4. Análisis Sintáctico LALRAlgoritmo ENCONTRANDO FIRS Y FOLLOW

  5. Análisis Sintáctico LALRAlgoritmo 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 LALRAlgoritmo 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 LALREjemplo 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$ (1)S → A (2)S → xb (3)A → aAb (4)A → B (5)B → x

  8. Análisis Sintáctico LALREjemplo • 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 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. S4: Goto (So, x) S1: Goto (So, S): • • {$} • • • • S2: Goto (So, A) • • {$} S5: Goto(So, a) S3: Goto (So, B) • • • • {$}

  10. Análisis Sintáctico LALREjemplo 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 LALREjemplo 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 -> •aAb {b} A -> •B {b} B -> •x {b}

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

  13. S10 A -> aAb• {$} S3 S1 A -> B• {$} S’ -> S• {$} b S6 A -> aA •b {$} S2 S -> A• {$} S A -> a•Ab {b} A -> •aAb {b} A-> •B {b} B -> •x {b} B S7 A S0 S5 A -> a•Ab {$} A -> •aAb {b} A-> •B {b} B -> •x {b} S’ -> •S {$} S -> •A {$} S -> •xb {$} A -> •aAb {$} A -> •B {$} B -> •x {$} 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. Nota: al unir estos conjuntos tenemos que unir también sus transiciones. 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..

  15. S10_12 A -> aAb• {$,b} S3_8 S1 A -> B• {b,$} S’ -> S• {$} b B S2 S6_11 S S -> A• {$} A -> aA •b {$, b} B A S0 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 Terminales Estados Si 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,a) = S5_7 (5_7,a)= axbb$ S5_7 0a5_7

  19. aaxbb$ (0,a)= S5_7 axbb$ 0a5_7a5_7 (5_7,a)= S5_7 0a5_7 Ver Tabla (5_7,x)= S9 xbb%$ bb$ 0a5_7a5_7x9 (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 (5_7,A)= 6_11 bb$ 0a5_7a5_7A bb$ 0a5_7a5_7A6_11 (6_11,b) =S10_12 b$ 0a5_7a5_7A6_11b10_12 (10_12,b)=r3 -> A -> aAb 0a5_7A (5_7, A)= 6_11 b$ (6_11,b)=S10_12 0a5_7A6_11 b$ 0a5_7A6_11b10_12 $ (10_12,$)=r3-> A->aAb (0,A)=2 0A $ 0A2 $ (2,$)=r1 -> S->A $ 0S (0,S)=1 0S1 $ (1,$)= ACEPTADA *Si la casilla esta vacia es error

  20. Cadena Aceptada FIN

More Related