我正在用LEX编写一个相当简单的程序,在解析几个文件后,解析用户的输入。
现在,有了文件,一切都像魅力一样。但是,当涉及来自stdin的用户输入时,LEX规则将不会运行,直到发送EOF(通过ctrl + D)字符。当我这样做时,LEX解析我写的所有内容,然后等待更多输入。连续第二次EOF终止扫描仪。
事情是,我希望程序对\n
作出反应,输出一些数据。有没有办法强制从规则内部进行扫描,或者以某种方式配置LEX缓冲以匹配此行为?
答案 0 :(得分:4)
解决!这就是诀窍:
%option always-interactive
我将此留在这里供将来参考,万一......好吧,谁知道。
答案 1 :(得分:0)
这是我用lex和yacc做的unix shell的片段。我认为它会做到这一点。
"\n" |
";" {
//yylval.sb = getsb(yytext); for yacc stuff
fprintf(stderr,"EOL\n");
return(EOL);
}