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 | Ɛ