Generadores de codigo lex y flex

Solo disponible en BuenasTareas
  • Páginas : 17 (4088 palabras )
  • Descarga(s) : 0
  • Publicado : 8 de enero de 2010
Leer documento completo
Vista previa del texto
Las expresiones regulares Lex
Introducción
En capítulos posteriores se expondrá con detalle que Lex es un lenguaje (y un traductor para las especificaciones escritas en él) que sirve para asociar acciones a la presencia de palabras (secuencias de caracteres) leídas de un fichero de tipo texto; las formas de las palabras que se pretende detectar se especifican en Lex mediante una notaciónque es una ampliación de las expresiones regulares.
Pero antes de esa exposición, en este capítulo se describen las expresiones regulares Lex con una amplitud suficiente para poder realizar la especificación de las características lexicográficas más habituales de los lenguajes de programación; no se trata de una descripción exhaustiva: no se han incluido algunos aspectos más difíciles y empleadoscon menor frecuencia.
Aunque el capítulo empieza con un recordatorio de la definición básica de las expresiones regulares, para su lectura es preciso tener conocimientos sobre el papel que tienen las expresiones regulares en la caracterización de los lenguajes regulares.
Ampliación de las expresiones regulares
Las expresiones regulares (propiamente dichas, en un sentido estricto), tal ycomo se estudian en la teoría de lenguajes para especificar los lenguajes regulares, están constituidas por símbolos de un alfabeto Σ, relacionados mediante los operadores binarios alternativa ( | ) y concatenación ( • ) y el operador unario estrella ( * ); en la escritura de una expresión regular también se pueden emplear paréntesis para precisar el orden de aplicación de los operadores. Elasterisco de la operación estrella suele colocarse como exponente de la parte de la expresión regular afectada.
La precedencia de los operadores es la definida por la siguiente jerarquía, relacionada de mayor a menor precedencia:
1 operaciones entre paréntesis
2 operador estrella
3 operador concatenación
4 operador alternativa
Así, por ejemplo, son expresiones regulares definidassobre el alfabeto Σ = { a, b }
b•a•a|b•b
a*•(b|b•a)
Entre los símbolos que aparecen en una expresión regular cabe distinguir los caracteres y los metacaracteres; los caracteres son los símbolos que pertenecen al alfabeto sobre el que está definida la expresión regular; los metacaracteres son los símbolos que no pertenecen a ese alfabeto: los operadores y los paréntesis.
En la escritura delas expresiones regulares el punto representativo de la concatenación entre símbolos del alfabeto suele suprimirse; de acuerdo con esta notación simplificada, las anteriores expresiones suelen escribirse así:
baa|bb
a*(b|ba) Dado que el espacio en blanco no es un símbolo perteneciente al alfabeto Σ sobre el que están definidas las expresiones regulares anteriores, también podrían escribirse(sin ocasionar confusión y con la pretensión de favorecer la legibilidad) de esta manera:
baa | bb
a* ( b | ba )
En una especificación Lex se incluyen expresiones regulares, pero escritas con una notación que es una ampliación de la notación empleada en la definición (en sentido estricto) anterior. Esta ampliación tiene como principales objetivos:
hacer más cómoda y escueta laescritura 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 expresión regular que denota las palabras de longitud uno es:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Con la notación ampliada de las expresiones regularesLex (empleando unos nuevos metacaracteres: el guión y los corchetes de abrir y de cerrar), esa misma expresión puede escribirse así:
[0–9]
Las expresiones regulares de una especificación Lex han de procesarse mediante un programa y, por ello, han de estar grabadas en un fichero de tipo texto. En estas condiciones no resulta adecuado el convenio según el cual la operación estrella se escribe...
tracking img