Expresiones Regulares de Lex.

Las definiciones de expresiones regulares son muy similares a ésas en QED [ 5 ]. Una expresión regular especifica un sistema de secuencias que se emparejarán. Contiene los caracteres del texto (que emparejan los caracteres correspondientes en las secuencias que son comparadas) y caracteres del operador (que especifican repeticiones, opciones, y otras características). Las letras del alfabeto y los dígitos son siempre caracteres del texto; así la expresión regular

                                 número entero

empareja el número entero de la secuencia dondequiera que aparezca y la expresión

                                    a57D

busca la secuencia a57D.

Operadores. Los caracteres del operador son

                   ¿"\ [ ] ^ -? . * + | () $/{} % < >

y si se van a ser utilizados como caracteres del texto, un escape debe ser utilizado. El operador de la marca de la cita (") indica que lo que se contiene entre un par de cotizaciones debe ser tomado como caracteres del texto. Así

                                   xyz"++"

empareja la secuencia xyz++ cuando aparece. Observe que una parte de una secuencia puede ser cotizada. Es inofensivo pero innecesario cotizar un carácter ordinario del texto; la expresión

                                   "xyz++"

está igual que el arriba. Así cotizando cada carácter no-alfanume'rico que es utilizado como carácter del texto, el usuario puede evitar de recordar la lista arriba de los caracteres actuales del operador, y es seguro debe fomentar extensiones a Lex alarga la lista.

Un carácter del operador se puede también dar vuelta en un carácter del texto precediéndolo con \ como adentro

                                   xyz\+\+

cuál es otro, menos legible, equivalente de las expresiones antedichas. Otro uso del mecanismo que cotiza es conseguir un espacio en blanco en una expresión; normalmente, según lo explicado arriba, los espacios en blanco o las lengüetas terminan una regla. Cualquier carácter en blanco no contenido dentro [ ] (véase abajo) debe ser cotizado. Varios escapes normales de C con \ se reconocen: el \n es newline, el \t es lengüeta, y el \b es tecla de retroceso. Entrar \ sí mismo, \ \. del uso puesto que el newline es ilegal en una expresión, \n debe ser utilizado; no se requiere para escapar la lengüeta y para pulsar la tecla de retroceso. Cada carácter pero el espacio en blanco, la lengüeta, el newline y la lista arriba es siempre un carácter del texto.

Clases del carácter. Las clases de caracteres se pueden especificar usando el par del operador [ ]. los fósforos de la construcción [ ABC ] un solo carácter, que puede ser a, b, o c. Dentro de los corchetes, se no hacen caso la mayoría de los significados del operador. Solamente tres caracteres son especiales: éstos son \ - y ^. - carácter indican gamas. Por ejemplo,

                                 [ a-z0-9< > _ ]

indica la clase del carácter que contiene todas las letras minúsculas, los dígitos, los soportes de ángulo, y la raya. Las gamas se pueden dar en cualquier orden. Usando - entre cualquier par de los caracteres que no son ambas letras mayúsculas, ambas letras de la minúscula, o ambos dígitos son puesta en práctica dependiente y conseguirán un mensaje de alerta. (e.g., [ 0-z ] en el ASCII están muchos más caracteres que está en el EBCDIC). Si se desea para incluir el carácter - en una clase del carácter, debe ser primer o pasado; así

                                   [ - +0-9 ]

empareja todos los dígitos y las dos muestras.

En carácter clasifica, ^ el operador debe aparecer como el primer carácter después del soporte izquierdo; indica que la secuencia que resulta debe ser complementada con respecto al juego de caracteres de la computadora. Así

                                   [ ^abc ]

empareja todos los caracteres excepto a, b, o c, incluyendo todos los caracteres especiales o de control; o

                                  [ ^a-zA-Z ]

es cualquier carácter que no sea una letra. \ carácter proporciona los escapes generalmente dentro de los soportes de la clase del carácter.

Carácter arbitrario. Para emparejar casi cualquier carácter, el carácter del operador. es la clase de todos los caracteres excepto newline. El escaparse en octal es posible aunque es no-portable:

                                 [ \40-\176 ]

empareja todos los caracteres imprimibles en el juego de caracteres de ASCII, de 40 octales (espacio en blanco) a 176 octales (tilde).

Expresiones opcionales. ¿El operador? indica un elemento opcional de una expresión. Así

                                    ab?c

empareja la CA o el ABC.

Expresiones repetidas. Las repeticiones de clases son indicadas por los operadores * y +.

                                     a *

está cualquier número del consecutivo los caracteres, incluyendo cero; mientras que

                                     a+

son unos o más casos de a. Por ejemplo,

                                   [ a-z]+

son todas las cadenas de letras minúsculas. Y

                            [ A-Za-z][A-Za-z0-9 ] *

indica todas las secuencias alfanuméricas con un carácter alfabético principal. Esto es una expresión típica para reconocer identificadores en lenguajes de programación.

Alternación y el agrupar. El operador | indica la alternación:

                                   (ab|Cd)

empareja el ab o el Cd. Observe que paréntesis están utilizados para agrupar, aunque no son necesarios en el nivel exterior;

                                    ab|Cd

habría sido suficiente. Paréntesis se pueden utilizar para expresiones más complejas:

                               (ab|cd+)?(ef) *

empareja las secuencias tales como abefef, efefef, cdef, o cddd; pero no ABC, abcd, o abcdef.

Sensibilidad del contexto. Lex reconocerá una cantidad pequeña de contexto circundante. Los dos operadores más simples para esto son ^ y $. si es el primer carácter de una expresión ^, la expresión serán emparejados solamente al principio de una línea (después de un carácter del newline, o al principio del flujo de entradas). Esto puede nunca estar en conflicto con el otro significado de ^, complementación del carácter clasifica, desde entonces que se aplica solamente dentro [ ] de los operadores. Si el carácter último es $, la expresión será emparejada solamente en el extremo de una línea (cuando es seguido inmediatamente por newline). El último operador es un caso especial del/del carácter del operador, que indica contexto de fin. La expresión

                                    ab/cd

empareja la secuencia ab, pero solamente si es seguido por el Cd. Así

                                     ab$

es igual que

                                    ab/\n

El contexto izquierdo es manejado en Lex por condiciones del comienzo según lo explicado en la sección 10. Si se va una regla a ser ejecutada solamente cuando el intérprete del autómata de Lex está en la condición x del comienzo, la regla se debe prefijar cerca

                                     < x >

usar los caracteres del operador del soporte de ángulo. Si consideráramos el `` estar al principio de una línea '' para ser la condición UNA del comienzo, entonces ^ el operador sería equivalente a

                                    < UNO >

Las condiciones del comienzo se explican más completamente más adelante.

Repeticiones y definiciones. Los operadores {} especifican repeticiones (si incluyen números) o la extensión de la definición (si incluyen un nombre). Por ejemplo

                                   {dígito}

busca una secuencia predefinida nombrada dígito y la inserta en ese punto en la expresión. Las definiciones se dan en la primera parte de la entrada de Lex, antes de las reglas. En contraste,

                                   a{1,5}

busca 1 a 5 ocurrencias de a.

Finalmente, % inicial es especial, siendo el separador para los segmentos de la fuente de Lex.

< atras  siguiente >

Hosted by www.Geocities.ws

1