Gramticas Formales
Una gramtica formal es una cuadrupla G = (N, T, P, S)
N = conjunto finito de smbolos no terminales NT= T = conjunto finito de smbolos terminales S = smbolo distinguido o axioma S (N T)
= A =
A N {S}
, , (N T)*
De acuerdo a formato de reglas se pueden definir 4 tipos de gramticas y sus correspondientes lenguajes
Aw
A N {S} w (N T)* - {}
Del lado izquierdo de la regla un no terminal o el simbolo distinguido S Del lado derecho de la regla una combinacin de terminales y/o no terminales excepto . Si L se agrega S
donde P = { S A, A aAb, A ab }
Derivaciones de cadenas
S A ab S A aAb aabb
donde P = { S A, A aAb, A ab }
S A a A b aabb S A a A b aa A bb aaabbb
No importa en qu contexto est el no terminal A Se lo reemplaza por la cadena en el lado derecho de la regla de produccin
Caso 1)
Caso 2)
SA
1 2 n
* decimos que 1 n
i (N T)*
* S aaabbb
Lenguaje generado por una gramtica libre del contexto G = (N, T, P, S):
* L(G) = { x / S x y x T* }
Una cadena x L(G), si se puede generar a partir de S y solo est formada por smbolos terminales
Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009
Ejemplos ((())) ( ( ) )( ) (( )
L L L
bien definida segn BNF anterior mal definida segn BNF anterior mal definida segn BNF anterior
rbol
El concepto de rbol es muy usado en computacin. Un rbol es un conjunto de puntos, llamados nodos, unidos por lneas, llamadas arcos. Un arco conecta dos nodos distintos.
Nodo raz Nodo interior Rama Nodo hoja
Propiedades del rbol: - hay un nico nodo distinguido, llamado raz. - Un nodo padre puede tener conectados uno o mas nodos hijos. El padre de un nodo se dibuja por encima de los nodos hijos. El nodo raz no tiene padre. Los nodos hojas no tienen hijos. - cada nodo es alcanzable desde el nodo raz mediante un nico camino
Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009
rbol de derivacin
Permite mostrar grficamente la derivacin de cualquier cadena de un lenguaje a partir del smbolo distinguido de una gramtica que genera el lenguaje. Un rbol es un rbol de derivacin para una gramtica G = (N, T, P, S) si: - La raz del rbol se rotula con S, el smbolo distinguido de G - Cada nodo interior est rotulado con un smbolo de N - Cada hoja est rotulada con un smbolo de N T - Si un nodo interior tiene rtulo A y sus hijos tienen rtulos x1, x2, ..., xn entonces la regla A x1 x2 ...xn P Para cada cadena del lenguaje generado por una gramtica es posible construir al menos un rbol de derivacin en el cual cada hoja tiene como rtulo un smbolo terminal y si se leen las hojas de izquierda a derecha se obtiene la cadena.
Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009
rbol de derivacin
Ejemplo:
donde
rbol de derivacin
Ejemplo: BNF para expresiones aritmticas simplificadas <exparit> :: = <exparit> + <exparit> <exparit> - <exparit> <exparit> * <exparit> <exparit> / <exparit> (<exparit>) <numero> <numero> :: =<digito> <digito><numero> <digito> :: =0 1 2 3 4 5 6 7 8 9
4 + 53
+
<exparit> <numero> <digito><numero> 5 <digito> 3
4+5*
<exparit> <exparit> <numero> <digito> 4 <numero> <digito> 5
<exparit>
<exparit>
<exparit>
no se llega a un terminal
4+53 es exparit
4+5* no es exparit
rbol de derivacin
Ejemplo: BNF para expresiones aritmticas simplificadas <exparit> :: = <exparit> + <exparit> <exparit> - <exparit> <exparit> * <exparit> <exparit> / <exparit> (<exparit>) <numero> <numero> :: =<digito> <digito><numero> <digito> :: =0 1 2 3 4 5 6 7 8 9 Se quiere derivar la expresin aritmtica 3*4 + 5
<exparit> <exparit> <exparit> <numero> <digito> 3
3*4 + 5
3*4 + 5
Si para la misma cadena 3*4+5 hay dos rboles diferentes: BNF es ambiguo
<exparit>
<numero>
3 4 5 4
Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009
Gramticas ambiguas
En el ejemplo anterior, existen dos rboles de derivacin para la misma cadena gramtica ambigua Una GLC G es ambigua si existe al menos una cadena de L(G) para la cual hay dos o ms rboles de derivacin distintos. Una GLC G es no ambigua si toda cadena de L(G) tiene un nico rbol de derivacin. La ambigedad puede ser un problema para los lenguajes en los que el significado depende, en parte, de la estructura (lenguaje natural, lenguajes de programacin). En el ejemplo anterior 3*4+5 puede ser igual a 17 o 27 segn el rbol de derivacin que se construya. Una cadena que tiene ms de un rbol de derivacin suele tener ms de un significado entonces en aplicaciones de compilacin es necesario disear, cuando sea posible, gramticas no ambiguas.
Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009
Gramticas ambiguas
En algunos casos, dada una gramtica ambigua, se puede encontrar otra no ambigua que genera el mismo lenguaje. Por ejemplo, es posible definir una GLC no ambigua para generar las expresiones aritmticas del ejemplo anterior. Si todas las GLC para un lenguaje L son ambiguas se dice que L es inherentemente ambiguo. Por ejemplo, L = {ai bj ck / i, j, k 0 y (i = j j = k )} es inherentemente ambiguo Intuitivamente, cualquier GLC para L debe tener reglas generar cadenas en las que i = j y tambin reglas para generar cadenas en las que j = k. Si una cadena tiene i = j = k claramente tendr dos derivaciones posibles. Teorema: No existe un algoritmo para determinar si una GLC es ambigua o no.
Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009
BNF no ambiguo
Ejemplo: BNF no ambiguo para expresiones aritmticas simplificadas <exparit> :: = <exparit> + <termino> <exparit> - <termino> <termino> <termino> :: = <termino> * <factor> <termino> / <factor> <factor> <factor> :: =(<exparit>) <numero> <numero> :: =<digito> <digito><numero> <digito> :: =0 1 2 3 4 5 6 7 8 9
<exparit> <exparit> <termino> <termino> <factor> <numero> <digito> 3 4
Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009
3*4 + 5