You are on page 1of 7

Gramática regular

De Wikipedia, la enciclopedia libre


Saltar a navegación, búsqueda

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.

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.

OBJETIVO DE LAS EXPREXIONES REGULARES

Comprender y analizar las diferentes operaciones con las que se puede llegar a
obtener expresiones regulares.

Es importante comprender los lenguajes regulares y la manera en que podemos


obtener una expresión regular a partir de expresiones definidas.

Podemos obtener lenguajes más complicados a partir de bloques de construcción


de lenguajes más sencillos, por medio de técnicas como unión, concatenación y
estrella de Kleene.

DEFININCION

Una Expresión Regular (para un alfabeto ) se define como sigue:

a) es una expresión regular

b) Cada miembro de es una expresión regular

c) Si p y q son expresiones regulares, también lo es (pUq)

d) Si p y q son expresiones regulares también (p.q)

e) Si p es una expresión regular también lo es p*

Los lenguajes regulares son aquellos que son reconocidos por autómatas finitos y
son también aquellos lenguajes generados por gramáticas regulares.

A continuación se verá como se pueden construir los lenguajes regulares a partir


de bloques de construcción, los cuales contendrán el lenguaje vacío y todos los
lenguajes de cadenas simples con longitud uno.
Ejemplo:

Si = {x,y}, entonces los lenguajes {x} y {y} serian los bloques de construcción
naturales para la construcción de otros lenguajes de .

UNIÓN:

La técnica más directa para construir lenguajes mas complicados a partir de los
más básicos, es combinar los lenguajes, utilizando la operación de unión de la
teoría de conjuntos; esta operación se representa por U.

Para saber si la unión de dos lenguajes regulares genera otro lenguaje regular,
considere los siguientes diagramas.

Para construir un diagrama que acepte la unión de lenguajes se introduce un


nuevo estado inicial a partir del cual podamos entrar a uno de los diagramas
originales sin poder regresar.
La construcción general es la siguiente:

Dibuje un nuevo estado inicial; declárelo como un estado de aceptación si y solo si


uno de los estados iniciales anteriores era de aceptación.

Para cada estado que sea punto de destino de un arco de alguno de los estados
iniciales originales, dibuje un arco, con la misma etiqueta, a partir del nuevo estado
inicial; elimine la característica de inicio de los estados iniciales originales.

CONCATENACIÓN:

Otra técnica es recopilar todas las cadenas formadas al concatenar una cadena
del primer lenguaje y una cadena del segundo. La colección de las cadenas
formadas de esta manera se denominan concatenación de dos lenguajes. Así; sí
L1={x, xy} y L2={yx, yy} entonces el lenguaje L1 L2 = {xyx, xyy, xyyx, xyyy}.
Observe que L1 L2 no es igual a L2 L1 = {yxx, yxxy, yyx, yyxy}.

Suponga que tenemos los diagramas de transiciones T1 y T2 que aceptan los


lenguajes L1 y L2 respectivamente, y deseamos construir un diagrama de
transiciones que acepte L1 L2. Se procede de la siguiente forma: a partir de cada
estado de aceptación de T1, dibuje un arco hacia cada estado de T2 que sea el
destino de un arco del estado inicial de T2; rotule cada uno de estos arcos con la
etiqueta del arco correspondiente en T2; deje que los estados de aceptación de T1
sigan siendo estados de aceptación si y solo si el estado inicial T2 es tamben
estado de aceptación.
Ejemplo:

El lenguaje aceptado por el diagrama combinado será L1°L2. Así mismo la


concatenación de dos lenguajes regulares también es regular.

ESTRELLA DE KLEENE:

La última operación es la estrella de Kleene; y difiere de las anteriores en que


amplia un solo lenguaje en lugar de combinar dos. Esto se logra formando todas
las concatenaciones de cero o más cadenas del lenguaje que se amplía (la
cadena c será miembro del lenguaje ampliado). Esta operación se representa por
medio de un asterisco (*).

Por ejemplo:

Si L1 = {y} L1* seria el lenguaje que consiste en todas las cadenas finitas de varias
y, incluyendo la cadena vacía , o si L2 = {y y} entonces L2* serian todas las
cadenas que consisten en un numero par de y, incluyendo .

Ejemplo: Diagrama de Transiciones.


El primer paso para modificar el diagrama de transiciones a fin de que acepte la
estrella de Kleene del lenguaje originalmente aceptado es dibujar un nuevo estado
inicial y concatenarlo al diagrama original, por cada estado que sea punto de
destino de un arco de alguno de los estados iniciales originales dibujamos un arco
con la misma etiqueta desde el nuevo estado inicial; hacia el destino de un arco
del estado inicial del diagrama original luego designamos a este como estado de
aceptación.

Una vez que se ha agregado el nuevo estado inicial, se modifica el diagrama para
poder establecer un ciclo de los estados de aceptación al inicio del programa,
añadiendo un arco de cada estado de aceptación a cada estado que es el destino
de un arco del estado inicial. Cada uno de estos nuevos arcos se rotula con la
etiqueta que corresponda al arco del estado inicial. El resultado es un diagrama
que acepta una cadena no vacía si y solo si esa cadena es la concatenación de
cadenas aceptadas por el diagrama original. Se concluye que la estrella de Kleene
de cualquier lenguaje regular es regular.

BIBLIOGRAFIA.
http://es.wikipedia.org/wiki/Gram%C3%A1tica_regular

http://148.202.148.5/cursos/cc209/teoriacomp/MODULO_3/Teoria_3_7.htm
(RELACIÓN ENTRE AUTÓMATAS FINITOS Y GRAMÁTICAS REGULARES)