Está en la página 1de 23

2.

LENGUAJES REGULARES Y EXPRESIONES REGULARES




Tal como se haba expresado anteriormente, un lenguaje es un conjunto finito o
infinito de cadenas, construidos a partir de los smbolos de un alfabeto. Para
mayor comprensin de tal definicin, en este acpite se aborda una clasificacin
de los mismos, en lenguajes regulares y lenguajes no regulares, comprobables
mediante el lema del bombeo, temas que se describen en detalle a continuacin.

2.1 CLASIFICACIN DE LOS LENGUAJES





Figura No 1. Tipos de Lenguajes

2.2 LENGUAJES REGULARES

TIPOS DE
LENGUAJES
Lenguajes
regulares
Lenguajes no
regulares
Expresiones
regulares
Gramtica
Independiente del
contexto
Se especifica
mediante
Se especifica
mediante
Es un lenguaje que se forma a partir de los lenguajes bsicos como { } y {a}
donde a e

y debe cumplir tres operaciones bsicas: Unin, concatenacin y


cerradura de Kleene.

2.2.1. Definicin Formal

- { } es un lenguaje regular.
- Si a pertenece al alfabeto (

) entonces {a} es un lenguaje regular.


- Si L
1
y L
2
son lenguajes entonces L
1
L
2
, L
1
U L
2
, L
1
*, L
2
* son lenguajes
regulares.

2.2.2. Lema de Bombeo

Los lenguajes regulares poseen una propiedad muy importante que permite
demostrar que ciertos lenguajes no son regulares. Este lema es una herramienta
til para ello. Tal vez no sea fundamental, pero al menos es un inicio.

El lema de bombeo es una herramienta utilizada para demostrar que ciertos
lenguajes aparentemente regulares no lo son, por medio de una estrategia
conocida como reduccin al absurdo. Dicha estrategia consiste en partir de una
suposicin aparentemente cierta, demostrar que es falsa por medio de pasos, los
cuales poco a poco contradicen la veracidad de dicha suposicin.

Lema de bombeo
1
: para todo lenguaje regular L (sobre un alfabeto dado ) existe
una constante n N, llamada constante de bombeo para L, tal que toda cadena w
L, con |w|>n, satisface la siguiente propiedad:


1
D.K. Rodrigo. Teora de la Computacin: Lenguajes, Autmatas y Gramticas. Colombia: Unilibros, 2004.
pp. 63-66.

P1: w se puede descomponer como w=xyz, con |xy| <n, y , y para todo k>0 se
tiene xy
k
z L

Las restricciones bajo las cuales trabaja el lema de bombeo son las siguientes:

Para todo lenguaje regular infinito L, existe una constante n, dependiente de ese
lenguaje, de forma que si w es una cadena de L con |w| n, podemos partir w en
tres cadenas, x, y, z, de forma que:

w = xyz,
y (o dicho de otro modo, que |y| 1),
|xy| <= n
Para cualquier k 0, la cadena xy
k
z pertenece a L.

2.2.2.1. Demostracin de que un lenguaje no es regular

Sea el lenguaje L = {a
2n
b
n
| n 0}. Demostrar que L no es regular.

El primer paso es suponer que el lenguaje es regular. Si lo es, y como es infinito,
para l se cumplir el lema de bombeo. Sea por tanto nN la constante del lema
de bombeo para L (constante que se desconoce).

Se elije una palabra que pertenezca a L y de longitud mayor o igual a n:
w = a
2n
b
n
, tenemos que w L y |w| = 3n y por tanto |w| n, sea cual sea n.

El segundo paso es buscar las formas de partir la palabra elegida w en tres xyz
que cumplan las restricciones del lema de bombeo:

- w = xyz

- y

- |xy| <= n (siendo n la constante del lema)

Como se eligi la palabra w, cualquier x,y,z que cumplan las condiciones
(restricciones) del lema sern de la siguiente forma:

- x = a
i

- y = a
j

- (con j 1 puesto que y , con i+j <=n puesto que |xy| <= n)
- z = a
2n-i-j
b
n


Se sabe que la x y la y estarn formadas slo por aes porque la palabra w
que se ha elegido, y de la cual se esta partiendo, tiene 2n aes al principio y la
longitud de xy es menor o igual que n. Tambin se conocen las restricciones que
cumplen sus ndices (i, j) porque nos la impone el lema de bombeo. Se puede ver
adems que obviamente w = xyz, porque:

xyz = a
i
a
j
a
2n-i-j
b
n
= a
2n
b
n
= w.

El tercer paso es encontrar ahora una constante k 0 con la que ninguna de las
posibles particiones de w que se ha encontrado en el punto anterior sea
bombeable.

Si elegimos k = 2 y bombeamos las x, y, z encontradas en el punto anterior para
esa constante, tendremos que:
xy
2
z = a
i
a
2j
a
2n-i-j
b
n
= a
2n+j
b
n
(para cualquier i y j, o sea para cualquiera de las
particiones legales de la w elegida segn el lema de bombeo).

Pero como j 1 tenemos que xy
2
z = a
2n+j
b
n
, es una palabra que no pertenece al
lenguaje porque tiene ms del doble de aes que de bs (al menos una a ms).
Hemos llegado por tanto a una contradiccin (una palabra que no es bombeable
de ninguna forma para al menos una constante k en un lenguaje supuestamente
regular) que viene de suponer precisamente que el lenguaje L es regular, luego L
no es regular.

Ejemplo: Usar el lema de bombeo para demostrar que el lenguaje L = {0
i
1
i
: i > 0}
no es regular.

Solucin. Supeniendo que L es regular, y adems n es un a constante bombeo.
Sea w = 0
n
1
n
L. Entonces w se puede descomponer como w = uvx, con |v| > 1 y
|uv| < n. Por lo tanto, u y v constan nicamente de a es:

u = 0
r
, para algn r > 0,
v = 1
s
, para algn s > 1.

Entonces,
x = 0
n(r+s)
1
n
= 0
nrs
1
n

Por el lema de bombeo, uv
i
x L para todo i > 0. En particular, si i = 0, ux L.
Pero ux=0
r
1
nrs
1
n
=0
ns
1
n
. Como ns n, la cadena ux L lo cual es una
contradiccin. Se concluye entonces que L no puede ser regular.

Tomando i = 2 tambin se llega a una contradiccin: por un lado, uv
2
x L, pero

uv
2
x = a
r
a
s
a
S
a
nrs
b
n
= a
r+2s+nrs
b
n
= a
n+s
b
n


Como s > 1, a
n+s
b
n
no est en L.

El argumento anterior tambin sirve para demostrar que el lenguaje L = {a
i
b
i
: i > 1}
no es regular.

2.2.3. Propiedades de las cerraduras

Las propiedades de las cerraduras tiene gran importancia en la conformacin de
otros lenguajes regulares, ya que a travs de estas propiedades se pueden
mantener las caractersticas de regularidad de los lenguajes, por esta razn es
que se concluye que todos los lenguajes regulares son cerrados bajos estas
operaciones.

Teorema. Si L
1
y L
2
son lenguajes regulares, entonces tambin son lenguajes
regulares:

# Operacin Descripcin
(1) L
1
UL
2
Unin
(2) L
1
L
2
Concatenacin
(3) L
1
* o L
1
* Cerradura de Kleene
(4) L
1
+
o L
2
+

L
1
= * L
1

Cerradura positiva
(5) Complemento
(6) L
1
L
2
Interseccin
(7) L
1


L
2
Diferencia
(8) L
1


L
2
Diferencia Simtrica

Tabla No 1. Propiedades de las Cerraduras

Las demostraciones de estas propiedades se dejan como trabajo complementario
del lector. Consideramos que estas demostraciones no son relevantes para los
objetivos de este libro.

Un lenguaje regular puede ser finito o infinito. De acuerdo a las propiedades de
las cerraduras la unin de lenguajes regulares finitos tambin es regular, sin
embargo la unin de lenguajes regulares infinitos no necesariamente regular.


Por ejemplo,

{ } { }

1
1 /
>
= > =
i
i i n n
b a n b a
L


NO es un lenguaje regular, lo cual se puede demostrar por el lema de Bombeo.
Tambin se puede decir que los lenguajes contenidos dentro de un lenguaje
regular no necesariamente son regulares, tambin se puede concluir que un
lenguaje regular puede contener sublenguajes no-regulares, as:

Si
{ } 1 / > = n b a
n n
L


Es un sublenguaje del lenguaje regular a*b* pero L nos regular.

Las propiedades de cerradura permiten concluir, razonando por contradiccin, que
ciertos lenguajes no son regulares. Esto se ilustra en los siguientes ejemplos en
los que se usa el hecho de que los lenguajes L = {a
i
b
i
: i > 0} y L = { a
i
b
i
: i > 1} no
son regulares.

Ejemplo:

L = {a
i
b
j
: i, j > 0, ij} no es regular.
Si lo fuera, a*b* L tambin lo sera, pero
a*b* L = {a
i
b
i
: i > 0}


2.2.4. Homomorfismo

En un mbito general, el homomorfismo, a veces llamado tambin morfismo, se
define como una funcin que es compatible con toda la estructura relevante. Una
nocin ms general de morfismo se estudia abstractamente en la teora de las
categoras, la cual trata de forma abstracta con las estructuras matemticas y sus
relaciones. Por ejemplo, si un objeto consiste en un conjunto X con un orden
menor y el otro objeto consiste en un conjunto Y con orden mayor, entonces debe
valer para la funcin que, si u < v f(u) < f(v).

O, si en estos conjuntos hay definidas operaciones binarias + y *,
respectivamente, entonces debe valer que: f(u + v) = f(u) * f(v). Ejemplos de
morfismo son los homomorfismos de grupos, los homomorfismos de anillo, los
operadores lineales y las funciones continuas, entre otras.

En el contexto de los lenguajes regulares, el homomorfismo se define como una
funcin que trabaja sobre cadenas, esto quiere decir que a cada smbolo que
pertenece a una cadena se le asocia otra cadena por medio de la concatenacin.

Ejemplo:

Sea h: {0, 1}
*
{a, b}
*
definido como h (0) = ab, y h(1) = .
Entonces h (0011) = abab y h (L (10
*
1)) = L ((ab)
*
).

En las temticas anteriores se ha definido el proceso para identificar si un lenguaje
es o no regular, una vez comprendido este proceso se puede determinar que una
de las formas de especificar un lenguaje regular, es mediante expresiones
regulares, tema que se abordar en detalle a continuacin.


2.3 EXPRESIONES REGULARES

Las Expresiones Regulares simplifican la especificacin de un lenguaje regular y
sirven para efectuar representaciones de los patrones.

Los operadores que se utilizan en las expresiones regulares son los siguientes:


Operador Descripcin
.
Concatenacin
|
Unin
*
Cerradura de Klenne
+
Cerradura Positiva
?
Cerradura 0 o 1 caso
(,)
Agrupar
Tabla No 2. Operadores usados en las Expresiones Regulares


# Operador Descripcin
1. ( , ) Parntesis
2. *, + ,? Cerraduras
3. . Concatenacin
4. | Unin (se lee o y representa la unin en los lenguajes regulares).

Tabla No 3. Orden Jerrquico de Evaluacin de los Operadores


2.3.1. Definicin formal de Expresin Regular

1. es una expresin regular.

2. si a pertenece a

, entonces a es una expresin regular.



3. Si r y s son expresiones regulares, entonces su lenguaje regular es
respectivamente L(r) y L(s).
a. r es una expresin regular y se representa L (r) = {r}
b. (r | s) es una expresin regular y se representa,
L(r) U L(s) = {r} U {s} = {r, s}.
c. r . s es una expresin regular y se representa
L(r) L(s) = {r}{s} = {rs}.
d. r* es una expresin regular y se representa
L*(r) = {r}* = {
,
r , r , rrr, rrrr}.

2.3.2. Propiedades de las expresiones regulares

Sean r, s y t expresiones regulares, a partir de las cuales se definen las siguientes
propiedades:

1 r. = .r = r
2. r |
=

| r
3. r | r = r

4 (r . s) . t = r. (s . t)
5 (r | s) | t =r | (s | t)
6. r . (s | t) = r. s | r . t
7. (r | s)t = r. t | s . t
8. (r | s)* = (r* | s*)* = (r*s*)* = (r*s*)* =(r*s)*r* = r*(sr*)*
9. r(sr)* = (rs)*r
10. (r*s)*=
|(r|s)*s
11. (rs*)*=
|r(r|s)*
12. s(r|

)*(r|

)|s = sr*

13. r
+
= r . r* = r*r
14. r* = | r
+
= r
+
|

15.
(r*)
n
= r*

16. (r*)
+
=r*
17. (r*)* = r*
18. (r
+
)* = r*
19. (r
+
)
+
= r
+

20.
r
?
= | r

Todas las propiedades del lenguaje se aplican en las expresiones regulares.

Ejemplo:

= {a, b} Alfabeto
a. b
*
Expresin regular

Primer paso: verificar que cada elemento est en el alfabeto, de ser as es una
expresin regular, de lo contrario NO.

Segundo paso: Verificar que la expresin contenga las operaciones bsicas
(unin, concatenacin y cerraduras).

Habiendo aplicado el primer y segundo paso se puede identificar si es o no una
expresin regular.

Tercer paso: Utilizando la definicin formal de expresin regular se expresan las
expresiones regulares en sus respectivos lenguajes regulares, tal como se aprecia
a continuacin.

L(a).L*(b) cada uno representa un lenguaje, entonces,
L(a).L*(b)={a}.{b}*, luego se desarrolla la cerradura de Kleene de
{b}*={ ,b,bb,bbb,....} concatenado da como resultado
{a}.{b}*= {a, ab, abb, abbb, abbbb,.....}.

Por tanto, este lenguaje regular corresponde a la expresin regular a. b
*
.

Ejemplo:

= {a, b, c} Alfabeto
b
+
a | abc
?
Expresin regular

Habiendo aplicado los dos primeros pasos se puede concluir que efectivamente es
una expresin regular. A continuacin se realiza el tercer paso concerniente a la
aplicacin de la definicin formal de expresin regular.

b
+
a | abc
?
= L
+
(b).L(a) U L(a) L(b) L
?
(c) = L(b)L*(b).L(a) U L(a) L(b) (L(e)U L(c))
cada uno representa su lenguaje unitario.

= {b}{
,
b, bb, bbb, bbbb,} {a} U {a} {b} {e,c}
= {ba,bba,bbba,bbbba,}U{ab}{e,c} concatenando 2
a
parte
= {ba,bba,bbba,bbbba,}U{ab, abc} uniendo resultara
= {ba, bba, bbba, bbbba,, ab, abc }

Se concluye por tanto que este lenguaje regular corresponde a la expresin
Regular b
+
a | abc
?


Ejemplo:

= {a, b, c} Alfabeto
a
*
|b
*
Expresin regular

Habiendo aplicado los dos primeros pasos se puede concluir que efectivamente es
una expresin regular.

a
*
|b
*
= L
*
(a) U L
*
(b)
= (L(a))
*
U (L(b))
*

= {a}
*
U {b}
*

= { ,a,aa,aaa,aaaa,}U{ ,b,bb,bbb,bbbb,}
={ ,a,aa,aaa,aaaa,,b,bb,bbb,bbbb,}

Este lenguaje regular corresponde a la expresin regular.

2.3.3. Simplificacin de expresiones regulares

Para poder simplificar las expresiones es necesario manejar las propiedades de
los lenguajes descritos y demostrados anteriormente, un ejemplo seria:

[b
+
b
*
| (b| )
?
] [(b
*
b
*
)
+
b
?
]=b
*
[b b
*
b
*
| (b| | )] [((b
*
)
2
)
+
b
?
]=b
*

[b(b
*
)
2
| (b| )] [(b
*
)
+
(b| )]=b
*
[bb
*
|(b| )][b
*
b| b
*
)] =b
*

[b
+
|b| ][ b
+
|b
*
] =b
*
[(b
+
| )|b][b
+
|b
*
] =b
*
[b
*
|b][b
+
|b
*
] =b
*
[b
*
][b
*
] =b
*
[b
*
]
2
=b
*
b
*
= b
*


2.3.4. Expresiones regulares y Patrones

Teniendo claro que un patrn es una regla que describe el conjunto de cadenas de
entrada que corresponden a un componente lxico.

Ejemplo: Una variable comienza en letras seguidas de letras y/ dgitos.

De igual manera un ejemplo sencillo para comprender el concepto de patrn es el
siguiente
Por extensin tenemos: a,e,i,o,u
Por comprensin tenemos: las vocales

La descripcin por compresin es lo que corresponde a un patrn.
Otro ejemplo puede ser {0,1,2,3,4,,9} estos nmeros forma los enteros positivos.
A continuacin se definirn expresiones regulares en las cuales el patrn
corresponde de manera particular y exacta a esa expresin.

Nota 1: un patrn es nico, pero se puede escribir de diferentes formas.
Nota 2: el patrn debe ser general para todas las cadenas del lenguaje.

Ejemplo:
Dada la siguiente expresin regular, identifique el patrn.

(a|b)
*
=L
*
(a|b)
= ({a}U{b})
*
= {a,b}
*

={ ,a,b,aa,bb,ab,ba,aaa,abb,aab,aba,baa,bbb,bab,bba...}

Se observa que se pueden formar todas las cadenas con a y b con cualquier
longitud. Es decir, de longitud 2 las posibles cadenas que se pueden formar son
aa,bb,ab,ba y de longitud 3 las cadenas que se pueden formar son
abb,aab,aba,baa,bbb,bab,bba y as sucesivamente. Todas las combinaciones con
las diferentes longitudes estn dados en este lenguaje regular.

Como resultado se obtiene el siguiente patrn, correspondiente a la expresin
regular enunciada: Todas las posibles cadenas que se pueden formar con a y
b.

Ejemplo:

Dada la siguiente expresin regular, identifique el patrn.

a(a|b)
+
=a(a|b)(a|b)*

=L(a)L(a|b) L
+
(a|b)
= {a}({a}U{b}) ({a}U{b})*

= {a}{a,b}{a,b}*
={a}{a,b}{ ,a,b,aa,bb,ab,ba,........}
={a}{a,aa,ab,aaa,abb,aab,aba,.....b,ba,bb,baa,bbb,bab,bba.....}
={aa,aaa,aab,aaaa,aabb,aaab,aaba,...ab,aba,abb,abaa,abbb,abab,abba...}
={aa,ab,aaa,abb,aab,aba,aaaa,aaab,aaba,aabb,abaa,}

Como resultado se obtiene el siguiente patrn, correspondiente a la expresin
regular enunciada: Todas las posibles cadenas que se pueden formar con a y
b con prefijo a y con longitud mayor o igual a 2.

Ejemplo:

Dada la siguiente expresin regular, identifique el patrn.

(a|b|c)
*
=L
*
(a|b|c)
= ({a}U{b} U{c})
*
= {a,b,c}
*

={ ,a,b,c,aa,ab,ac,ba,bb,bc,ca,cb,cc.aaa,aab,aac,aba,abb,abc,aca,acb,acc,}

Es importante tener en cuenta que no es necesario desarrollar el lenguaje del
ejercicio propuesto para poder entender su comportamiento. Este patrn se puede
deducir a partir del patrn de la expresin regular (a|b)*, es decir, cuando existen
varios componentes lxicos operados con | y todos afectados por una cerradura
de Kleene siempre el resultados ser las posibles combinaciones entre los
diferentes componentes lxico.

Como resultado se obtiene el siguiente patrn, correspondiente a la expresin
regular enunciada: Todas las posibles cadenas que se pueden formar con a, b
y c.

Ejemplo:

Dada la siguiente expresin regular, identifique el patrn.

(a|ab)
*
= L
*
(a|ab)
= ({a} U {ab})
*
= (a, ab)
*
= { ,a, ab, aa, aab, aba, abab, aaa, aaab, aaba, aabab, }

Como resultado se obtiene el siguiente patrn, correspondiente a la expresin
regular enunciada: Todas las posibles cadenas que comienzan con a y no
tiene b seguidas.

Ejemplo:

Dada la siguiente expresin regular, identifique el patrn.

(a|b)
*
a(a|b)

= L
*
(a|b)L(a)L(a|b)
= ({a}U{b})
*
{a}({a}U{b})

= ({a,b})
*
{a} ({a,b})
= { ,a,b,aa,ab,ba,bb,....}{a}{a,b}
= {a,aa,ba,aaa,aba,baa,bba,....}{a,b}
= {aa,ab,aaa,aab,baa,bab,aaaa,aaab,abaa,abab..}

Como resultado se obtiene el siguiente patrn, correspondiente a la expresin
regular enunciada: todas las posibles cadenas que se forman con a y b
que tenga como penltimo el smbolo a.

En los casos generales del diseo de un compilador siempre se le entrega al
diseador las reglas que representan a los componentes lxicos, es por eso que la
va patrn- expresin es la direccin real que representa el diseo y especificacin
de esos patrones.

Para desarrollar este tipo de ejercicios no existe un mtodo definido. Todo
consiste en familiarizarse con las expresiones de tal manera que al leer un patrn
se pueda construir intuitivamente la expresin. Para esto, ayuda conocer en qu
consiste cada una de las operaciones bsicas (concatenacin, unin, cerradura de
Klenne, cerradura positiva y cerradura de 1 o 0 casos) y comprender claramente
su funcionamiento, adems de los alcances de combinar estas operaciones.

Ejemplo:

Todas las posibles combinaciones de a, b y c que comiencen con c.

Solucin:

Como tiene que comenzar por c, lo obvio es que una c vaya al inicio concatenada
con cualquier cadena entre a, b, y c y esa es otra expresin en si misma, que tiene
un nmero infinito de combinaciones. La mejor manera de armarlo es con una
cerradura, si fuera +, siempre la c estara acompaada por lo menos de un
carcter haciendo que la longitud de las cadenas formadas sea mnimo dos, as, la
cerradura adecuada sera * porque ella toma un estado de vaco. Las
combinaciones que se pueden formar entre a, b y c viene dado como (a | b | c)* ya
que siempre que existan elementos entre | y se le aplica una cerradura esto
permite realizar todas las combinaciones.

c(a | b | c)*

Nota: es muy importante que el patrn que se proponga sea muy especfico y
comprenda completamente todos los requisitos de la expresin regular.


Ejemplo:

Todas las cadenas que se puedan formar con a y b que tengan una longitud
mayor o igual a 4.

Solucin:

Todas las posibles combinaciones de a y b se construye con la expresin regular
(a|b)
*
; pero con esta expresin no se controla la longitud de las cadenas, para
controlar la longitud de caracteres se debe controlar as: (a|b)
4
esta expresin
asegura exactamente 4 smbolos y si se concatena con (a|b)
*
se tendran
longitudes mayores e iguales a 4, porque con (a|b)
*
se tendran todas las posibles
cadenas que se pueden formar con a y b, de tal manera que la expresin regular
queda de la siguiente forma:

(a|b)
4
(a|b)
*


Note que esta expresin tambin se puede escribir:

(a|b)
+
(a|b)
3
= (a|b)
3
(a|b)
+
= (a|b)*(a|b)
4


El orden en que se coloque la cerradura no influye porque no estamos controlando
ni el comienzo ni el final de las cadenas.

El concepto de expresin regular tiene su aplicacin prctica en las definiciones
regulares, por ello se abordar este tema a continuacin.

2.4 DEFINICIONES REGULARES

Para el abordaje formal de las Definiciones Regulares, en primera instancia se
describe la definicin regular como concepto fundamental en el proceso del
anlisis lxico y se complementa esto con la construccin de definiciones
regulares a partir de un patrn.

2.4.1. La definicin regular como concepto fundamental en el proceso del
anlisis lxico

La definicin regular permite construir expresiones regulares a partir de patrones,
los cuales poseen muchos componentes y por ende alfabetos con gran cantidad
de smbolos, es decir las definiciones regulares permiten simplificar la cantidad de
expresiones regulares utilizadas para resolver reglas que son aplicadas dentro del
contexto de los lenguajes de programacin y sobre todas aquellas estructuras que
tiene una secuencia susceptibles de ser solucionadas con el concepto de
expresiones regulares.

Definicin formal

Sea un alfabeto, entonces una definicin regular es una secuencia de
definiciones de la forma:
d
1
r
1
donde di y ri son smbolos de U {d1, d2, ....}
d
2
r
2

: :
d
n
r
n


d
n
: Son las definiciones regulares las cuales son nombres dados por el diseador,
que los asigna de acuerdo a las caractersticas o la funcin que tiene dentro del
diseo. Estas deficiones pueden estar formadas por otras definiciones
previamente definidas.

r
i
: son expresiones regulares que provienen de un alfabeto.
: la flecha se lee como define produce.
d
n
r
n
: d
n
se define como r
n
dn produce r
n


La estructura que debe contener una definicin regular completa es la siguiente:

1. Identificacin de los alfabetos.

1
= {0,1,2,3,5,6,7,8,9}

2
= {+,-}

3
= {.,,}

2. Determinacin de las definiciones bsicas. Es decir construccin de las
definiciones regulares a partir de las expresiones regulares bsicas
tomadas de los alfabetos.
dig [0-9]
signo +|-
sep .|,

3. Determinacin de definiciones compuestas (que se forman de otras
definiciones).
Numero_entero signo dig
+
Numero_decimal signo dig* sep sig
+

4. Definicin resultante (esta definicin contiene la solucin del problema)
Nmero numero_entero | numero_decimal.
Esta definicin genera dos opciones, es decir las dos posibilidades de
nmeros enteros y decimales

2.4.2. Construccin de definiciones regulares a partir de un patrn

Ejemplo:

Una variable debe empezar con una letra y los caracteres siguientes deben ser
letras y/o dgitos.

Solucin:

Lo primero es definir los alfabetos que nos servirn para desarrollar la definicin
regular, es importante que se tenga en cuenta que los alfabetos deben estar
definidos por su tipo, es decir, un alfabeto para las letras, otro para los nmeros y
otro para los signos.

1 = {a, b, c,..., z, A, B, C,..., Z}
2 = {0, 1, 2,..., 9}

Se necesita en este patrn las letras y los dgitos
Letra [ a | b | c || z | A | B | C |...| Z]

Se puede simplificar de la siguiente forma:
[a-z, A-Z] es una forma de representar

Se necesita definir los dgitos
digito 0 | 1 | 2 | . | 9 | dgito [ 0-9 ]

Ahora la definicin regular var comienza con una letra y como el enunciado del
ejercicio especifica que debe ir seguido por letras y/o dgitos, esto se puede
representar con una operacin de concatenacin de la definicin bsica letra con
las posibles combinaciones que se pueden dar entre letra y dgitos, la definicin
quedara de esta manera:

var Letra (Letra | digto)*

Ejemplo:

Los nmeros pueden ser casificados como enteros, decimales y punto flotante.
Construya una definicin regular para determinar el nmero que corresponde.

Solucin:

1
= {0,1,2,....,9}

2
= {+,-}

3
= {.}

4
= {E,e}

digto [0 - 9]
sig (+|-)
Exp(E|e)
Ent sig? Digto
+

Dec Sig
?
digito*.digito
+

Flotante Sig
?
(Ent | Dec)(Exp) Ent



Ejemplo:

Un identificador en un lenguaje de programacin que empieza con letra
mayscula y continua con mayscula o minscula, tiene como mnimo 5
caracteres y no puede terminar en las subcadenas CIA CIO (MAYUSCULAS).

Solucin:
1 = {a, b, c,..., z, A, B, C,..., Z}
may [A-Z]
min [a-z]
let [may, min]
sinC [ A,B, D-Z, min]
sinI [A-H, J-Z, min]
sinOA [B-N, P-Z, min]
iden may let
+
(sinC let
2
| let sinI let | let
2
sinOA)