You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 18:21:07