Recursividad: ejercicios Obt Obtener las l gramáticas áti que producen: d Procesadores de lenguaje Ejercicios de análisis sintáctico Salvador Sánchez Sánchez, Daniel Rodríguez Departamento de Ciencias de la Computación Universidad de Alcalá 1. 1 2. 3. 4. 5. 6 6. 7. 8. U o más Una á aes con recursividad i id d por lla iizquierda i d ((r.i) i) Cero o más aes (r.i) Una o más aes con recursividad por la derecha (r.d) Cero o más aes (r.d) Una b y cero o más aes (r.i) Cero o más aes terminando en b (r (r.d) d) Cero o más aes separadas por ‘;’ (r.d) Una o más aes separadas por ‘;’ (r.i) Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Soluciones Analizador descendente recursivo 1. A->Aa 1 A A |a 2. A->Aa | ε 3. A->aA | a 4. A->aA | ε 5. A->Aa | b 6. A->aA | b 7. A->aB | ε B->;aB | ε 8. A->A;a | a • Ejemplos: Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez 1. Mostrar las acciones de un analizador descendente recursivo que analiza la cadena “aaab” según la gramática: A ÆaA | b 2. Para la gramática anterior, analizar la cadena “abaab”. 3. Mostrar las acciones de un analizador descendente recursivo que analiza la cadena “aba” según la gramática: A Æab | aA 4. Mostrar las acciones de un analizador descendente recursivo para la cadena de entrada “IDENT()” según la gramática: S t Sentencia i Æ Asignación A i ió | Llamada Ll d | otro t Asignación Æ Identificador := Valor LlamadaÆ Identificador () Analizador LL(1) – Conjunto primero Analizador LL(1) - Conjunto primero 1.Calcular 1 C l l ell conjunto j t Primero Pi d A para lla gramática de áti siguiente: 1 C j t Primero 1.Conjunto Pi d A para lla gramática de áti siguiente: i i t AÆ (A)A | ε AÆ (A)A | ε SOLUCIÓN: Primero(A) = { ( , є } 2.Calcular el conjunto Primero de los no terminales A, B y C para la gramática siguiente: 2.Conjunto Primero de los no terminales A, B y C: AÆ BC BÆ ε | m CÆ ε | s AÆ BC BÆ ε | m CÆ ε | s SOLUCIÓN: Primero(A) = {m, s, є}, Primero(B) = {m, є}, Primero(C) = {s, ε} Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Analizador LL(1) - Conjunto siguiente • Ejemplo Ej l 1: 1 S Æ aBCd BCd B Æ bb C Æ cc • Ejemplo 2: S Æ aBCd B Æ bB | d C Æ cc • Ejemplo Ej l 3: 3 S Æ aBCd BCd B Æ CB | b C Æ cc | ε • Ejemplo 4: S Æ if B then S | write B | id := B B Æ id = id | id <> id | true | false Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Analizador LL(1) - Conjunto siguiente 1. Solución: Prim(S)={a}, Prim(B)={b}, Prim(C)={c} Sig(S)={$}, Sig(B)={c}, Sig(C)={d} 2. Solución: Prim(S)={a}, Prim(B)={b,d}, Prim(C)={c} Sig(S)={$}, Sig(B)={c}, Sig(C)={d} 3. Solución: Prim(S)={a}, Prim(B)={b,c}, Prim(C)={c, ε} Sig(S)={$}, Sig(B)={c,d} Sig(C)={b,c,d} 4. Solución: Prim(S)={if, write, id}, Prim(B)={id, true, false} Sig(S)={$}, Sig(B)={then, $} Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Analizador LL(1) - Análisis Solución 1. Comprobar si la siguiente gramática es LL(1) y construir la tabla, calculando todos los conjuntos Siguiente y Primero. Pasos para ver si es LL(1): 1.-- No es recursiva a izquierdas 1 izquierdas. 2.- B→ b | є 2.1. Prim(b) ∩ Prim(ε) = vacío 2 2 Si ε ∈ Prim(ε) => 2.2. > Prim(b) ∩ Sig(B) = vacío S → cA A → aB B→b|ε Conjuntos j primero: p Prim(S)={c} 2. Reconocer la cadena “cab” con el analizador construido. Prim(A)={a} Prim(B)={b, ε} Conjuntos siguiente: Sig(S)={$} Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Sig(A)=Sig(S)={$} Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Solución Solución Tabla de análisis: Reconocer la cadena “cab” c S A a b $ S → cA A A → aB B Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Sig(B)=Sig(A)={$} B→b B→ε cab$ $S $Ac $A $Ba $B $b $ Reconocimiento A→aB Reconocimiento B→b Reconocimiento éxito Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez cab$ ab$ ab$ b$ b$ $ Analizador LL(1) - Análisis 1 C 1. Comprobar b sii la l siguiente i i t gramática áti es LL(1) y construir t i la l tabla de análisis y todos los conjuntos Siguiente y Primero. E Æ TE’ E’ Æ +TE’ | є T Æ FT FT’ T’ Æ *FT’ | є F Æ (E) | id Solución Prim (E) = { ((, id } Prim (E’) = { +, є } Prim (T) = { (, id } Prim (T’) = { *, є } Prim (F) = { (, id } Sig (E) = { $, Si $ )} Sig (E’) = { $, ) } Sig (T) = {+ {+, $ $, )} Sig (T’) = { +, $, )} g ((F)) = {{*,+, $, )} Sig 2. Reconocer la cadena “(3+5*8)” con el analizador construido. Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Solución Reconocimiento de la cadena: (3+5*8) Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Analizador LL(1) - Análisis 1 A partir 1. ti d de la l siguiente i i t gramática, áti construir t i la l tabla t bl de d análisis áli i y todos los conjuntos Siguiente y Primero. B -> DL D -> id ; D | є L -> >S;L|є S -> a + a 2. Reconocer la cadena “id;a+a;” con el analizador construido. Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Analizador LL(1) - Análisis Prim(B) P i (B) = { id id, a, ε } Prim(D) = { id, є } Prim(L) = { a a, є } Prim(S) = { a } Analizador LL(1) - Análisis Pila Sig(B) S ( )={$} Sig(D) = { a, $ } Sig(L) = { $ } Sig(S) = { ; } Reconocer: id;a+a; Decisión Entrada $B BÆDL $LD DÆid;D id;a+a;$ $LD;id Reconocer id id;a+a;$ $LD; Reconocer ; ;a+a;$ $LD $L id;a+a;$ DÆє a+a;$ LÆS;L a+a;$ $ id ; a + $L;S SÆa+a a+a;$ B BÆDL BÆDL - BÆDL - $L;a+a Reconocer a a+a;$ D DÆє DÆid;D - DÆ є - $L;a+ Reconocer + +a;$ L LÆє - - ; LÆS;L - $L;a Reconocer a a;$ S - - - SÆa+a - $L; Reconocer ; ;$ $L LÆє $ $ EXITO $ Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Analizador LR(0) - Análisis Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Analizador LR(0) - Análisis S1 E’ Æ E. E 1 A partir 1. ti d de la l siguiente i i t gramática, áti construir t i ell autómata tó t finito fi it determinista y la tabla de análisis para el analizador LR(0). S0 E’Æ.E E Æ.(E+T) Æ (E T) EÆ .id E Æ (E + T) | id T Æ (T * F) | id F Æ id E S2 ( id id S3 ( E Æ (.E+T) E Æ .(E+T) (E+T) E Æ .id E Æ (E.+T) (E +T) E S13 + E Æ id. id S4 S8 T Æ (T.*F) 2 Reconocer la cadena “(6+(4*2))” 2. (6+(4 2)) . * T F Æ id. Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez id T T Æ (.T*F) T Æ .(T*F) T Æ .id T Æ (T*.F) FÆ.id S12 ( S6 S9 E Æ (E+.T) T Æ .(T*F) T Æ .id id ( S14 id F S10 T Æ (T*F.) ) T Æ id. S11 T Æ(T*F). Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez S5 E Æ (E+T.) ) S7 E Æ (E+T). Analizador LR(0) - Análisis Analizador LR(0) - Análisis Pila Entrada Estado Acción 0 1 Desplazamiento 2 3 Desplazamiento Desplazamiento 4 Desplazamiento 5 Desplazamiento 6 Desplazamiento 7 8 Desplazamiento esp a a e to Regla Reducción id E 2 ) * + 13 1 2 13 3 T F E’ÆE 14 5 7 6 14 8 9 12 Desplazamiento 10 11 11 12 Reducción TÆ (T*F) Reducción F Æ id 13 Reducción E Æ id 14 Reducción T Æ id $0 $0(2 Entrada (6+(4*2))$ Desplazar 6+(4*2))$ +(4*2))$ ( ))$ Ir_a 3 +(4*2))$ $0(2E3 Desplazar +(4*2))$ $0(2E3+4 Desplazar (4*2))$ $0(2E3+4(6 Desplazar 4*2))$ Reducir TÆid *2))$ $0(2E3+4(6T Ir_a 8 *2))$ $0(2E3+4(6T8 Desplazar *2))$ $0(2E3+4(6T8*9 $0(2E3+4(6T8*9212 $0(2E3+4(6T8*9F $0(2E3+4(6T8*9F10 $0(2E3+4(6T8*9F10)11 Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Decisión Desplazar Reducir EÆid $0(2613 $ ( $0(2E3+4(6414 EÆ(E+T) Desplazamiento Reconocer: (6+(4*2)) $0(2E 4 6 Reducción 9 10 ( Ir_a Desplazar ))$ Reducir FÆid ))$ Ir_a 10 ))$ Desplazar ))$ Reducir TÆ(T*F) )$ Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Analizador LR(0) - Análisis Analizador LR(0) - Análisis 1 A partir 1. ti d de la l siguiente i i t gramática, áti construir t i ell autómata tó t finito fi it determinista y la tabla de análisis para el analizador LR(0). Reconocer: (6+(4*2)) Pila ... $0(2E3+4T $0(2E3+4T5 $0(2E3+4T5)7 Decisión Entrada ... ... SÆ (S)S|ε Ir_a 5 )$ Desplazar )$ Reducir EÆ(E+T) ( ) $ Ir_a 1 $ $0E1 Reducir E’ÆE $ $0E' EXITO $ $0E Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez 2. Reconocer la cadena “(())()”. Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Analizador LR(0) - Análisis Analizador LR(0) - Análisis Conflictos: S0: Desplazamiento-reducción S2: Desplazamiento-reducción S4: Desplazamiento Desplazamiento-reducción reducción E t d Entrada Acción Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Analizador LR(0) - Análisis 1 A partir 1. ti d de la l siguiente i i t gramática, áti construir t i ell autómata tó t finito fi it determinista y la tabla de análisis para el analizador SLR(1). E Æ (E + T) | id T Æ (T * F) | id F Æ id 2 Reconocer la cadena “(6+(4*2))” 2. (6+(4 2)) . ( 2 1 2 3 Desplazar / Reducir SÆЄ 1 Reducir S’ÆS 2 Desplazar / Reducir SÆ Є 3 Desplazar 4 Desplazar / Reducir 5 Reducir SÆ Є SÆ(S)S Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Analizador SLR(1) - Análisis E’Æ EÆ TÆ FÆ E (E + T) | id (T * F) | id id b) Conjuntos Siguiente: Sig (E’) = { $ } Sig (E) = { + , $ } Sig (T) = { * , ) } Sig (F) = { ) } Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Regla 0 a)) Ampliar A li lla gramática: áti Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez I a Ir ) 4 2 5 Analizador SLR(1) - Análisis Analizador SLR(1) - Análisis S1 c)) Autómata: A tó t d) Tabla T bl análisis: áli i E’ Æ E. E S0 E’Æ.E E Æ.(E+T) EÆ .id S2 id id S3 ( E Æ (.E+T) E Æ .(E+T) E Æ .id ( E Æ (E.+T) E S13 S4 S8 * T T Æ (T*.F) FÆ.id S12 id ( F S10 T Æ (T*F.) ) S5 E Æ (E+T.) S14 ) T Æ id. id S7 E Æ (E+T). S11 T Æ(T*F). + id E D: 13 1 D: 13 3 T F Aceptar D: 2 4 D: 6 D: 4 D: 14 5 D: 14 8 D: 7 D: 6 R: EÆ(E+T) R:EÆ(E+T) D: 9 9 10 D: 12 10 D: 11 11 12 13 * D: 2 2 3 7 8 ) R:TÆ (T*F) R:TÆ (T*F) R: F Æ id R: E Æ id R: EÆ id R: T Æ id R: T Æ id Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Analizador SLR(1) - Análisis Pila ( 14 Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez e) Reconocer (6+(4*2)) $ 5 6 T id id F Æ id. E Æ (E+.T) T Æ .(T*F) T Æ .id ( S6 T Æ (.T*F) T Æ .(T*F) T Æ .id S9 0 1 + E Æ id. T Æ (T.*F) Ir_a Estado Decisión Analizador SLR(1) - Análisis Entrada $0 D:2 (6+(4*2))$ $0(2 D:13 6+(4*2))$ e) Reconocer (6+(4*2)): R: EÆid +(4*2))$ ( ))$ Ir_a 3 +(4*2))$ $0(2E3 D:4 +(4*2))$ Pila Decisión Entrada $0(2E3+4 D:6 (4*2))$ ... ... ... $0(2E3+4(6 D:14 4*2))$ $0(2613 $ ( $0(2E $0(2E3+4T R: TÆid *2))$ $0(2E3+4T5 $0(2E3+4(6T Ir_a 8 *2))$ $0(2E3+4T5)7 $0(2E3+4(6T8 D:9 *2))$ $0E $0(2E3+4(6414 D:12 ))$ $0(2E3+4(6T8*9212 R: FÆid ))$ $0(2E3+4(6T8*9F Ir_a 10 ))$ D:11 ))$ $0(2E3+4(6T8*9 $0(2E3+4(6T8*9F10 $0(2E3+4(6T8*9F10)11 Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez R: TÆ(T*F) $0E1 Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez )$ D:7 )$ R: EÆ(E+T) ( ) $ Ir_a 1 $ Aceptar $ EXITO )$ Ir_a 5 Analizador SLR(1) - Análisis Análisis sintáctico SLR(1) 1 A partir 1. ti d de la l siguiente i i t gramática, áti construir t i ell autómata tó t finito fi it determinista y la tabla de análisis para el analizador SLR(1). A tó t Autómata: S Æ (S) S | ε 2 Reconocer la cadena “(( ( ) )( )” 2. ) . Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Análisis sintáctico SLR(1) Analizador SLR(1) - Análisis • Tabla: T bl • Reconocer Siguiente(S’) = { $ } g ( )={),$} Siguiente(S) (())() Pila (())()$ $0(2 D:2 ())()$ $0(2(2S 0 ( ) $ S D-2 R: SÆЄ R: SÆЄ 1 1 2 Aceptar D-2 3 4 5 R: SÆЄ R: SÆЄ D-4 D-2 R: SÆЄ R: SÆЄ R: SÆ(S)S R: SÆ(S)S $0(2(2S3 $0(2(2S3)4 $0(2(2S3)4S 5 ))()$ Ir_a 3 ))()$ D: 4 ))()$ R: SÆЄ )()$ Ir_a 5 )()$ )()$ Ir_a 3 )()$ $0(2S3 D: 4 )()$ $0(2S3)4 D:2 ()$ $0(2S3)4(2 $0(2S3)4(2S $0(2S3)4(2S3 $0(2S3)4(2S3)4 Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez R: SÆЄ R: SÆ(S)S $0(2(2S3)4S5 $0(2S 3 Entrada D:2 $0(2(2 $ ( ( Ir a Decisión $0 Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez R: SÆЄ )$ Ir_a 3 )$ D: 4 )$ R: SÆЄ $ Analizador SLR(1) - Análisis Análisis SLR(1) E -> E OR E | E AND E | (E) |0 |1 e) Reconocer (())() Pila Decisión Entrada ... ... ... $0(2S3)4(2S3)4 $ ( ) ( ) R: SÆЄ $ Ir_a 5 $ R: SÆ(S)S $ $0(2S3)4(2S3)4S $0(2S3)4(2S3)4S5 Ir_a _ 5 $ R: SÆ(S)S $ R: SÆЄ $ $0(2S3)4S $0(2S3)4S5 $0 $0S Ir_a 1 $ $0S1 Aceptar $ EXITO Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Cont. Solución Estado OR AND s2 s3 0 1 ( Analizador LALR(1) ) s6 2 s6 4 s2/r2 s3/r2 5 s2/r3 s3/r3 6 1 s9 s10 r1 s6 3 0 s9 s10 s9 s10 1 S ÆS S’ÆS SÆL=R | R LÆ*R | id RÆL 4 5 r2 r3 r3 s9 s10 7 7 s2 s3 s8 8 r4 r4 r4 r4 9 r5 r5 r5 r5 10 r6 r6 r6 r6 Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez E aceptar r2 s6 # Hay un conflicto de Reducción por Desplazamiento en S2: - La gramática no es SLR Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Analizador LALR(1) - Autómata I S ÆS S’ÆS SÆL=R | R LÆ*R | id RÆL Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Analizador LALR(1) - Tabla de análisis R0: R1: R2: R3: R4: R5: Analizador LALR(1) - Autómata II S ÆS S’ÆS SÆL=R | R LÆ*R | id RÆL Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Analizador LALR(1) - Análisis S’Æ SÆS SÆ L=R SÆ R LÆ *R R LÆ id RÆ L Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez Analizador LALR(1) - Análisis Procesadores de lenguaje – Ejercicios Análisis Sintáctico Salvador Sánchez, Daniel Rodríguez