Bison解析完成但无法正常终止,报unexpected x expecting $end错误
解决Bison解析终止报错:unexpected x, expecting $end
核心原因
你的语法规则定义program必须以END token结尾,但实际输入未提供END、END token未被正确识别,或规则设计不符合输入结构,导致解析器无法完成顶层规则匹配,遇到输入结束时触发报错。
排查与修复步骤
- 确认输入是否包含
END:检查测试输入文件末尾是否有对应END的关键字文本(比如你定义的"END"字符串),无拼写错误或多余字符。 - 验证flex中
END的规则:确保flex文件里有正确匹配END的规则,示例:
若缺少该规则,"END" { return END; }END对应的文本会被误判为其他token,解析器永远无法匹配program规则。 - 调整顶层语法规则(若无需
END结尾):如果输入本来就不需要以END收尾,直接修改program规则:
这样解析完所有命令后,遇到输入结束会自动终止。program : command_list { } ; - 检查
command规则的完整性:确保command规则能匹配完整的命令结构,无残留未处理的token。可通过Bison编译时添加-t选项开启调试,查看解析过程中token的处理情况。 - 确认换行符规则覆盖所有情况:你的
newlines规则已支持单/多换行,需保证命令末尾的换行不会被误判为未处理token。
内容的提问来源于stack exchange,提问作者123123123123
相关产品推荐
相关产品推荐

