Beruflich Dokumente
Kultur Dokumente
a (b|ba)
La primera denota el lenguaje regular formado por dos palabras {baa, bb} y la
segunda denota el lenguaje regular de infinitas palabras {b, ba, ab, aba, aab,
aaba, }.
Entre los smbolos que aparecen en una expresin regular cabe distinguir los
caracteres y los metacaracteres; los caracteres son los smbolos que pertenecen al
alfabeto sobre el que est definida la expresin regular; los metacaracteres son los
smbolos que no pertenecen a ese alfabeto: los operadores y los parntesis.
En la escritura de las expresiones regulares el punto representativo de la
concatenacin entre smbolos del alfabeto suele suprimirse; de acuerdo con esta
notacin simplificada, las anteriores expresiones suelen escribirse as:
6
baa|bb
*
a (b|ba)
baa | bb
a
( b | ba )
En una especificacin Lexse incluyen expresiones regulares, pero escritas con una
notacin que es una ampliacin de la notacin empleada en la definicin (en
sentido estricto) anterior. Esta ampliacin tiene como principales objetivos:
- hacer ms cmoda y escueta la escritura de las expresiones regulares,
- distinguir de manera precisa los caracteres del alfabeto y los metacaracteres
empleados en la escritura de las expresiones regulares.
Sea el alfabeto = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, la expresin regular que
denota las palabras de longitud uno es:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
{x, y, }
(x|y)?
{x, y, }
xz?|zzy
(xz)?|zzy
{, xz, zzy}
(x|y)+z
presencia de n veces
{xyxy, zzz}
(xy){2,3}
{xyxy, xyxyxy}
xy{2,}z
x(y{2,4})z
x{1,}
xy{1,}
representa las palabras formadas por la letra x, seguida de una cifra decimal,
seguida de la letra y; con la notacin de los corchetes se puede escribir as:
x[0123456789]y
10
una
[^97531a-z]
cifra impar
[:;,.]
[..,;::.]
y el conjunto cuyos caracteres son las cifras y las letras (minsculas y maysculas),
as:
[0-9a-zA-Z]
[a-z0-9A-Z]
[00-90a-z0A-Z0]
(n|N)(o|O)|(s|S)(i|I)
11
maysculas
[nN][oO]|[sS][iI]
3[a-z]|[A-Z]*9
x[<>]?y
z[:=]z
x[0-9]{2}
palabras de cuatro caracteres; el primero y el tercero son x; el segundo y el
cuarto son una cifra decimal; una palabra denotada es, por ejemplo, x5x3;
sin embargo, la palabra x53 no est denotada
z(yx[12]{0,2})
{z, zyx1, zyx2, zyx1yx1, zyx1yx2, zyx2yx1, zyx2yx2}
[0-9]+[a-z]+
las palabras formadas por una o ms cifras decimales, seguidas de una o
ms letras minsculas
[A-Z][,;]{1,}
las palabras con un nmero par de caracteres; los que ocupan las posiciones
impares son letras maysculas y los de las posiciones pares son una coma o
un punto y coma; por ejemplo: P,Q,P;M,
Si en una misma expresin regular Lex hay varias definiciones de conjuntos de
caracteres, para asociar los correspondientes corchetes de abrir y de cerrar se
considera un recorrido de izquierda a derecha de los caracteres (y operadores) de
la expresin regular; en este recorrido, una vez hallado un corchete de abrir, se
asocia con el primero de los corchetes de cerrar que se encuentra (no tiene sentido
alguno pensar en "corchetes anidados"). As, por ejemplo, la expresin x[[]x
representa la palabra x[x ya que el segundo de los corchetes de abrir es el nico
carcter del conjunto que se define delimitado por los otros dos corchetes. Esa
expresin regular es, en efecto, correcta aunque hay ms corchetes de abrir que de
cerrar: de los dos corchetes de abrir uno es carcter y el otro es metacarcter.
Los conjuntos de caracteres y los metacaracteres
La forma en que se incorpora un conjunto de caracteres como parte de una
expresin regular Lex hace que los corchetes de abrir y de cerrar deban
considerarse como metacaracteres en algunas de sus presencias. Considrense las
siguientes dos situaciones o estados que se presentan cuando se recorre una
expresin regular de izquierda a derecha:
1) Estado sin un conjunto abierto, cuando no se ha encontrado ningn corchete
de abrir o si se ha encontrado alguno tambin se ha encontrado su
correspondiente corchete de cerrar.
2) Estado con un conjunto abierto, cuando se ha encontrado un corchete de abrir
y todava no se ha encontrado su correspondiente corchete de cerrar.
Si no hay un conjunto abierto, el corchete de abrir es un metacarcter y el corchete
de cerrar es un carcter; si hay un conjunto abierto el corchete de abrir es un
12
P[-75]Q
[uv^]
0[^^1-9]
las palabras formadas por 0, seguido de un carcter; este carcter puede
ser cualquiera de los del alfabeto (sobre el que se define la expresin
regular), excepto el carcter ^ y uno de los dgitos del 1 al 9
3[^-si]4+
las palabras formadas por 3, seguido de un carcter, seguido de uno o ms
4; el segundo carcter de las palabras puede ser cualquiera del alfabeto en
el que se definen las expresiones, excepto los caracteres s, i y a[[]]b
la palabra (de cuatro caracteres) a[]b (los primeros corchetes de abrir y de
cerrar son metacaracteres, mientras que los otros dos corchetes son
caracteres)
[[01]]
|
^
*
-
13
[01\-63]
\**
a\\u
{0, 1, 3, 6, -}
\(g+\)
[\[\]]
[[\]]
[\][]
14
\"Antes\"
"+""-""*""/"
"+-*/"
a"*"b*
b[1"-"9]a
x"\+"y\*
"Antes"
+-*/
"De\\s\"dE"
"\"
Antes
x+y*
De\s"dE
x\ny
x+\n
x\\ny
x[\n:;]y
15
Las tres palabras abb, abbbb y ab estn denotadas por la expresin regular ab+;
pero slo la palabra abb cumple adems la condicin de estar situada al principio
de la lnea y slo la palabra ab cumple adems la condicin de estar situada al final
de la lnea.
Para indicar que una palabra slo se considera efectivamente denotada por
una expresin regular cuando est denotada por ella y adems est situada al
principio de la lnea se emplea el smbolo ^; si se quiere exigir que est al final de
la lnea, se emplea el smbolo $ . El smbolo ^ se coloca como primer carcter de
la expresin y el smbolo $ como ltimo carcter de la expresin. La presencia del
smbolo $ obliga a considerar los ltimos caracteres de una lnea, pero excluyendo
siempre el carcter de final de lnea. En una misma expresin regular pueden
incluirse el metacarcter de principio y tambin el metacarcter de final. Por
ejemplo,
^ab+
las palabras denotadas por la expresin ab+ que estn situadas al principio
de una lnea; en las palabras de la figura anterior, abb est denotada por
^ab+, pero no lo estn las palabras abbbb y ab
ab+$
las palabras denotadas por la expresin ab+ que estn situadas al final de
una lnea; en las palabras de la figura anterior, ab est denotada por ab+$,
pero no lo estn las palabras abb y abbbb
^[0-9]{4}
[0-9]$
^-+$
16
La palabra , que est denotada por una cierta expresin regular Lex, puede
considerarse como una subpalabra de la secuencia de caracteres grabados en el
fichero de tipo texto; el contexto por la derecha de est formado por los
caracteres situados a su derecha. Por ejemplo,
abab*:1234;B
:1234
:1234
:1234;
:1234;B
(ab*)+\*/:[0-9]+
(ab)+\*/[:;]
17
/\n
son equivalentes. Por este motivo no est permitido que en una misma expresin
regular Lex se encuentren los dos metacaracteres $ y /.
Las siguientes ejemplos pretenden mostrar la utilidad de la fijacin de un contexto
por la derecha.
[a-zA-Z]+/!
las palabras que empiezan por una letra mayscula que va seguida de cero
o ms letras minsculas, siempre y cuando a continuacin de la ltima letra
de la palabra se encuentre un espacio en blanco, un carcter tabulador, un
carcter de final de lnea, una coma, un punto y coma o un punto (en el
fichero donde est grabada la palabra); el carcter del contexto por la
derecha no pertenece a palabra denotada
Contexto por la izquierda
Se puede imponer que una palabra slo sea denotada efectivamente por una
expresin regular Lex cuando los smbolos grabados a la izquierda de la palabra
cumplan una determinada condicin; para ello se tienen las denominadas
condiciones de contexto (start conditions); cada condicin de contexto tiene
asociado un nombre; si se quiere imponer una condicin de contexto a una
expresin regular se escribe el nombre de la condicin, delimitado por los smbolos
< y >, seguido inmediatamente por la expresin regular afectada. Por ejemplo, la
expresin regular Lex
<Condicion>ab+
18
el final de la expresin.
Para conseguir que el espacio en blanco se considere como carcter se
emplean las mismas notaciones ya vistas para otros smbolos que tambin pueden
ser metacaracteres y caracteres. A continuacin se muestran unos ejemplos (en
ellos el smbolo recalca la presencia del carcter espacio en blanco en una
expresin regular y el smbolo marca el espacio en blanco en las palabras denotadas; el smbolo seala la posicin del espacio en blanco que es el metacarcter
que indica el final de la expresin regular).
el""sur
el
sur
z[:=]z
0[]1+
0[\]1+
0""1+
palabra
(de
siete
caracteres)
0\1+
la
""+
[]+
[\]+
sal:""
sal:
(\|\t)+
(""|\t)+
[\\t]+
("\"|\t)+
\t
\v
\b
\r
\a
\f
Las dos primeras (que son las que habitualmente se emplean en las
especificaciones Lex) se refieren al final de lnea y al tabulador (horizontal) y ya se
han comentado anteriormente. En todas ellas la presencia del smbolo \ no se
considera con el significado de metacarcter que tiene en otras situaciones; esto
19
[]
2718
2718
271[]8
27""18
El carcter universal
En las expresiones regulares Lex el smbolo punto ( . ) es un metacarcter que
representa un carcter cualquiera del alfabeto sobre el que estn definidas las
expresiones, excepto el carcter representativo del final de lnea; se trata de un
metacarcter externo. Por lo tanto cuando se emplea el smbolo punto como
carcter hay poner una de las notaciones que suprimen su calidad de metacarcter.
Ntese que el metacarcter punto representa un carcter cualquiera, pero slo uno.
As en:
a[.:]b
a(\. :)b
.+
{a.b, a:b}
20
4)
a{Asignacion}{letrasMin}{puntoYcoma}
21
Relacin de metacaracteres
A continuacin se pone una relacin resumida de los metacaracteres, externos e
internos, de las expresiones regulares Lex que se han descrito en este captulo.
- Externos:
.
()
Operacin alternativa
Operacin estrella
Operacin opcionalidad
{}
{}
[]
\
escape
""
^
Ajuste al principio de una lnea; cuando es el primer smbolo de la
expresin
$
<>
- Internos:
^
\
escape