Procesadores de lenguaje...$0E Ir_a 1 $ $0E1 Reducir E’ÆE $ $0E' EXITO $ Procesadores de...

Preview:

Citation preview

Procesadores de lenguajeEjercicios de análisis sintácticoEjercicios de análisis sintáctico

Salvador Sánchez Daniel RodríguezSalvador Sánchez, Daniel RodríguezDepartamento de Ciencias de la ComputaciónUniversidad de Alcalá

Recursividad: ejerciciosRecursividad: ejercicios

Obt l áti dObtener las gramáticas que producen:

1 U á i id d l i i d ( i)1. Una o más aes con recursividad por la izquierda (r.i)2. Cero o más aes (r.i)3. Una o más aes con recursividad por la derecha (r.d)4. Cero o más aes (r.d)5. Una b y cero o más aes (r.i)6 Cero o más aes terminando en b (r d)6. Cero o más aes terminando en b (r.d)7. Cero o más aes separadas por ‘;’ (r.d) 8. Una o más aes separadas por ‘;’ (r.i)

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

SolucionesSoluciones

1 A A |1. A->Aa | a 2. A->Aa | ε3. A->aA | a4. A->aA | ε5. A->Aa | b6. A->aA | b7. A->aB | ε

B->;aB | ε8. A->A;a | a

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador descendente recursivoAnalizador descendente recursivo

Ejemplos:• Ejemplos:

1. Mostrar las acciones de un analizador descendente recursivo que analiza la cadena “aaab” según la gramática: A aA | bcadena “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 i A i ió | Ll d | tSentencia Asignación | Llamada | otroAsignación Identificador := ValorLlamada Identificador ()

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LL(1) – Conjunto primeroAnalizador LL(1) Conjunto primero

1 C l l l j t P i d A l áti1.Calcular el conjunto Primero de A para la gramática siguiente:

A (A)A | ε

2.Calcular el conjunto Primero de los no terminales A, B y C para la gramática siguiente:

A BCB ε | mB ε | mC ε | s

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LL(1) - Conjunto primeroAnalizador LL(1) Conjunto primero

1 C j t P i d A l áti i i t1.Conjunto Primero de A para la gramática siguiente:A (A)A | ε

SOLUCIÓN: Primero(A) = { ( , є }

2.Conjunto Primero de los no terminales A, B y C:

A BCA BCB ε | mC ε | sC ε | s

SOLUCIÓN: Primero(A) = {m, s, є}, Primero(B) = {m, є}, Primero(C) = {s, ε}

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LL(1) - Conjunto siguienteAnalizador LL(1) Conjunto siguiente

Ej l 1 Ej l 3• Ejemplo 1:

S BCd

• Ejemplo 3:

S BCdS aBCdB bbC cc

S aBCdB CB | bC cc | ε

• Ejemplo 2: • Ejemplo 4:

S aBCdB bB | d

S if B then S | write B | id := BB bB | dC cc

B id = id | id <> id | true | false

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LL(1) - Conjunto siguienteAnalizador 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ácticoSalvador Sánchez, Daniel Rodríguez

Analizador LL(1) - AnálisisAnalizador LL(1) Análisis

1. Comprobar si la siguiente gramática es LL(1) y construir la tabla, calculando todos los conjuntos Siguiente y Primero.

S → cAA → aBB → b | ε

2. Reconocer la cadena “cab” con el analizador construido.

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

SoluciónSolución

Pasos para ver si es LL(1):

1 - No es recursiva a izquierdas1.- No es recursiva a izquierdas.2.- B→ b | є

2.1. Prim(b) ∩ Prim(ε) = vacío2 2 Si ε Prim(ε) > Prim(b) Sig(B) vacío2.2. Si ε ∈ Prim(ε) => Prim(b) ∩ Sig(B) = vacío

Conjuntos primero:j pPrim(S)={c} Prim(A)={a} Prim(B)={b, ε}

Conjuntos siguiente:Sig(S)={$} Sig(A)=Sig(S)={$} Sig(B)=Sig(A)={$}

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

SoluciónSolución

Tabla de análisis:

$

S AS

$bac

A → aBA

S → cAS

B → εB → bB

A → aB

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

SoluciónSolución

Reconocer la cadena “cab”

cab$Reconocimiento$Accab$$S

ab$Reconocimiento$Baab$A→aB$A

cab$Reconocimiento$Ac

b$Reconocimiento$bb$B→b$B

ab$Reconocimiento$Ba

$éxito$b$Reconocimiento$b

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LL(1) - AnálisisAnalizador LL(1) Análisis

1 C b i l i i t áti LL(1) t i l1. Comprobar si la siguiente gramática es LL(1) y construir la tabla de análisis y todos los conjuntos Siguiente y Primero.

E TE’E’ +TE’ | єT FT’T FTT’ *FT’ | єF (E) | id

2. Reconocer la cadena “(3+5*8)” con el analizador construido.

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

SoluciónSolución

Prim (E) { ( id } Si (E) { $ ) }Prim (E) = { (, id }Prim (E’) = { +, є }Prim (T) = { (, id }

Sig (E) = { $, ) }Sig (E’) = { $, ) } Sig (T) = {+ $ )}Prim (T) { (, id }

Prim (T’) = { *, є }Prim (F) = { (, id }

Sig (T) = {+, $, )}Sig (T’) = { +, $, )}Sig (F) = {*,+, $, )}g ( ) { )}

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

SoluciónSolución

Reconocimiento de la cadena: (3+5*8)

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LL(1) - AnálisisAnalizador LL(1) Análisis

1 A ti d l i i t áti t i l t bl d áli i1. A partir de la siguiente gramática, construir la tabla de análisis y todos los conjuntos Siguiente y Primero.

B -> DLD -> id ; D | єL > S L |L -> S ; L | єS -> a + a

2. Reconocer la cadena “id;a+a;” con el analizador construido.

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LL(1) - AnálisisAnalizador LL(1) Análisis

P i (B) { id } S ( ) { $ }Prim(B) = { id, a, ε } Prim(D) = { id, є }Prim(L) = { a є }

Sig(B) = { $ }Sig(D) = { a, $ }Sig(L) = { $ }Prim(L) = { a, є }

Prim(S) = { a }Sig(L) = { $ }Sig(S) = { ; }

$ id ; a +B B DL B DL - B DL -B B DL B DL B DLD D є D id;D - D є -L L є - - L S;L -;S - - - S a+a -

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LL(1) - AnálisisAnalizador LL(1) Análisis

Pila Decisión Entrada$B B DL id;a+a;$$LD D id;D id;a+a;$$LD;id Reconocer id id;a+a;$

Reconocer:id;a+a;

$LD;id Reconocer id id;a+a;$$LD; Reconocer ; ;a+a;$$LD D є a+a;$$L L S;L a+a;$$L;S S a+a a+a;$$L;a+a Reconocer a a+a;$$L;a+a Reconocer a a+a;$$L;a+ Reconocer + +a;$$L;a Reconocer a a;$$L; Reconocer ; ;$$L L є $$ EXITO $

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

$ $

Analizador LR(0) - AnálisisAnalizador LR(0) Análisis

1 A ti d l i i t áti t i l tó t fi it1. A partir de la siguiente gramática, construir el autómata finito determinista y la tabla de análisis para el analizador LR(0).

E (E + T) | idT (T * F) | idF id

2 Reconocer la cadena “(6+(4*2))”

F id

2. Reconocer la cadena (6+(4 2)) .

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LR(0) - AnálisisAnalizador LR(0) Análisis

E’ E

S1

E

(E’ .EE (E T)

S0

E’ E.

E (.E+T)E (E+T)

S2 (

E (E +T)

S3

(

id

E .(E+T)E .id

E .(E+T)E .id

E id

S13

E (E.+T)E

S+

id

E id.

E (E+.T)T .(T*F)T .id

S4

STS6

(T (T.*F)

S8

T

T id.

S14

idE (E+T.)

S5T

S7)

T (.T*F)T .(T*F)T .id

(

T (T*.F)F .id

S9

*

id T id.

E (E+T).

S7

F id.

S12

id

T (T*F.)

S10

F

T (T*F).

S11)

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LR(0) - AnálisisAnalizador LR(0) Análisis

1132Desplazamiento0FTEid+*)(ReglaAcciónEstado

Ir_aEntrada

5146Desplazamiento44Desplazamiento3

3132Desplazamiento2E’ EReducción1

9Desplazamiento8E (E+T)Reducción7

8146Desplazamiento67Desplazamiento5

F idReducción12T (T*F)Reducción11

11Desplazamiento101012Desplazamiento9

9esp a a e to8

T idReducción14E idReducción13F idReducción12

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LR(0) - AnálisisAnalizador LR(0) Análisis

Pila Decisión EntradaPila Decisión Entrada

$0 Desplazar (6+(4*2))$$0(2 Desplazar 6+(4*2))$$0(2613 Reducir E id +(4*2))$

Reconocer:(6+(4*2)) $ ( Reducir E id ( ))$

$0(2E Ir_a 3 +(4*2))$$0(2E3 Desplazar +(4*2))$$0(2E3+4 Desplazar (4*2))$$0(2E3+4(6 Desplazar 4*2))$$0(2E3+4(6414 Reducir T id *2))$$0(2E3+4(6T Ir_a 8 *2))$$0(2E3+4(6T8 Desplazar *2))$$0(2E3+4(6T8*9 Desplazar ))$$0(2E3+4(6T8*9212 Reducir F id ))$$0(2E3+4(6T8*9F Ir_a 10 ))$$0(2E3+4(6T8*9F10 Desplazar ))$$0(2E3+4(6T8*9F10)11 Reducir T (T*F) )$

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LR(0) - AnálisisAnalizador LR(0) Análisis

Reconocer:(6+(4*2))

Pila Decisión Entrada

... ... ...$0(2E3+4T Ir_a 5 )$$0(2E3+4T5 Desplazar )$$0(2E3+4T5)7 Reducir E (E+T) $( )

$0E Ir_a 1 $$0E1 Reducir E’ E $$0E' EXITO $

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LR(0) - AnálisisAnalizador LR(0) Análisis

1 A ti d l i i t áti t i l tó t fi it1. A partir de la siguiente gramática, construir el autómata finito determinista y la tabla de análisis para el analizador LR(0).

S ( S ) S | ε

2. Reconocer la cadena “(())()”.

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LR(0) - AnálisisAnalizador LR(0) Análisis

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LR(0) - AnálisisAnalizador LR(0) Análisis

Conflictos:

E t d I

Conflictos:

S0: Desplazamiento-reducciónS2: Desplazamiento-reducciónS4: Desplazamiento-reducción Entrada Ir a

Acción Regla ( )

S4: Desplazamiento reducción

0 Desplazar / Reducir S Є 2 1

1 Reducir S’ S

2 Desplazar / Reducir S Є 2 3

3 Desplazar - 4

4 Desplazar / Reducir S Є 2 5

5 Reducir S (S)S

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LR(0) - AnálisisAnalizador LR(0) Análisis

1 A ti d l i i t áti t i l tó t fi it1. A partir de la siguiente gramática, construir el autómata finito determinista y la tabla de análisis para el analizador SLR(1).

E (E + T) | idT (T * F) | idF id

2 Reconocer la cadena “(6+(4*2))”

F id

2. Reconocer la cadena (6+(4 2)) .

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador SLR(1) - AnálisisAnalizador SLR(1) Análisis

) A li l átia) Ampliar la gramática:

E’ EE (E + T) | idT (T * F) | idF id

b) Conjuntos Siguiente:b) Conjuntos Siguiente:

Sig (E’) = { $ }Sig (E) = { + , $ }Sig (E) { , $ }Sig (T) = { * , ) }Sig (F) = { ) }

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador SLR(1) - AnálisisAnalizador SLR(1) Análisis

S1

) A tó tE

(E’ .E

S0

E’ E.

E (.E+T)

S2 (S3

c) Autómata:

(

id

E .(E+T)E .id

E .(E+T)E .id

S13

E (E.+T)E

+id

E id.

E (E+.T)T .(T*F)T .id

S4

TS6

(T (T.*F)

S8

T

T id

S14

idE (E+T.)

S5T

S)

T (.T*F)T .(T*F)T .id

6

(

T (T*.F)F .id

S9

*

id T id.

E (E+T).

S7F .id

F id.

S12

id

T (T*F.)

S10

F

T (T*F).

S11)

id

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador SLR(1) - AnálisisAnalizador SLR(1) Análisis

d) T bl áli i

FTEid+*)($Estado

Ir_a

d) Tabla análisis:

D: 433D: 13D: 22

Aceptar11D: 13D: 20

)(

8D: 14D: 66D: 75

5D: 14D: 64D: 43

D: 111010D: 129

D: 98R: E (E+T)7 R:E (E+T)

R: T id14R: E idR: E id13

R: F id12R:T (T*F)11

R: T id

R:T (T*F)

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador SLR(1) - AnálisisAnalizador SLR(1) Análisis

Pila Decisión EntradaPila Decisión Entrada

$0 D:2 (6+(4*2))$$0(2 D:13 6+(4*2))$$0(2613 R: E id +(4*2))$

e) Reconocer(6+(4*2))

$ ( R: E id ( ))$$0(2E Ir_a 3 +(4*2))$$0(2E3 D:4 +(4*2))$$0(2E3+4 D:6 (4*2))$$0(2E3+4(6 D:14 4*2))$$0(2E3+4(6414 R: T id *2))$$0(2E3+4(6T Ir_a 8 *2))$$0(2E3+4(6T8 D:9 *2))$$0(2E3+4(6T8*9 D:12 ))$$0(2E3+4(6T8*9212 R: F id ))$$0(2E3+4(6T8*9F Ir_a 10 ))$$0(2E3+4(6T8*9F10 D:11 ))$$0(2E3+4(6T8*9F10)11 R: T (T*F) )$

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador SLR(1) - AnálisisAnalizador SLR(1) Análisis

e) Reconocer (6+(4*2)):

Pila Decisión Entrada

... ... ...$0(2E3+4T Ir_a 5 )$$0(2E3+4T5 D:7 )$$0(2E3+4T5)7 R: E (E+T) $( )

$0E Ir_a 1 $$0E1 Aceptar $

EXITO

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador SLR(1) - AnálisisAnalizador SLR(1) Análisis

1 A ti d l i i t áti t i l tó t fi it1. A partir de la siguiente gramática, construir el autómata finito determinista y la tabla de análisis para el analizador SLR(1).

S (S) S | ε

2 Reconocer la cadena “( ( ) )( )”2. Reconocer la cadena ( ( ) )( ) .

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Análisis sintáctico SLR(1)Análisis sintáctico SLR(1)

A tó tAutómata:

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Análisis sintáctico SLR(1)Análisis sintáctico SLR(1)

T bl• Tabla:Siguiente(S’) = { $ }

Siguiente(S) = { ) , $ }

Ir a

( ) $ S

g ( ) { ) }

( ) $ S

0 D-2 R: S Є R: S Є 1

1 Aceptar

2 D-2 R: S Є R: S Є 3

3 D-4

4 D-2 R: S Є R: S Є 54 D-2 R: S Є R: S Є 5

5 R: S (S)S R: S (S)S

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador SLR(1) - AnálisisAnalizador SLR(1) Análisis

Pila Decisión EntradaPila Decisión Entrada

$0 D:2 (())()$$0(2 D:2 ())()$$0(2(2 R: S Є ))()$

• Reconocer(())()

$ ( ( R: S Є ))()$$0(2(2S Ir_a 3 ))()$$0(2(2S3 D: 4 ))()$$0(2(2S3)4 R: S Є )()$$0(2(2S3)4S Ir_a 5 )()$$0(2(2S3)4S5 R: S (S)S )()$$0(2S Ir_a 3 )()$$0(2S3 D: 4 )()$$0(2S3)4 D:2 ()$$0(2S3)4(2 R: S Є )$$0(2S3)4(2S Ir_a 3 )$$0(2S3)4(2S3 D: 4 )$$0(2S3)4(2S3)4 R: S Є $

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador SLR(1) - AnálisisAnalizador SLR(1) Análisis

e) Reconocer (())()

Pila Decisión Entrada

... ... ...$0(2S3)4(2S3)4 R: S Є $$ ( ) ( ) R: S Є $$0(2S3)4(2S3)4S Ir_a 5 $$0(2S3)4(2S3)4S5 R: S (S)S $$0(2S3)4S Ir_a 5 $_

$0(2S3)4S5 R: S (S)S $$0 R: S Є $$0S Ir_a 1 $$0S1 Aceptar $

EXITO

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Análisis SLR(1)Análisis SLR(1)

E E OR EE -> E OR E| E AND E| (E)| 0| 1

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Cont. SoluciónCont. Solución

Estado OR AND ( ) 0 1 # EEstado OR AND ( ) 0 1 # E

0 s6 s9 s10 1

1 s2 s3 r1 aceptar

2 s6 s9 s10 4

3 s6 s9 s10 5

4 s2/r2 s3/r2 r2 r2

5 s2/r3 s3/r3 r3 r3

6 s6 s9 s10 76 s6 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ácticoSalvador Sánchez, Daniel Rodríguez

Analizador LALR(1)Analizador LALR(1)

S’ SS S S L=R | RL *R | idR LR L

Hay un conflicto de ReducciónHay un conflicto de Reducción por Desplazamiento en S2:

- La gramática no es SLR

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LALR(1) - Autómata IAnalizador LALR(1) Autómata I

S’ SS S S L=R | RL *R | idR LR L

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LALR(1) - Autómata IIAnalizador LALR(1) Autómata II

S’ SS S S L=R | RL *R | idR LR L

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LALR(1) - Tabla de análisisAnalizador LALR(1) Tabla de análisis

R0: S’ SR0: S S R1: S L=RR2: S RR3: L *RR3: L R R4: L idR5: R L

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LALR(1) - AnálisisAnalizador LALR(1) Análisis

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez

Analizador LALR(1) - AnálisisAnalizador LALR(1) Análisis

Procesadores de lenguaje – Ejercicios Análisis SintácticoSalvador Sánchez, Daniel Rodríguez