La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Análisis sintáctico (Look ahead LR). Este tipo de análisis se puede realizar mediante 3 técnicas: LR(k): Leen la entrada de izquierda a derecha (Left.

Presentaciones similares


Presentación del tema: "Análisis sintáctico (Look ahead LR). Este tipo de análisis se puede realizar mediante 3 técnicas: LR(k): Leen la entrada de izquierda a derecha (Left."— Transcripción de la presentación:

1 Análisis sintáctico (Look ahead LR)

2 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). Análisis Sintáctico LR

3 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. Análisis Sintáctico LALR Conceptos

4 SimboloFirst/Primero Si x es terminal F(x) ={x} Si x ->e Anadir e al F(x) X -> YZWAnadir F(U) al F(x) Análisis Sintáctico LALR Algoritmo SimboloFollow/Look a head Si x es simbolo inicialF(x) {$} Si x -> α YM1.F(Y) =F(M) 2.Si el F(M) contiene e entonces añadir el first(X) al F(Y) Si x -> α YAnadir el F(x) al F(Y) ENCONTRANDO FIRS Y FOLLOW

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

6 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). Análisis Sintáctico LALR Algoritmo

7 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 Análisis Sintáctico LALR Ejemplo

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

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

10 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 {$} Análisis Sintáctico LALR Ejemplo Tendremos en cuenta que cuando movemos el con un No terminal y este es el ultimo elemento este pasa a ser un kernel.

11 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} Análisis Sintáctico LALR Ejemplo

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

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

14 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={AB{$}} S8={AB {b} Pasaremos a: S3_8={AB{$,b} Y así con todos los demás.. Nota: al unir estos conjuntos tenemos que unir también sus transiciones.

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

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

17 abx$SSAB 0d5_7d4123_8 1Acepta 2r1 3_8r4 4d13r5 5_7d5_7d96_113_8 6_11d10_12 9r5 10_12r3 13r2 Construcción de Tabla de AS Terminales No terminales Estados Si Evaluar Cadena Los Goto son desplazar y los kernel son reducir

18 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. Evaluar una cadena de entrada. PilaEntradaTabla LALR 0aaxbb$ (0)S S$ (1)S A (2)S xb (3)A aAb (4)A B (5)B x (0,a) = S5_7 (5_7,a)= S5_7 axbb$ 0a5_7

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

20 Cadena Aceptada FIN


Descargar ppt "Análisis sintáctico (Look ahead LR). Este tipo de análisis se puede realizar mediante 3 técnicas: LR(k): Leen la entrada de izquierda a derecha (Left."

Presentaciones similares


Anuncios Google