next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: Uso de Dos Analizadores Sup: Expresiones Regulares en Flex Ant: Ejemplo Err: Si hallas una errata ...

Final de Fichero

El patrón <<EOF>> permite asociar acciones que se deban ejecutar cuando se ha encontrado un end of file y la macro yywrap() ha devuelto un valor no nulo.

Cualquiera que sea, la acción asociada deberá de optar por una de estas cuatro alternativas:

El patrón <<EOF>> no puede usarse con otras expresiones regulares. Sin embargo, es correcto prefijarlo con estados.

Si <<EOF>> aparece sin condiciones de arranque, la regla se aplica a todos los estados que no tienen una regla <<EOF>> específica. Si lo que se quiere es que la regla se restringa al ámbito del estado inicial se deberá escribir:

<INITIAL><<EOF>>

Sigue un programa que reconoce los comentarios anidados en C. Para detectar comentarios incacabados usaremos <<EOF>>.

%option stack
%x comment
%%
"/*"   { yy_push_state(comment); }
(.|\n) ECHO;
<comment>"/*"     { yy_push_state(comment); } 
<comment>"*/"     { yy_pop_state(); } 
<comment>(.|\n)   ;
<comment><<EOF>>  { fprintf(stderr,"Error\n"); exit(1); }
%%

$ cat hello.c
main() {
int a[1]; /* a /* nested comment */. */
  a[0] = 4; /* a  /* nested comment in
                 /* two */ lines  */ *****/
}                                                   
$ flex nestedcom.l ; gcc lex.yy.c -lfl ; a.out < hello.c
main() {
int a[1];
  a[0] = 4;
}
$ cat hello4.c
main() {
int a[1]; /* a /* nested comment */. */
  a[0] = 4; /* an  /* incorrectly nested comment in
                 /* two  lines  */ *****/
}
$ a.out < hello4.c
main() {
int a[1];
Error
  a[0] = 4;


next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: Uso de Dos Analizadores Sup: Expresiones Regulares en Flex Ant: Ejemplo Err: Si hallas una errata ...
Casiano Rodríguez León
2012-05-22