莱克斯:强制扫描

Lex: forcing scan?

本文关键字:扫描      更新时间:2023-10-16

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

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

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

解决了!这起到了作用:

%option always-interactive

我把它留在这里以供将来参考,以防万一...好吧,谁知道呢。

这是我用 lex 和 yacc 做的一个 unix shell 的片段。 我认为它会解决问题。

"n"                    |
";"                     {
                        //yylval.sb = getsb(yytext);  for yacc stuff
                        fprintf(stderr,"EOLn");
                        return(EOL);
                        }