<<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;