gpt4 book ai didi

c++ - 清除 Bison 生成的解析器的解析器状态

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:01:41 25 4
gpt4 key购买 nike

我正在使用 Flex 生成的 C 词法分析器和 Bison 生成的 C++ 解析器。我修改了解析器以仅接受字符串输入。

我在循环中调用解析器函数 yyparse(),并逐行读取用户输入。如果输入是“退出”,我将停止循环。

我面临的问题是,当输入与任何规则都不匹配时,解析器会突然停止,并在下一次迭代时以相同状态开始,期望停止的规则(由于语法错误)完成。

如果输入有效并匹配解析器规则,它会正常工作。

关于语法错误,我重新定义了 yyerror() 函数,它显示一条简单的错误消息。

当输入不匹配任何解析器规则时,如何清除解析器的状态,以便在下一次迭代时解析器重新启动?

最佳答案

根据我的 Lex & Yacc 书,有一个函数 yyrestart(file) 。

否则(我引用了书中的一段话:

这意味着您不能仅通过调用 yylex() 来重新启动词法分析器。您必须使用 BEGIN INITIAL 将其重置为默认状态,丢弃由 unput() 缓冲的任何输入文本,并以其他方式进行安排,以便对 input() 的下一次调用将开始读取新输入。

关于c++ - 清除 Bison 生成的解析器的解析器状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/223445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com