Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... ·...

24
Capítulo 5 Gramáticas Libres de Contexto

Transcript of Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... ·...

Page 1: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Capítulo 5

Gramáticas Libres de Contexto

Page 2: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Gramáticas Libres de Contexto y Lenguajes

• Hemos visto que muchos lenguajes no pueden ser regulares. Así necesitamos considerar clases más grandes de lenguajes.

• Lenguajes libres de contexto (LLCs) jugaron un papel central en lenguajes naturales desde los 1950's, y en compiladores desde los 1960's.

• Gramáticas Libres de Contexto (GLCs) son la base de la sintaxis BNF.

Page 3: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Gramáticas Libres de Contexto y Lenguajes 

• Hoy LLCs son cada día más importantes para XML y sus DTDs.

Veremos GLCs, los lenguajes que ellas generan, árboles de análisis, autómatas de pila y propiedades de cerradura de los LLCs.

Page 4: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Ejemplo Informal de GLCs

Considere Lpal = { w ∈Σ* : w = wR }

Por ej. oso ∈ Lpal , abaaaccaaaba∈ Lpal. En Español, por ejemplo, se tiene anitalavalatina ∈ Lpal

Sea ∑ = {0, 1} y suponga que Lpal fuera regular.

Sea n dado por el lema de “bombeo”.Entonces 0n10n ∈Lpal. Al leer 0n el AF debe hacer un ciclo. Omitase el ciclo; contradicción.

Page 5: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Ejemplo Informal de GLCs (Cont.)

Definamos Lpal inductivamente:

Base: ε, 0, y 1 son palíndromas.

Inducción: Si w es una palíndroma, así lo son 0w0 y 1w1.

Circunscripción: Nada más es una palíndroma.

Page 6: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Ejemplo Informal de GLCs (Cont.)

GLCs es un mecanismo formal para definiciones tales como aquella para Lpal.

0 y 1 son terminales

P es una variable (o no terminal, o categoría sintáctica)

P es en esta gramática también el símbolo inicial.

1-5 son producciones (o reglas)

Page 7: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Definición Formal de GLCs

Una gramática libre de contexto es un cuádruple

G = (V, T, P, S)donde

V es un conjunto finito de variables. T es un conjunto finito de terminales. P es un conjunto finito de producciones de la forma

A → α , donde A es una variable y α ∈ (V U T)* S es una variable distinguida llamada el símbolo inicial.

Page 8: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Ejemplos

Gpal = ({P}, {0, 1}, A, P), dondeA = {P → ε, P → 0, P → 1, P → 0P0, P → 1P1}.

A veces agrupamos producciones con la misma cabeza, por ej. A = {P → ε | 0 | 1 | 0P0 | 1P1}.

Expresiones regulares sobre {0, 1} pueden ser definidas por la gramática

Gregex = ({E}, {0, 1}, A, E)

donde A = { E→ 0, E→ 1, E→ E. E, E→ E + E, E→ E*, E→ (E)}

Page 9: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Ejemplos (Cont.)

Expresiones (simples) en un lenguaje de programación típico. Los operadores son + y * y los argumentos son identificadores, i.e. cadenas en

L((a + b)(a + b + 0 + 1)*)Las expresiones están

definidas por la gramáticaG = ({E, I}, T, P, E)

donde T = {+, *, (, ), a, b, 0,1} y P es el siguiente conjunto de producciones:

Page 10: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Derivaciones usando gramáticas

• Inferencia recursiva , usando producciones desde el cuerpo a la cabeza

• Derivaciones, usando producciones de cabeza a cuerpo.

Page 11: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Derivaciones usando gramáticas (Cont.)

Ejemplo de inferencia recursiva:Cadena Para 

lenguaje de Producción Cadenas Usadas

(i) a I 5 ‐

(ii) b I 6 ‐

(iii) b0 I 9 (ii)

(iv) b00 I 9 (iii)

(v) a E 1 (i)

(vi) b00 E 1 (iv)

(vii) a+b00 E 2 (v), (vi)

(viii) (a+b00) E 4 (vii)

(ix) a*(a + b00) E 3 (v), (viii)

Page 12: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Derivaciones usando gramáticas (Cont.)

Sea G = (V, T, P, S) una GLC, A ∈ V,{α, β} ⊂ (V ∪ T)*, y A→ γ ∈ P.

Entonces escribimosαAβ ⇒G αγβ

o si G es entendidaαAβ ⇒ αγβ

y decimos que αAβ deriva αγβ.

Page 13: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Derivaciones usando gramáticas (Cont.)

Definimos ⇒* a ser la cerradura reflexiva y transitiva de ⇒, en otras palabras:

Base: Sea α ∈ (V ∪ T)*. Entonces α ⇒* α

Inducción: Si α ⇒* β y β ⇒* γ,entonces α ⇒* γ.

Page 14: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Ejemplo

Derivación de a*(a + b00) a partir de E en la gramática de pantalla previa:

E ⇒ E * E ⇒ I * E ⇒ a * E ⇒ a * ( E ) ⇒a * (E + E) ⇒ a * (I + E) ⇒ a*(a + E) ⇒a * (a + I) ⇒

a * (a+I0) ⇒ a*(a+I00) ⇒ a*(a+b00)

Nota 1: En cada paso podriamos tener varias reglas a elegir, por ejemplo

I * E ⇒ a * E ⇒ a * (E) en contraste conI * E ⇒ I * (E ) ⇒ a * (E).

Page 15: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Ejemplo (Cont.)

Nota 2: No todas las elecciones conducen a derivaciones exitosas de una cadena en particular, por ejemplo

E ⇒ E + E

no llevará a derivaciones de a * (a + b00).

Page 16: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Derivaciones por Derecha y por Izquierda

Derivación por izquierda : Siempre reemplazar la variable mas a la izquierda por uno de los cuerpos de sus reglas.

Derivación por derecha : Siempre reemplazar la variable mas a la derecha por uno de los cuerpos de sus reglas.

Por la izquierda: E ⇒ E * E ⇒ I * E ⇒ a * E ⇒ a * ( E ) ⇒a * (E + E) ⇒ a * (I + E) ⇒ a*(a + E) ⇒a * (a + I) ⇒

a * (a+I0) ⇒ a*(a+I00) ⇒ a*(a+b00)

Page 17: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Derivaciones por Derecha y por Izquierda (Cont.)

Por la derecha:E ⇒rm E * E ⇒ rm

E*(E) ⇒rm E*(E+E) ⇒rm E*(E+I) ⇒rm E*(E+I0)⇒rm E*(E+I00) ⇒rm E*(E+b00) ⇒rm E*(I+b00)⇒rm E*(a+b00) ⇒rm I*(a+b00) ⇒rm a*(a+b00)

Podemos concluir que E ⇒*rm a*(a+b00)

Page 18: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

El Lenguaje de una Gramática

Si G(V, T, P, S) es una GLC, entonces el lenguajede G es

L(G) = { w ∈T* : S ⇒*G w }

i.e. el conjunto de cadenas sobre T* derivables a partir del simbolo inicial.

Si G es una GLC, decimos que L(G) es un lenguajelibre de contexto.

Page 19: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Ejemplo

L(Gpal) es un lenguaje libre de contexto.

Teorema 5.7:L(Gpal) = { w ∈ {0, 1}* : w = wR }

Dem: (Dirección ⊇) Suponga w = wR. Mostramos por inducción en |w| que w ∈L(Gpal)

Page 20: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Ejemplo (Cont.)

Base: |w| = 0, o |w| = 1. Entonces w es ε, 0, o 1. Ya que P→ε,P→0, y P→1 son producciones, concluimos que P ⇒* w entodos los casos base.

Inducción: Suponga que |w| ≥ 2. Dado que w = wR , tenemosw = 0x0, o w = 1x1, y x = xR.

Si w = 0x0 sabemos de la HI que P ⇒* x. EntoncesP ⇒ 0P0 ⇒* 0x0 = w

Asi w ∈ L(Gpal).

El caso para w = 1x1 es similar.

Page 21: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Ejemplo (Cont.)

(Dirección ⊆) Suponemos que w ∈ L(Gpal) y debemostrarse que w = wR.

Dado que w ∈ L(Gpal), tenemos P ⇒* w.

Hacemos una inducción en la longitud de ⇒* .

Base: La derivación P ⇒* w es hecha en un paso.

Entonces w debe ser ε, 0, o 1, todas palindromas.

Page 22: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Ejemplo (Cont.)

Inducción: Sea n ≥1, y suponga que la derivacióntoma n+1 pasos. Entonces debemos tener

w = 0x0 ⇐* 0P0 ⇐ Po

w = 1x1 ⇐* 1P1 ⇐ Pdonde la segunda derivación es hecha en n pasos.

Por HI x es una palindroma y la demostracióninductiva está completa.

Page 23: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Formas oracionales

Sea G(V, T, P, S) una GLC, y α ∈ (V ∪ T)*.Si

S ⇒* αDecimos que es una forma oracional.

Si S ⇒lm α decimos que es una forma oracionalizquierda, y si S ⇒rm α decimos que es una forma oracional derecha.

Nota: L(G) es aquellas formas oracionales que están en T*.

Page 24: Coordinación de Ciencias Computacionales - Capítulo 5grodrig/Descargas/AutomatasLengua... · 2010-06-21 · clases más grandes de lenguajes. • Lenguajes libres de contexto (LLCs)

Ejemplos

Dada G de expresiones.

Entonces E*(I+E) es una forma oracional ya que E ⇒ E*E ⇒ E*(E) ⇒ E*(E+E) ⇒ E*(I+E)

Esta derivación no es ni izquierda ni derecha.

a*E es una forma oracional izquierda, ya que E ⇒lm E*E ⇒lm I*E ⇒lm a*E

E*(E+E) es una forma oracional derecha dado que E ⇒rm E*E ⇒rm E*(E) ⇒rm E*(E+E)