Lex:强制扫描?
我正在使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
解决了!这成功了:
我将其留在这里以供将来参考,以防万一……好吧,谁知道呢。
Solved! This did the trick:
I'm leaving this here for future reference, in case... well, who knows.
这是我用 lex 和 yacc 编写的 unix shell 的一个片段。我想这会成功的。
Here is a snippet from a unix shell I did with lex and yacc. I think it'll do the trick.