

<<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:
yyin a un nuevo fichero de entrada
return
yyterminate() (véase la sección 2.10)
yy_switch_buffer (véase la sección 2.21).
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;

