Lex:强行扫描?

时间:2011-05-06 20:02:07

标签: c++ c lex

我正在用LEX编写一个相当简单的程序,在解析几个文件后,解析用户的输入。

现在,有了文件,一切都像魅力一样。但是,当涉及来自stdin的用户输入时,LEX规则将不会运行,直到发送EOF(通过ctrl + D)字符。当我这样做时,LEX解析我写的所有内容,然后等待更多输入。连续第二次EOF终止扫描仪。

事情是,我希望程序对\n作出反应,输出一些数据。有没有办法强制从规则内部进行扫描,或者以某种方式配置LEX缓冲以匹配此行为?

2 个答案:

答案 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);
                        }