GLC

Transcripción

GLC
GRAMÁTICAS LIBRES
DE CONTEXTO
Definición
• Una gramática libre de contexto (GLC) es una descripción
estructural precisa de un lenguaje. Formalmente es una
tupla G=<Vn, Vt, P, S>, donde
• Vn es el conjunto finito de símbolos no terminales
• Vt es el conjunto finito de símbolos terminales (Vn ∩ Vt = ∅)
• P es el conjunto finito de producciones que se pueden ver como
relaciones definidas en Vn × (Vn ∪ Vt*)
• S es el símbolo inicial de la gramática.
• Las producciones tienen la forma A→𝛼 donde A ∈ Vn y 𝛼 es una
expresión ya sea compuesta por símbolos no terminales como
terminales (𝛼 ∈ (Vt ∪ Vn)*) ó la cadena nula Ɛ
• Una producción puede verse como una regla de
reescritura que indica cómo reemplazar símbolos no
terminales por la expresión correspondiente en la parte
derecha de la producción.
• Así partiendo de algún A ∈ Vn, se pueden aplicar las
reglas de P hasta alcanzar a una expresión compuesta
únicamente por símbolos terminales. A ésta expresión se
le denomina frase o lexema. A las expresiones formadas
por símbolos terminales y no terminales se les denomina
formas de frase.
Convenciones
• Letras romanas mayúsculas (A, B, C, D, E, S)
•
•
•
•
representan símbolos no terminales (variables).
Letras romanas minúsculas (a, b, c, d, e), dígitos o
expresiones encerradas entre comillas simples
representan símbolos terminales.
X, Y, Z, W representan terminales o no terminales
u, v, w, x, y, z representan cadenas de terminales (frases).
Letras griegas minúsculas 𝛼, 𝛽, 𝛾 representan formas de
frases.
Derivaciones
• Para cualquier GLC G, si A→ 𝛽 en P y 𝛼, 𝛾 ∈ 𝑉𝑛 ∪ 𝑉𝑡 *,
entonces 𝛼𝐴𝛾
𝛼𝛽𝛾, lo cual se lee “la forma de frase
𝛼𝐴𝛾 deriva directamente a 𝛼𝛽𝛾”. Si se tiene que para
𝛼1 , 𝛼3, … , 𝛼𝑘 ∈ 𝑉𝑛 ∪ 𝑉𝑡 *, (k >=1), 𝛼1 𝛼3 … 𝛼𝑘 se
∗
dice que “𝛼1 deriva a 𝛼𝑘 “, lo cual se escribe 𝛼1 𝛼𝑘
• La relación
entre formas de frase tiene las siguientes
propiedades:
• 𝛼
𝛼 para cualquier 𝛼,
• Si 𝛼
•
∗
∗
𝛽y𝛽
∗
𝛾 entonces 𝛼
∗
𝛾
es la cerradura reflexiva y transitiva de
.
Definición Lenguaje Libre de Contexto
• Dada una GLC G, se define al lenguaje generado por G
como el conjunto de frases derivadas por G partiendo del
símbolo inicial.
• L(G)= { w | w ∈ Vt* y S
∗
w}
• Un lenguaje libre de contexto es aquel generado por
alguna GLC.
Ejemplo
• Sea Go= <Vno, Vto, Po, S> definido por:
• La derivación de la frase “4-3+1”,
• exp
exp + dig
•
exp – dig + dig
•
dig – dig + dig
•
4 – dig + dig
•
4 – 3 + dig
•
4–3+1
• Por lo tanto la frase “4-3+1” pertenece al lenguaje generado por Go.
Tipos de derivación
• En cada paso de una derivación se pueden aplicar las reglas
(producciones) en cualquier orden, por lo cual se debe elegir:
1. Qué simbolo no terminal reducir,
2. Si la regla de producción para ese no terminal elegido tiene
varias alternativas, cual de ellas usar.
• Se puede elegir siempre el no terminal más a la izquierda en
cada paso, la derivación así obtenida se llama derivación más
a la izquierda: 𝑤𝐴𝛾 𝑤𝛽𝛾, para una A→𝛽 ∈ P. Si 𝛼 deriva a 𝛽
mediante una derivación por la izquierda se escribe 𝛼
𝛽
𝑚𝑖
• En el caso de elegir el no terminal más a la derecha se llama
derivación más a la derecha o derivación
canónica: 𝛾𝐴𝑤
𝛾𝛽𝑤
𝑚𝑑
• La derivación de la frase “4-3+1” por más a la derecha
• exp
exp + dig
•
exp – dig + 1
•
dig – 3 + 1
•
4–3+1
exp + 1
exp – 3 + 1
• Cuando, para la misma expresión es posible encontrar
más de una derivación más por la izquierda (o por la
derecha), se dice que la gramática es ambigua.
Ejercicio
• Sea G1 = < Vn1, Vt1,P1, exp> una GLC. Demuestre que
G1 es ambigua.
Solución
• Podemos construir más de una derivación por la izq para
“5-8*2”.
Ambigüedad
• La ambigüedad significa que una expresión del lenguaje
puede tener más de una interpretación, lo cual no esta
permitido.
• En el ejemplo, la ambigüedad está asociada con los
operadores “*” y “-”, por lo que se debe establecer su
asociatividad y precedencia para evitar la ambigüedad.
Ejercicios
Ejercicios
• Construya una GLC que genere cada uno de los
siguientes lenguajes:
1. Listas de dígitos separados por comas.
2. Cadenas que representen números en punto flotante al
estilo de Pascal o C.
3. Identificadores (i.e. secuencias de letras ó dígitos que
incian siempre por una letra) en lenguaje tipo C o
Pascal.
4. Palabras palíndromas (que se leen de igual forma en
ambos sentidos) sobre el alfabeto {a,b}.
5. El conjunto de todas las palabras sobre el alfabeto {a,b}
que tienen 2 veces más a’s que b’s.
6. Números impares en binario.
Ejercicio
• Obtener la gramática que representa al lenguaje {anb2n|
n>=0}
Solución
• S→aSbb | abb | Ɛ

Documentos relacionados