Lex:强制扫描?

发布于 2024-11-05 13:16:57 字数 271 浏览 0 评论 0原文

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

现在,有了这些文件,一切都变得神奇起来。但是,当涉及来自 stdin 的用户输入时,LEX 规则将在发送 EOF(通过 ctrl+D)字符之前不会运行。当我这样做时,LEX 会解析我编写的所有内容,然后等待更多输入。第二个连续的 EOF 将终止扫描器。

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

I'm writing a fairly simple program with LEX, that after parsing a few files, parses input from a user.

Now, with the files, everything works like a charm. However, when it comes to user input from stdin, LEX rules won't run until an EOF (via ctrl+D) character is sent. When I do that, LEX parses all I wrote and then waits for more input. A second consecutive EOF terminates the scanner.

Thing is, I want the program to react on \n, outputting some data. Is there a way to force a scan from inside a rule, or to configure LEX buffering somehow to match this behaviour?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

濫情▎り 2024-11-12 13:16:57

解决了!这成功了:

%option always-interactive

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

Solved! This did the trick:

%option always-interactive

I'm leaving this here for future reference, in case... well, who knows.

街角卖回忆 2024-11-12 13:16:57

这是我用 lex 和 yacc 编写的 unix shell 的一个片段。我想这会成功的。

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

Here is a snippet from a unix shell I did with lex and yacc. I think it'll do the trick.

"\n"                    |
";"                     {
                        //yylval.sb = getsb(yytext);  for yacc stuff
                        fprintf(stderr,"EOL\n");
                        return(EOL);
                        }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文