【发布时间】:2008-10-21 20:45:24
【问题描述】:
我使用的是 Flex 生成的 C 词法分析器和 Bison 生成的 C++ 解析器。我已将解析器修改为只接受字符串输入。
我在循环中调用解析器函数yyparse(),并逐行读取用户输入。如果输入是“退出”,我会停止循环。
我面临的问题是,当输入与任何规则都不匹配时,解析器会突然停止,并且在下一次迭代时以相同的状态开始,期望被停止的规则(由于语法错误)完成。
如果输入有效并且匹配解析器规则,它就可以正常工作。
关于语法错误,我重新定义了yyerror() 函数,它显示了一条简单的错误消息。
当输入与任何解析器规则不匹配时,如何清除解析器的状态,以便在下一次迭代时重新启动解析器?
【问题讨论】:
标签: c++ bison flex-lexer