Gramáticas libres de contexto en su habitat





A veces te vas por las ramas para no tener que ir directo a la raíz. Sobre todo si la raíz es dolorosa y puede derribar el árbol— Albert Espinosa



Ivan Meza

Diferencia entre AF y GLC

AFs y ERs

Podemos construir casi todo

Pero no somos sobre una instancia

Número de instancias infinitas

Otro ejemplo

Pero entonces qué hacen GLC

Estructura

Elaboremos

... recordemos

Gramáticas libres de contexto

Son una tupla $G=(V,\Sigma,P,S)$, donde:
  • $V$ es otro alfabeto que denominamos símbolos no terminales (generalmente en mayúsculas)
  • $\Sigma$ es un alfabeto que denominamos símbolos terminales
  • $P$ es conjunto de reglas con la forma $V\rightarrow \alpha$ donde $\alpha \in (\Sigma\cup V)^*$
  • $S\in V$ que denominamos símbolo inicial

GLC para el lenguaje de ER

$G=(\{R,B\},\{a,b,\epsilon,\emptyset\},P,R,+,*,(,) )$ donde $P$

  • $R\rightarrow B$
  • $R\rightarrow R+R$
  • $R\rightarrow R*$
  • $R\rightarrow RR$
  • $R\rightarrow (R)$
  • $B\rightarrow a$
  • $B\rightarrow b$
  • $B\rightarrow \epsilon$
  • $B\rightarrow \emptyset$

Derivaciones para: $a+(ab)$

Derivación a la izquierda

$a+(ab)$

  • $R$
  • $\Rightarrow R+R $
  • $\Rightarrow B+R $
  • $\Rightarrow a+R $
  • $\Rightarrow a+(R) $
  • $\Rightarrow a+(RR) $
  • $\Rightarrow a+(BR) $
  • $\Rightarrow a+(aR) $
  • $\Rightarrow a+(aB) $
  • $\Rightarrow a+(ab) $

Derivación a la derecha

$a+(ab)$

  • $R$
  • $\Rightarrow R+R $
  • $\Rightarrow R+(R) $
  • $\Rightarrow R+(RR) $
  • $\Rightarrow R+(RB) $
  • $\Rightarrow R+(Rb) $
  • $\Rightarrow R+(Bb) $
  • $\Rightarrow R+(ab) $
  • $\Rightarrow B+(ab) $
  • $\Rightarrow a+(ab) $

Derivaciones diferentes

¿Árboles?

Árbol primera derivación

Árbol segunda derivación

Dos derivaciones diferentes producen el mismo árbol

Derivaciones para: $a+ab$

Derivación a la izquierda

$a+ab$

  • $R$
  • $\Rightarrow R+R $
  • $\Rightarrow B+R $
  • $\Rightarrow a+R $
  • $\Rightarrow a+RR $
  • $\Rightarrow a+BR $
  • $\Rightarrow a+aR $
  • $\Rightarrow a+aB $
  • $\Rightarrow a+ab $

¡¡Segunda derivación a la izquierda!!

$a+ab$

  • $R$
  • $\Rightarrow RR $
  • $\Rightarrow R+RR $
  • $\Rightarrow B+RR $
  • $\Rightarrow a+RR $
  • $\Rightarrow a+BR $
  • $\Rightarrow a+aR $
  • $\Rightarrow a+aB $
  • $\Rightarrow a+ab $

Derivaciones diferentes

¿Árboles?

Árbol primera derivación

Árbol segunda derivación

Dos derivaciones diferentes producen dos árboles diferentes

¡¡Dos derivaciones diferentes producen dos árboles diferentes!!

A esta propiedad de que una cadena tiene dos "significados" diferentes le llamamos

Ambigüedad

veo al gato con el telescopio

¿quien tiene el telescopio?

Ambigüedad

Los humanos encontramos la ambigüedad muy divertida

  • Hola, ¿cómo te llamas?
  • Maria de los Ángeles ¿y tú?
  • Daniel de Nueva York
  • Oye, pues mi hijo en su nuevo trabajo se siente como pez en el agua.
  • ¿Qué hace?
  • Nada

Definiciones

Una gramática es ambigua si para cuando menos una cadena tiene más de un árbol de derivación

Si todas las cadenas de una gramática tienen cuando menos un árbol de derivación no es ambigua

Reducción de gramáticas ambiguas

Malas noticias: no existe un algoritmo para reducir gramáticas

Pero hay algunas estrategias

Elegir un agrupamiento para mismo operador: izquierda o derecha

$a+a+a$

Forzar preferencia: introducir nuevas variables

$G=(\{E,T,F,B\},\{a,b,\epsilon,\emptyset,P,R,+,*,(,)\},E )$ donde $P$

  • $E\rightarrow T | E + T$
  • $T\rightarrow F | TF $
  • $F\rightarrow B | F* | (E) $
  • $B\rightarrow a$
  • $B\rightarrow b$
  • $B\rightarrow \epsilon$
  • $B\rightarrow \emptyset$

Derivación por la izquierda

$a+ab$

  • $E$
  • $\Rightarrow E+T $
  • $\Rightarrow T+T $
  • $\Rightarrow F+T $
  • $\Rightarrow B+T $
  • $\Rightarrow a+T $
  • $\Rightarrow a+TF $
  • $\Rightarrow a+FF $
  • $\Rightarrow a+BF $
  • $\Rightarrow a+aF $
  • $\Rightarrow a+aB $
  • $\Rightarrow a+ab $

Árbol primera derivación

Derivación por la derecha

$a+ab$

  • $E$
  • $\Rightarrow E+T $
  • $\Rightarrow E+TF $
  • $\Rightarrow E+TB $
  • $\Rightarrow E+Tb $
  • $\Rightarrow E+Fb $
  • $\Rightarrow E+Bb $
  • $\Rightarrow E+ab $
  • $\Rightarrow T+ab $
  • $\Rightarrow F+ab $
  • $\Rightarrow B+ab $
  • $\Rightarrow a+ab $

Árbol segunda derivación

Intentar con: $a+(a*b)$

Intentar con: $a^nb^nc^md^m \cup a^nb^mc^md^n$

Por un lado...$a^nb^n$ y $c^nd^n$

  • $A\rightarrow aAb | ab$
  • $B\rightarrow cBd | cd$

Por otro lado $a^nb^mc^md^n$

  • $C\rightarrow aCd | aDd$
  • $D\rightarrow bDc | bc$

$E\rightarrow AB | C$

¿Qué pasa cuando $n=m$?

Ojo

Hay lenguajes inherentemente ambiguos

Regresando a operaciones con

Además podemos definir

$G_1=(V_1,\Sigma,P_1,S_1)$ y $G_2=(V_2,\Sigma,P_2,S_2 )$

$G_U=(V_1\cup V_2,\Sigma,P_1\cup P_2\cup \{S_U \rightarrow S_1 + S_2\},S_U )$

$G_C=(V_1\cup V_2,\Sigma,P_1\cup P_2\cup \{S_C \rightarrow S_1 S_2\},S_C )$

$G_*=(V_1,\Sigma,P_1\cup \{S_* \rightarrow S_1S_*|\epsilon \},S_* )$

¿A qué lenguajes corresponden?

$G=(V,\Sigma,\emptyset,S )$

$G=(V,\Sigma,\{S \rightarrow \epsilon\},S )$

$G=(V,\Sigma,\{S \rightarrow a\},S )$

Entonces

Tenemos las operaciones de composición para cualquier GLC

Tenemos lenguajes básicos como GLC

Podemos usar las operaciones sobre las GLR

¡Podemos generar todos los lenguajes regulares con gramáticas!

Convertir de AF a GLC

q₀ q₁ b a a b
$Q$ab
$q_0$ $q_0$ $q_1$
$q_1$ $q_1$ $q_0$
$q_0$ se transforma en $A$, $q_1$ se transforma en $B$
$V$ab
$A$ $A$ $B$
$B$ $B$ $A$

con $G=(\{A,B\},\{a,b\},P,A)$, reescribir las transiciones a reglas

  • $A\rightarrow aA$
  • $A\rightarrow bB$
  • $B\rightarrow aB$
  • $B\rightarrow bA$

Incluir las finales, que lleguen a un estado final

  • $A\rightarrow b$
  • $B\rightarrow a$

Derivación por la izquierda y derecha

$ababa$

  • $A$
  • $\Rightarrow aA $
  • $\Rightarrow abB $
  • $\Rightarrow abaB $
  • $\Rightarrow ababA $
  • $\Rightarrow ababa $

Entonces

Dado un AF podemos encontrar una GLC

¿Dada una GLC podemos encontrar un AF?

Cuidado... mucho cuidado

Sí y Solo sí tienen la misma forma $A\rightarrow cB | a$

con $G=(\{A,B\},\{a,b\},P,A)$, reescribir las reglas a transiciones

$A\rightarrow aA$$\delta(A,a)=A$
$A\rightarrow bB$$\delta(A,b)=B$
$B\rightarrow aB$$\delta(B,a)=B$
$B\rightarrow bA$$\delta(B,b)=A$
$A\rightarrow b$$\delta(A,b)=F$
$B\rightarrow a$$\delta(A,a)=F$

Gramáticas regulares

Son una tupla $G=(V,\Sigma,P,S)$, donde:
  • $V$ es otro alfabeto que denominamos símbolos no terminales (generalmente en mayúsculas)
  • $\Sigma$ es un alfabeto que denominamos símbolos terminales
  • $P$ es conjunto de reglas con la forma $A\rightarrow aB | a$ donde $a\in\Sigma$ y $A,B \in V$
  • $S\in V$ que denominamos símbolo inicial

Jerarquía de Chomsky

Lenguaje Gramática Máquina
Independiente de contexto Tipo 2, $V\rightarrow \alpha$ ??
Regular Tipo 3, $V \rightarrow aA$ Autómata finito

Autómata de pila

Un AFND-$\epsilon$ + una pila

No confundir

Autómata de pila

Es una tupla $(Q,\Sigma,\Gamma,q_0,Z_0,A,\delta)$

  • $Q$ conjunto finito de estados
  • $\Sigma$ alfabeto de cadenas reconocidas
  • $\Gamma$ alfabeto de pila
  • $q_0$ estado inicial
  • $Z_0$ símbolo inicial de la pila
  • $A$ estados finales
  • $\delta$ función de transición $Q \times (\Sigma \cup \{\epsilon\}) \times \Gamma \rightarrow Q\times\Gamma^*$

Un AFND-$\epsilon$ + una pila

AF vs AFND vs AFND-$\epsilon$ vs AP

AFAFNDAFND-$\epsilon$AP
$Q$ $Q$ $Q$ $Q$
$\Sigma$ $\Sigma$ $\Sigma$ $\Sigma$
$\Gamma$
$q_0 \in Q$ $q_0 \in Q$ $q_0 \in Q$ $q_0 \in Q$
$Z_0 \in \Gamma$
$A \subseteq Q$ $A \subseteq Q$ $A \subseteq Q$ $A \subseteq Q$
$Q \times \Sigma \rightarrow Q$ $Q \times \Sigma \rightarrow 2^Q$ $Q \times (\Sigma \cup \{\epsilon\}) \rightarrow 2^Q$ $Q \times (\Sigma \cup \{\epsilon\}) \times \Gamma \rightarrow Q\times\Gamma^*$
q₀ q₁ q₂ b,A/ε b,A/ε a,Z₀/AZ₀ a,A/AA ε,Z₀/Z₀

Posición inicial

  • Estado: $q_0$
  • Pila: $Z_0$

Operaciones

  • Push: $A/BA$
  • Pop: $A/\epsilon$
  • Sin operación: $A/A$

¿Qué recuerda el AP?

Licencia de Creative Commons
¿Qué es un computadora? by Ivan V. Meza Ruiz is licensed under a Creative Commons Reconocimiento 4.0 Internacional License.
Creado a partir de la obra en http://turing.iimas.unam.mx/~ivanvladimir/slides/lfya/intro.html.