Professional Documents
Culture Documents
Entre los smbolos que aparecen en una expresin regular cabe distinguir
los caracteres y los metacaracteres. Los primeros son los smbolos que
pertenecen al alfabeto sobre el que est definida la expresin regular y los
metacaracteres son los smbolos que no pertenecen a ese alfabeto: los
operadores y los parntesis.
lex.yy.c
P1
Especificacin escrita en
Lex
C1
%{
C1
P2
yylex()
C2n
......
....
%%
......
....
C22
......
....
C21
while
C
switch21
C22
C2n
C3
C3
P3
P4
......
....
%}
mientrasquedetexto
mientrasquedetexto
return
Seccin de rutinas
En esta seccin se incluye cdigo escrito en C que se traslada
literalmente al fichero generado; lo que suele ponerse es el cdigo de las
funciones a las que se ha hecho referencia desde el cdigo de las acciones de
la seccin de reglas. Aqu no hay que poner cuidado en la colocacin del cdigo
en las lneas y columnas, se trasladar manteniendo la colocacin y ser un
texto de entrada para el compilador de C.
El criterio de seleccin del patrn es:
1. A partir del carcter actual se intentan aplicar de manera simultnea
todos los patrones de la especificacin, habr patrones que se puedan
acoplar a la parte actual de la entrada, y otros que no se puedan.
2. De todos los patrones que se acoplan a la parte actual de la entrada, se
selecciona el que se acopla a la secuencia de caracteres de mayor
longitud (a partir del carcter actual).
3. Si ocurre que varios patrones se acoplan sobre la misma secuencia de
longitud mxima, se selecciona de entre ellos el que est situado antes
en la relacin de patrones de la seccin de reglas de la especificacin.
Segn este criterio, ocurre que, en general, no es indiferente el orden de
colocacin de los patrones en la seccin de reglas.
Almacenamiento de la secuencia acoplada
El cdigo generado por LEX a partir de la especificacin de entrada realiza
la tarea de dejar anotada la secuencia de caracteres a la que se acopla el
patrn seleccionado.
Para este almacenamiento se dispone de dos variables globales cuyos
nombres son:
yytext contiene la secuencia de caracteres acoplada
yyleng contiene la longitud de la secuencia acoplada
Como ocurre con el almacenamiento de las cadenas en el lenguaje C, el
final de la secuencia de caracteres anotada se indica mediante el carcter
especial de final de cadena.
El contenido de las variables yytext e yyleng cambia cada vez que se
acopla (reconoce) una nueva secuencia definida por un determinado patrn;
por ello, si la secuencia actual se necesita para alguna operacin posterior,
deber trasladarse a otro lugar antes de que se acople un nuevo patrn.
3.Generacindeanalizadoreslxicos
Justificacin
En definitiva, un analizador lxico para un lenguaje L analiza la forma de
los componentes bsicos de un programa escrito en L. Esas formas, en la
mayora de los casos, pueden describirse mediante expresiones regulares. Por
ello, la forma de todas las piezas sintcticas existentes en la definicin
lexicogrfica del lenguaje puede constituir la secuencia de patrones de una
especificacin LEX. Se incluye un patrn por cada pieza sintctica que deba
reconocer el analizador lexicogrfico.
La accin correspondiente al acoplamiento de un patrn a una cierta
secuencia de caracteres (en este caso se tratar de un lexema) ser la que
corresponde a un analizador lexicogrfico: devolver a la rutina llamante una
representacin de la pieza sintctica encontrada en el texto de entrada.
As pues, la funcin yylex generada a partir de una especificacin debe de
realizar la tarea de un analizador lxico:
1. Cada vez que se llame a yylex deber avanzar en la entrada hasta
encontrar la siguiente pieza sintctica (siguiente token).
2. Las llamadas a yylex se realizan desde el analizador sintctico.
Definicin de los valores asociados a las piezas
La funcin generada yylex es de tipo entero, es decir, devuelve un valor de
tipo entero. Por ello, los valores asociados a las piezas sintcticas han de ser
nmeros enteros. En principio, se puede elegir cualquier valor para la
asociacin. Es habitual, para favorecer la legibilidad, que se den nombres a los
valores numricos asociados a las piezas sintcticas; estos nombres se asignan
mediante clusulas #define incorporadas en la seccin de definiciones.
Comunicacin del lexema de una pieza sintctica
El analizador lxico devolver atributos en las variables globales antes
mencionadas y dado que estas variables son globales, sus contenidos podrn
consultarse desde el analizador sintctico.
EOF (Final de fichero )
Cuando el analizador lxico (la funcin yylex), en el intento de encontrar
el siguiente token se encuentra con el final del fichero, devuelve el valor cero.
Por esta razn, el nmero cero no puede emplearse para representar una
pieza sintctica, ni para indicar la presencia de un error.
Resumen
La comunicacin entre los analizadores lxico y sintctico se realizar de
la siguiente manera.
1. El analizador lxico generado por LEX es la funcin yylex.
2. El analizador sintctico produce sucesivas llamadas a yylex.
3. La funcin yylex devuelve un valor numrico representativo de la pieza
sintctica detectada en el texto de entrada.
4. En las variables globales yytext e yyleng se pueden consultar (si fuera
preciso desde el analizador sintctico) el lexema de la pieza y la longitud
de ese lexema (secuencia de caracteres acoplada y sobrepasada).