I need to match EOF in flex
this is the main error part of my code lex.l
%{
%}
%%
<<EOF>> {printf("match EOF\n");}
%%
int main(){
yylex();
}
i use
flex lex.l ; gcc lex.yy.c -o lex.exe -lfl ; lex.exe < text
to execute
and this is my text file just one line
abc(no \n or \r at the end of file)
but when I execute lex.exe it goes into endless loop and output infinite line of "match EOF\n"
How to solve the problem?
You need to return something from the EOF
action; otherwise, flex
will continue to attempt to read the input, and everytime it does it will find that it is at the EOF
, causing it to execute your action again.
In fact, you should always return 0
from an <<EOF>>
pattern, if you are working with yacc/bison
, because that's how you signal the parser that it has reached the end of input. However, in most cases it is not actually necessary to explicitly do anything because return 0
is the default EOF
action.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With