You are on page 1of 4

Lenguajes Regulares Karina Vásquez

GRAMÁTICA REGULAR
Una gramática, G = (V, T, P, S), está formada por cuatro elementos:
1. El alfabeto de variables V.
2. El alfabeto de símbolos terminales T.
3. El conjunto de reglas de producción P.
4. El símbolo inicial S V.

En informática una gramática regular es una gramática formal (N, Σ, P, S) que puede
ser clasificada como regular izquierda o regular derecha. Las gramáticas regulares
sólo pueden generar a los lenguajes regulares de manera similar a los autómatas
finitos y las expresiones regulares.

Dos gramáticas regulares que generan el mismo lenguaje regular se denominan


equivalentes. Toda gramática regular es una gramática libre de contexto.

Una gramática regular derecha es aquella cuyas reglas de producción P son de la


siguiente forma:

1. A → a, donde A es un símbolo no-terminal en N y a uno terminal en Σ

2. A → aB, donde A y B pertenecen a N y a pertenece a Σ

3. A → ε, donde A pertenece a N.

Análogamente, en una gramática regular izquierda, las reglas son de la siguiente


forma:

1. A → a, donde A es un símbolo no-terminal en N y a uno terminal en Σ

2. A → Ba, donde A y B pertenecen a N y a pertenece a Σ

3. A → ε, donde A pertenece a N.

Una definición equivalente evita la regla 1 (A → a) ya que es sustituible por:


A → aL
L→ε
en el caso de las gramáticas regulares derechas y por:
A → La
L→ε
en el caso de las izquierdas.

Algunos autores alternativamente no permiten el uso de la regla 3 suponiendo que la


cadena vacía no pertenece al lenguaje.
Lenguajes Regulares Karina Vásquez

Un ejemplo de una gramática regular G con N = {S, A}, Σ = {a, b, c}, P se define
mediante las siguientes reglas:

S → aS
S → bA
A→ε
A → cA

donde S es el símbolo inicial. Esta gramática describe el mismo lenguaje expresado


mediante la expresión regular a*bc*.

Dada una gramática regular izquierda es posible convertirla, mediante un algoritmo


en una derecha y viceversa.

Además del constructor por defecto que se encarga de construir una gramática
vacía, habrá que incluir un constructor que reciba todos los elementos de la
gramática (alfabeto de variables, alfabeto de terminales y conjunto de reglas de
producción). También será necesario disponer de un método que visualice la
gramática en pantalla void print( ) , de otro que lea de un archivo de texto la
gramática void leer (String archivo), o escribirla void escribir (String archivo) y de
métodos 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 definición de una gramática hay que
tener en cuenta cómo se especificarán sus elementos en el mismo. Por ejemplo,
la gramática G = ({S,A}, {a,b}, {S aA, 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


símbolos que forman el alfabeto de las variables.

 Segunda fila.- Una cadena en la que se especifican, ordenadamente, los


símbolos que forman el alfabeto de los símbolos terminales.
Lenguajes Regulares Karina Vásquez

 Tercera fila.- Número de reglas de producción que componen la


gramática.

 Cuarta fila.- Primera regla de producción. Se especifica primero la


parte izquierda de la regla y, después, la parte derecha ambas separadas por
espacios en blanco. Cuando se trate de una producción nula, A , la cadena
vacía se representará por ‘e’.

 Siguientes filas.- Resto de reglas de producción.

donde u T* y A,B V. Esta comprobación la llevará a cabo el método boolean


esRegular ( ) dentro de la clase Gramática. Una vez, finalizada la implementación de
esta clase, dispondremos de todos los elementos necesarios para llevar a la práctica la
equivalencia entre AFDs y gramáticas regulares.

De AFD a Gramáticas Regulares

Dado un AFD, M=(Q, , , q0, F), la gramática regular, G=(V, T, P, S), que genera el
mismo lenguaje que acepta M se define:
T= ,
Si q0 no es un estado final, qo Q, entonces V=Q, S=q0 y las reglas de producción de G
son:
o Si (qi ,a) = qj, qi aqj
o Si qi F, qi
Si q0 es un estado final, entonces hay que añadir una nueva variable inicial S, V =
{S} Q, y además de las reglas de producción anteriores añadiremos las
siguientes: S q0 , S .

El método
Gramática afd2gramatica ( )
de la clase AFD se encargará de realizar el proceso de transformación de AFD a
gramática regular descrito. Además deberá modificar el método main de la clase
AFD para que también pueda encontrarse la gramática regular equivalente a
cualquier AFD. Para ello el usuario deberá escribir en la línea de órdenes:
AFD <nombre archivo>
donde <nombre archivo> indicará la ubicación y nombre del archivo de texto que
contiene la definición del autómata cuya que se desea transformar. Como
resultado main visualizará y, después, almacenará en el archivo de texto “afd2gr.txt”,
siguiendo la estructura anteriormente indicada, la gramática regular obtenida.
Lenguajes Regulares Karina Vásquez

De Gramáticas Regulares a AFNE

Dada una gramática regular, G=(V,T,P,S), el AFNE, M=(Q,T, ,q0,F), que reconoce el
mismo lenguaje que genera la gramática viene definido por:
Q = {[ ] | ( =S) ( A V, u T* tales que A u P)}. Es decir, los estados son
todas las cadenas formadas por símbolos terminales y variables que se obtienen a
partir de la parte derecha de las producciones al ir eliminando símbolo a
símbolo desde el inicio de estas. P.ej. si la parte derecha de la regla de producción es
la cadena 10A, obtendremos los estados [10A], [0A], [A] y [ ].

Ejemplo:

 Derivación de la gramática correspondiente al lenguaje del ej. 4 del apunte de


autómatas finitos
L4 = { x / x {0, 1}* y x contiene la subcadena 00 ó x contiene la subcadena 11}
L4 = L(M4Dmin), M4Dmin = < {p0, p1, p2, p3}, {0, 1}, _, p0, {p3}>

Está definida por el siguiente diagrama de transición de estados

Como al estado inicial no entran arcos, se asocia únicamente el símbolo distinguido S.

La gramática correspondiente a este lenguaje es


G = ({A, B, C}, {0, 1}, P, S), siendo P el siguiente conjunto:
S _ 0A ya que _ (po, 0) = p1 y S y A están asociado a p0 y p1 respectivamente.
S _ 1B ya que _ (po, 1) = p2 y S y B están asociado a p0 y p2 respectivamente.
A _ 0C
A_0
A _ 1B
B _ 0A
B _ 1C
B_1
C _ 0C
C_0
C _ 1C
C_1

BIBLIOGRAFÍA:

 Marin, Miguel, Gramaticas Regulares [Seriada en línea].Pág.1-4 Disponible en: URL:


http://www.exa.unicen.edu.ar/catedras/ccomp1/Apunte3.pdf.Consultado
Octubre 26, 2010

 Valladares, Armando, Lenguajes Formales [Seriada en línea].Pág.3-5 Disponible en: URL:


http://www.scribd.com/doc/19220995/Automatas-finitos-deterministas-
teoria-de-la-computacion.Consultado Octubre 26, 2010