Anda di halaman 1dari 43

LENGUAJES NO REGULARES

Y LENGUAJES LIBRES DE

CONTEXTO
Limite de lo computable Máquina de
C Turing
a
p Se liberan los extremos de la cinta
a ahora es infinita
c Autómata
i Linealmente
d Acotado
a
d
JERARQUIA DE LAS MÁQUINAS ABSTRACTAS Se incorpora la
d capacidad de
e grabar sobre la
cinta de
c Autómata entrada que
ó De Pila está acotada
m
p Se incorpora una
u memoria de pila
t LIFO Se permite el movimiento del cabezal en
o dos sentidos Autómata
Autómata Finito
Máquinas
Finito Bidireccional
secuenciales
TIPOS DE GRAMÁTICAS

TIPO Restricciones en las Producciones W1 → W2

0 Sin restricciones

1 I(w1) ˂ I(w2 ) , w2 = λ

2 w1 = A, siendo A un símbolo no terminal.

3 w1 = A = A y w2 = aB o w2 = a, siendo A є N, B є N y a

є T, o S є λ
Máquina de Gramáticas
Relación entre las máquinas Turing Sin
abstractas y los tipos de
restriccioness
Gramáticas según las
jerarquías de Chomsky
Autómata
Linealmente Gramáticas
Acotado Dependientes del
Contexto

Gramáticas
Independientes
Autómata
del
De Pila
Contexto

Se incorpora una
memoria de pila
LIFO
Autómata Gramáticas
Autómata Finito regularess
Finito Bidireccional
JERARQUIA DE GRAMÁTICAS DE CHOMSKY

Gramáticas Gramáticas
Gramáticas Dependientes Independientes Gramáticas
Sin del del s Regulares
Restricciones Contexto Contexto (Tipo 3)
(Tipo 0) (Tipo 1) (Tipo 2)
Definición (Forma Normal de Chomsky)
 Una gramática libre de contexto G := (V, ∑, Q0,P) se dice que

 está en forma normal de Chomsky si es λ-libre y las únicas

 producciones (exceptuando, eventualmente, la única λ -


producción Q0 λ ), son exclusivamente de uno de los dos

 tipos siguientes.

 A a, con A є V y a є ∑ ,

 A CD, con A,C,D є V.


 Teorema (Transformación a Forma Normal de Chomsky)

 Toda gramática libre de contexto es equivalente a una gramática libre


de contexto en Forma Normal de Chomsky.

 Además, esta equivalencia es algorítmicamente computable.

Supongamos que tenemos una gramática G := (V, ∑, Q0,P)


propia. Procederemos del modo siguiente:
Definamos un par de clases V y P de símbolos no terminales y
producciones.
Expresiones Regulares
 Se trata de expresiones algebraicas para denotar lenguajes regulares.
Para denotar a estos lenguajes las expresiones regulares deben
representar las mismas tres operaciones con las que se construyen
lenguajes regulares: unión, concatenación y cerradura.

 Si L y M son dos lenguajes formales, entonces la siguiente tabla indica la


forma en que las expresiones regulares denotan las operaciones básicas:

 Operación con Lenguajes Expresión Regular

 LՍM L+M

 L.M LM
 Una expresión regular siempre denota un lenguaje formal (uno

regular), sin embargo, la unidad atómica de expresión son los

símbolos del alfabeto sobre el cual se define el lenguaje.

 Es decir, una expresión regular indica la estructura que tienen

las cadenas que pertenecen al lenguaje denotado. Para aclarar

esto se definirá a continuación, de forma inductiva, el conjunto

de las expresiones regulares sobre un alfabeto A:


Construcción de cadenas
 Si G es una gramática, entonces el conjunto de todas las cadenas, sobre el mismo
alfabeto que G, que es posible formar, siguiendo las reglas de producción en G,
se denomina el Lenguaje de G y se denota L (G).
 Para construir las cadenas que pertenecen al lenguaje formal de una gramática
es necesario seguir las reglas de producción y usar las operaciones de
substitución y concatenación.
 Por ejemplo, considere la siguiente gramática:
 G = ({S,A}, { a, b}, S, Rp)
 donde:
 Rp es el siguiente conjunto de reglas de producción:
 S —> λ
 S —> bA
 A —> aaA
El mecanismo para construir cadenas válidas
en el lenguaje de una gramática es el
siguiente:
 PASOS: RESULTADO:
 1) Comenzar con el símbolo inicial " S "
 2) Substituir el símbolo inicial por la parte derecha de alguna producción cuyo lado izquierdo
sea justo dicho símbolo "bA“
 3) De la misma forma, substituir cada símbolo no-terminal por el lado derecho de alguna
"baaA“
 producción con dicho símbolo en su lado izquierdo hasta que la cadena no contenga ningún
"baaaaA“
 símbolo no-terminal. "baaaab"
 Es decir, el lenguaje l(G) de la gramática G se puede explicar de la siguiente forma:
 Todas las cadenas, sobre el alfabeto { a, b}, , tales que comienzan y terminan con el símbolo
b y en medio contienen cero o más parejas de símbolos a.
 Así, todas las siguientes cadenas forman parte de L (G):
 λ, bb, baab, baaaab, baaaaaab, . . .
 pero todas las siguientes cadenas NO son parte de ese lenguaje porque no es posible
construirlas a partir de las reglas de
 producción en G :
 ab, aa, bab, abab, bbabb, aabbaa. . .
 En general, el proceso para construir cadenas válidas en el lenguaje de una gramática se
denomina Proceso de derivación y cada paso o substitución se denota con el símbolo =>
(leído "deriva"). De esa forma, el proceso de derivación del ejemplo anterior puede se
denota de la siguiente forma:
 S => bA => baaA => baaaaA => baaaab
 Nótese, como lo indican las reglas del proceso de derivación, que toda derivación comienza
con el símbolo inicial de la gramática (en este caso S ) y termina con una cadena formada
exclusivamente por símbolos terminales de la misma gramática (en este caso a y b ).
Variantes
 Como se puede observar en el ejemplo anterior, varias reglas de
producción pueden tener el mismo símbolo en su lado
 izquierdo, tal es el caso, en la gramática G anterior, de los dos siguientes
grupos de reglas:
 S => λ A => aaA
 S => bA A => b
 Las reglas de producción en esta circunstancia pueden ser escritas de
forma compacta usando el símbolo | (barra vertical):
 S => λ | ba
 A => aaA | b
 De la misma forma, un proceso de derivación también puede
expresarse en forma compacta si se consideran las siguientes
variantes del símbolo de derivación:
 => Deriva directamente (en un solo paso)
 =>* Deriva en CERO o más pasos
 =>+ Deriva en UNO o más pasos
 Así es posible resumir procesos de derivación en expresiones
cortas, por ejemplo, es posible definir en términos generales
 el lenguaje G para cualquier gramática G de la siguiente forma:
 L(G)= {w | (w є T*)^ (S =>+ w)}
 Para definir la gramática de algún lenguaje formal es necesario, al menos, observar si el lenguaje
que se quiere describir es finito o infinito.

 Si el lenguaje es FINITO, entonces la gramática puede consistir de todas las reglas de la forma S —>w para cada
cadena w en el lenguaje.
 Sin embargo, si el lenguaje que se desea describir es INFINITO, entonces al menos una de las reglas de producción
en la gramática deberá ser una regla recursiva:
 Definition: Una regla de producción se denomina Recursiva cuando y sólo cuando su lado izquierdo aparece como
parte de su lado derecho.
 Definition Una regla se denomina Indirectamente Recursiva si su lado izquierdo aparece en el lado derecho de
alguna otra regla derivable a partir de la primera.
 Para ilustrar lo anterior considérese la regla de producción S —> b | aS, evidentemente se trata de una regla
recursiva, sin embargo, se en alguna otra gramática se encontraran las siguientes reglas de producción:
 S —> b | aA
 A —> c | bS
 Entonces se tienen dos reglas indirectamente recursivas, por una parte, S —> aA es indirectamente recursiva ya
que:
 S —> aA —> abS
 Por otra parte, también la regla A bS es indirectamente recursiva, ya que:
 A —> bS —> baA
 Así que, de las cuatro reglas de producción contenidas en la gramática, dos de ellas son indirectamente recursivas.
 Definition: Una gramática se denomina Gramática Recursiva

 si y sólo si contiene alguna regla de producción recursiva, o bien alguna regla indirectamente recursiva.

 Por lo tanto, es posible realizar la siguiente afirmación acerca de las gramáticas que describen lenguajes
infinitos:
 Una gramática cuyo lenguaje es infinito, forzosamente es recursiva

 Además, la conclusión anterior conduce inevitablemente a reflexionar sobre la estructura de las reglas de
producción en una gramática cualquiera. Siempre es posible tener reglas que no sean ni recursivas, ni
indirectamente recursivas, y algunas veces se encontrarán reglas que sí lo sean. Lo cual, inevitablemente
lleva a observar que:
 El lenguaje l (G)= definido por una gramática G, siempre es un conjunto definido
inductivamente de la siguiente forma
 Sea G una gramática cualquiera, con símbolo inicial S y sea w cualquier cadena en el mismo alfabeto de G,
entonces:
 CASO BASE Todas las cadenas w que pueden ser derivadas a partir de S sin usar ninguna regla recursiva o
indirectamente recursiva, pertenecen a l (G).

 Inducción: Si w є l (G). y alguna derivación S =>+ w contiene un símbolo no-terminal de alguna regla
recursiva o indirectamente recursiva, entonces agregar un paso más a la derivación,
usando dicha regla para obtener S =>+ x y entonces, x є l (G). .

 Cerradura: l (G) está formado únicamente por aquellos símbolos considerados en esta definición y
por ningún otro.

 Example Sea G ( {A,B}, { 0, 1}, S, Rp) una gramática cuyas reglas de producción en el conjunto Rp son las
 siguientes:
 S —> λ | 0B
 B —> 1 | 1B
 Para describir el lenguaje l (G) se debe proporcionar un caso base y una regla de inducción. Según la observación
 anterior, el caso base está formado por todas las cadenas derivables sin usar recursividad. En la gramática existen tres
reglas de producción que no son ni recursivas, ni indirectamente recursivas: S —> λ , S —> 0B y B —> 1.
 Sólo existen dos cadenas que pueden ser derivadas usando estas reglas:
 S => λ y S => 0B => 01
 Por lo tanto, queda conformado el caso base:
λ , 01 є l(G). .
 Ahora, para formar la regla de inducción, se observa la única regla recursiva: B —> 1B. Según lo establecido
anteriormente, cualquier elemento de l (G) cuya derivación contenga una ocurrencia del símbolo B se
puede usar para agregar un paso más y obtener nuevos elementos de l (G) .
 La única derivación apta para tal proceso es:
 S => 0B => 01
 Si se agrega un paso más, usando para ello la regla recursiva, se obtiene:
 S => 0B => 01B => 011
 Y así queda conformada la regla de inducción de la siguiente forma:

 Inducción:
 Si x es una cadena formada exclusivamente por símbolos 1, y 0x є l(G). , entonces también 01x є l(G). .
 Agregando la cláusula de cerradura, se tiene completa la definición inductiva de l(G).
 De acuerdo a esa definición, 01 є l(G). implica que 011 є l(G).
 Si ahora se usa ese conocimiento se puede deducir, por la regla de inducción que 0111 є l(G)
 y también que 01111 є l(G). . En general, esa estructura sugiere que:

 l(G)={01n|n є n }
GRAMÁTICAS LIBRES DE CONTEXTO
Tanto las Gramáticas libres de contexto como las regulares desempeñan un papel importante en los
lenguajes de programación.

Las gramáticas libres de contexto se utilizan para definir la sintaxis de casi todos los lenguajes de
programación.

Estas gramáticas son lo bastante potentes como pare definir una amplia variedad de lenguajes.

Además se pueden diseñar algoritmos eficientes que determinen cuando y como generar la cadena.

Definición 4.1 Una Gramática de Contexto Libre (GCL) es una cuádrupla G =


hA,T , P, Si donde
A es un conjunto finito y no vacío de símbolos denominados auxiliares, T es un
conjunto finito de símbolos denominados terminales, A \ T = ; S es el símbolo inicial de
la Gramática, S 2 A,
Gramáticas Libres de Contexto
Las GIC (Gramáticas Independientes del Contexto) o GLC (Gramáticas Libres
del Contexto) son llamadas también “Gramática en la Forma de Backus-
Naur (BNF)” (usado para describir lenguajes de programación).

Las GIC se usan para inferir si ciertas cadenas están en el lenguaje


expresado por la gramática. Hay 2 tipos de inferencia:

• Inferencia recursiva (cuerpo a cabeza/de cadenas a variables)

• Derivación (cabeza a cuerpo, expansión de producciones)

Ejemplo: cadenas palíndromas en {0,1} S | λ| 0 | 1 | 1S1 | 0S0


Derivación
Aplicación de las producciones de una Gramática para obtener una cadena de
terminales. Consiste en sustituir la variable de la cabeza por el cuerpo de la
producción.

Símbolo empleado es: ⇒ (un paso de derivación)

βAµ ⇒ β ξ µ si existe la producción A ξ A en V y ξ, µ, β en (V U T)*

⇒* Este símbolo indica múltiples pasos de derivación

Por ejemplo de la GLC anterior SÆ λ | 0 | 1 | 1S1 | 0S0 Una derivación sería la


siguiente:

S ==>4 1S1 ==>4 11S11 ==>2 110S011 ==>3 1101011 esta cadena es binaria
palíndromo
Lenguaje Si G es una GIC, G = (V, T, P, S) entonces L (G) = { w esta
en T* | S ⇒* w }

El lenguaje generado por una GLC G es el conjunto de cadenas


formadas por símbolos terminales que tienen derivaciones desde el
símbolo inicial S de la gramática Formas senténciales

Las derivaciones a partir del símbolo inicial (S), S ∗ ⇒ α S ⇒ ∗ mi α


forma sentencial izquierda. S ⇒ ∗ md α forma sentencial derecha.
FORMAS NORMALES DE GRAMÁTICAS
INDEPENDIENTES DEL CONTEXTO

Las gramáticas independientes del contexto pueden ser


expresadas en formas tales que, los lados derechos de sus
producciones estén restringidos a formatos normalizados. Es
decir que el lado izquierdo deben seguir siendo solo un no
terminal, pero sus lados derechos estarán normados para
obtener algunas características deseables
FORMA NORMAL DE CHOMSKY

 Una gramática se dice que está en la Forma Normal de Chomsky sí y


solo sí, todas sus producciones tienen en el lado derecho dos símbolos
no terminales o un solo término terminal o la cadena vacía ( este
último caso, solo si el axioma se encuentra del lado izquierdo):
 A:= BC ó A := a ó S := λ
 Donde A,B,C y S є ∑N son símbolos no terminales, S es el símbolo
inicial de la gramática y a є ∑T representa un símbolo terminal.
 (Una gramática de Chomsky en la forma Normal siempre tendrá
árboles de derivación binarios.
ALGORITMO para llevar a la Forma Nornal de Chomsky
INICIO

Sea A→ X1 X2 … Xm en P 1-

Crear producciones del tipo A → a adecuadamente

Si Xi es Terminal y Xi = a entonces

agregamos a P’ la producción Ca → a y remplazamos Xi por Ca.

Entonces todas las producciones son de forma: A→ B1B2… Bm y A →a 2-

Cuando creamos producciones A → BC adecuadamente Para los casos en que m


≥ 3, hacemos: A → B1 D1; D1→B2D2;…, Dm-2→ Bm-1 Bm

Agregamos las respectivas variables y producciones V’= V U { D1, D2 … Dm-2 }


FIN
Ejemplo: (1)A → a S → CbA | CaB
A → CbAA | CaS | a
B → CaBB | CbS | b
Ca → a
1. Dada la GLC G = Cb → b
P
(2) S → CbA | CaB
({S,A,B},{a,b},P,S), A → CbD1 | CaS | a
B → CaD2| CbS | b
D1→ AA
obtener su FNC
D2→ BB
Ca → a
2. S → bA | aB Cb → b
FNC no parece tener aplicaciones importantes
en lingüística natural, aunque si tiene
3. A → bAA | aS | a aplicación como una forma eficiente de
comprobar si una cadena pertenece a un LLC.
4. B → aBB | bS | B Los árboles de derivación son binarios.
Cualquier gramática independiente del contexto G=( ∑N, ,∑T ,S, P), podrá ser transformada en
una gramática equivalente en Forma Normal de Chomsky, mediante el mismo procedimiento.

a) Transformar G en una gramática bien formada, esto es, limpia y sin


reglas generativas ni de redenominación.

b) Para cada símbolo terminal a є ∑T, crear un nuevo símbolo no


terminal Xa y una producción Xa := a. En símbolos:

∑N = ∑N Ս {Xa } P´ = P Ս Ս {Xa := a}
c) Para cada producción de la gramática que contenga en su lado derecho tanto símbolos tanto símbolos terminales como
símbolos no terminales, reemplazarla por una nueva que tenga en lugar del símbolo terminal a su correspondiente nuevo no
terminal Xa . Esto es:

A:= α a β es reemplazada por A:= α Xa β


Cualesquiera que sean α y β. Al terminar con estos pasos se tendrá una gramática equivalente con producciones que solo
contienen en su lado derecho un solo símbolo terminal (es decir que está en forma Normal de Chomsky), o una cadena de
dos o más símbolos no terminales, entonces ya está en la Forma Normal de Chomsky.

En caso contrario:

d) Para cada producción con más de dos símbolos no terminales en su lado derecho, digamos B:= η donde η contiene dos o
mas no terminales, crear un nuevo símbolo no terminal X y reemplazar la producción por el par

A:= BX y X:= η
Procedimiento reiteradamente de ésta forma y siendo el conjunto P finito se llegará a tener todas las
producciones en la Forma Normal de Chomsky.

El procedimiento es sencillo y automatizable, por lo cual puede hacerse algorítmicamente.


 Los lenguajes libres del contexto (LC) son importantes porque sirven como mecanismo formal para
expresar la gramática de lenguajes de programación o los semiestructurados.

 Similarmente, los DTDs usados para indicar el formato permitido en documentos XML son
esencialmente gramáticas que describen lenguajes LC.

 Los lenguajes LC también se usan en biología computacional para modelar las propiedades que se
buscan en secuencias de ADN o proteínas. El estudio de este tipo de lenguajes deriva en la
construcción semiautomática de parsers (reconocedores) eficientes, los cuales son esenciales en la
construcción de compiladores e interpretes, así como para procesar textos semiestructurados. Una
herramienta conocida para esta construcción semiautomática es lex/yacc en C/Unix, y sus distintas
versiones para otros ambientes.

 Estas herramientas reciben esencialmente una especificación de un lenguaje LC y producen un


programa que parsea tal lenguaje.
 Una GLC tiene un símbolo inicial del que parten todas las derivaciones, y se dice
que genera cualquier secuencia de símbolos terminales que se puedan obtener
desde el inicial mediante reescrituras.

consideremos las siguientes reglas de reescritura:

 S −→ aSb

 S −→ ε

 donde S es el símbolo (no terminal) inicial, y {a, b} son los símbolos terminales. Las
cadenas que se pueden generar con esta GLC forman precisamente el conjunto
{anbn, n ≥ 0}, vimos que no era regular. De modo que este mecanismo permite
expresar lenguajes no regulares.
Ejemplo 1
Determinar una gramática equivalente a la que sigue, pero que la misma se encuentre en Forma Normal de
Chomsky:

G= ( {a,b,c}, { A, B, C} , A, {A:= CBc │Bb │λ, B:=BC │, C:= c } )


Para ello se revisa y se determina que no tiene reglas innecesarias, el terminal a es un símbolo inaccesible, no tienen símbolos
superfluos, ni reglas de redenominación, ni reglas no generativas (al quitar a del alfabeto de terminales queda bien formada) por
lo que:
a) Se elimina el símbolo terminal a del alfabeto de las terminales.
b) Se crean los no terminales Xb y Xc y las producciones:
c) Xb := b Xc := c
c) Para cada producción de la gramática que contenga en su lado derecho tanto
símbolos tanto símbolos terminales como símbolos no terminales, reemplazarla por
una nueva que tenga en lugar del símbolo terminal a su correspondiente nuevo no
terminal Xa . Esto es:

A:= α a β es reemplazada por A:= α Xa β

Cualesquiera que sean α y β. Al terminar con estos pasos se tendrá una gramática
equivalente con producciones que solo contienen en su lado derecho un solo
símbolo terminal (es decir que está en forma Normal de Chomsky), o una cadena de
dos o más símbolos no terminales, entonces ya está en la Forma Normal de
Chomsky.
los lenguajes independientes del contexto tienen su correspondencia

en otro tipo de dispositivo: el Autómata a Pila (AP)

Un autómata a pila es un dispositivo que tiene acceso a: • Una

secuencia de símbolos de entrada, que en general se representa por

una cinta que se desplaza frente a un mecanismo de captación de

dichos símbolos. • El símbolo superior de una memoria en pila (LIFO)


Las gramáticas libres de contexto tienen un tipo de autómata
que las define llamado ´ pushdown autómata.

• Un pushdown autómata (APD) es básicamente un ǫ-NFA con


un stack, en donde se puede almacenar una cadena y por lo
tanto se puede recordar información. ´

• Sin embargo, solo puede acceder a esta información en forma


LIFO por lo que existen lenguajes reconocidos por una
computadora pero no por un APD, por ejemplo: {0 n1 n2 n |n ≥ 1}.
Definición
 Una gramática libre del contexto (GLC) es una tupla G = (V, Σ, R,
S), donde 1. V es un conjunto finito de símbolos no terminales. 2.
Σ es un conjunto finito de símbolos terminales, V ∩ Σ = ∅. 3. S ∈ V
es el símbolo inicial. 4. R ⊂F V × (V ∪ Σ)∗ son las reglas de
derivación (conjunto finito).
 Escribiremos las reglas de R como A −→G z o simplemente A −→ z
en vez de (A, z). Ahora definiremos formalmente el lenguaje
descrito por una GLC.
Definición
Dada una GLC G = (V, Σ, R, S), la relación lleva en un paso =⇒G⊆
(V ∪ Σ)∗ × (V ∪ Σ)∗ se define como ∀x, y, ∀A −→ z ∈ R, xAy =⇒G
xzy. Definición 3.3 Definimos la relación lleva en cero o más
pasos, =⇒∗ G, como la clausura reflexiva y transitiva de =⇒G.
Escribiremos simplemente =⇒ y =⇒∗ cuando G sea evidente.
Notamos que se puede llevar en cero o más pasos a una
secuencia que aún contiene no terminales. Las derivaciones que
nos interesan finalmente son las que llevan del símbolo inicial a
Definición
Dada una GLC G = (V, Σ, R, S), definimos el lenguaje generado por G, L(G), como L(G) = {w ∈ Σ ∗ , S =⇒∗ G w}.
Finalmente definimos los lenguajes libres del contexto como los expresables con una GLC.
Definición
Un lenguaje L es libre del contexto (LC) si existe una GLC G tal que L = L(G).
Ejemplo ¿Como podrían describirse las secuencias de paréntesis bien balanceados? (donde nunca se han
cerrado más paréntesis de los que se han abierto, y al final los números coinciden).
La GLC que lo describa es sumamente simple:
S −→ (S)S S −→ ε la que formalmente se escribe como V = {S}, Σ = {(,)}, R = {(S,(S)S),(S, ε)}.
Una derivación de la cadena (())() a partir de S podría ser como sigue:
S =⇒ (S)S =⇒ ((S)S)S =⇒ (()S)S =⇒ (())S =⇒ (())(S)S =⇒ (())()S =⇒ (())(),
y otra podría ser como sigue: S =⇒ (S)S =⇒ (S)(S)S =⇒ (S)()S =⇒ (S)() =⇒ ((S)S)() =⇒ (()S)() =⇒ (())().
Esto ilustra un hecho interesante: existen distintas derivaciones para una misma cadena, producto de aplicar
las reglas en distinto orden. Una herramienta muy útil para visualizar derivaciones, y que se independiza del
orden en que se aplican las reglas, es el árbol de derivación
Ejemplos de lenguajes libre de contexto

1.- {0n1n │ n= 0,1,2…}


 Ya que las producciones son de la forma S→0S1 S →λ
2.- {0n1n 2n │ n= 0,1,2…} es un lenguaje libre de contexto

Anda mungkin juga menyukai