Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. Gramticas Regulares
Una gramtica, G = (V, T, P, S), est formada por cuatro elementos: 1. El alfabeto de variables V. 2. El alfabeto de smbolos terminales T. 3. El conjunto de reglas de produccin P. 4. El smbolo inicial SV. La clase Gramtica se utilizar para representar cualquier gramtica. As, necesitaremos disponer de las variables de instancia y mtodos necesarios para manipularlas de acuerdo con la definicin anterior. Analicemos, en primer lugar, qu variables de instancia sern necesarias. Los alfabetos de variables y de smbolos terminales pueden representarse mediante dos objetos de tipo String, asumiendo que los elementos que los componen se dan de manera ordenada y que el primer carcter de la cadena que representa al alfabeto de variables corresponde al smbolo inicial de la gramtica. El conjunto de reglas de
produccin se representar mediante un objeto de la clase Vector que contendr a su vez objetos de la clase Produccin1 . Adems del constructor por defecto que se encarga de construir una gramtica vaca, habr que incluir un constructor que reciba todos los elementos de la gramtica (alfabeto de variables, alfabeto de terminales y conjunto de reglas de produccin). Tambin ser necesario disponer de un mtodo que visualice la gramtica en pantalla void print( ), de otro que lea de un archivo de texto la gramtica void leer (String archivo) , o escribirla void escribir (String archivo)y de mtodos que permitan acceder a sus elementos de manera individual String getVariables( ), String getTerminales( ), String getProducciones( ). A la hora de leer y escribir el archivo con la definicin de una gramtica hay que tener en cuenta cmo se especificarn sus elementos en el mismo. Por ejemplo, la gramtica G = ({S,A}, {a,b}, {SaA, A aAb|b}, S) se representar en un archivo de texto de la manera siguiente: SA ab 3 S aA A aAb Ab Cada una de las filas de este archivo representa: Primera fila.- Una cadena en la que se especifican, ordenadamente, los smbolos que forman el alfabeto de las variables. Segunda fila.- Una cadena en la que se especifican, ordenadamente, los smbolos que forman el alfabeto de los smbolos terminales. Tercera fila.- Nmero de reglas de produccin que componen la gramtica. Cuarta fila.- Primera regla de produccin. Se especifica primero la parte izquierda de la regla y, despus, la parte derecha ambas separadas por espacios en blanco. Cuando se trate de una produccin nula, A , la cadena vaca se representar por e. Siguientes filas.- Resto de reglas de produccin.
Una gramtica se dice que es regular si sus reglas de produccin son de la forma A uB A u
Esta clase se proporcionar como documentacin adicional e incluye todos sus mtodos y documentacin propia.
Unidad 4
donde uT* y A,BV. Esta comprobacin la llevar a cabo el mtodo boolean esRegular ( ) dentro de la clase Gramtica. Una vez, finalizada la implementacin de esta clase, dispondremos de todos los elementos necesarios para llevar a la prctica la equivalencia entre AFDs y gramticas regulares.
El mtodo
Gramtica afd2gramatica ( )
de la clase AFD se encargar de realizar el proceso de transformacin de AFD a gramtica regular descrito. Adems deber modificar el mtodo main de la clase AFD para que tambin pueda encontrarse la gramtica regular equivalente a cualquier AFD. Para ello el usuario deber escribir en la lnea de rdenes:
AFD <nombre archivo>
donde <nombre archivo> indicar la ubicacin y nombre del archivo de texto que contiene la definicin del autmata cuya que se desea transformar. Como resultado main visualizar y, despus, almacenar en el archivo de texto afd2gr.txt, siguiendo la estructura anteriormente indicada, la gramtica regular obtenida.
La funcin de transicin, , se define de la manera siguiente: o Si A es una variable, ([A], ) = {[] | AP}. Es decir, aadiremos tantas producciones nulas como reglas de produccin tenga la variable y cada una de ellas conducir al estado formado por la cadena que aparece en la parte derecha de estas reglas. o Si aT y T* T* V, entonces ([a],a) = {[]}. Para los estados cuya cadena comienza por un smbolo terminal, iremos consumiendo ste y aadiendo una transicin que conduzca al estado formado por la palabra que queda despus de eliminarlo. q0 = [S] F = {[]}.
El mtodo
AFNE gramatica2afne ( )
de la clase Gramtica se encargar de realizar el proceso descrito de transformacin de una gramtica regular a AFNE. Adems deber incluir un mtodo main en la clase Gramtica para que pueda encontrarse el AFNE equivalente. Para ello el usuario deber escribir en la lnea de rdenes:
Gramtica <nombre archivo>
donde <nombre archivo> indicar la ubicacin y nombre del archivo de texto que contiene la definicin de la gramtica regular que se desea transformar. Como resultado main visualizar y, despus, almacenar en el archivo de texto gr2afne.txt, siguiendo la estructura anteriormente indicada en la Unidad 2, el AFNE obtenido.