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

YACC/Bison中token同时匹配多条产生式的执行逻辑咨询

Bison多产生式匹配规则问题解答

核心结论

你的判断完全符合你给出的规则场景,无额外关联产生式的前提下,输入STARTED FLOAT_NUM时仅会触发title对应的规则动作,my_type规则仅在输入为单独FLOAT_NUM token时触发。

原理说明

YACC/Bison是基于LALR(1)的自底向上语法分析器,执行逻辑是根据栈内已有的符号序列 + 向前预读1个token,决定执行「移进token入栈」或者「把栈顶匹配某产生式右部的符号替换为左部非终结符(同时触发对应动作)」的操作。

针对你给出的规则:

title: STARTED FLOAT_NUM
my_type: FLOAT_NUM

以及顶层文法允许匹配title和my_type的前提:

  • 输入STARTED FLOAT_NUM时,分析流程为:
    • 先移进STARTED入栈
    • 再移进下一个tokenFLOAT_NUM入栈
    • 预读到输入结束标记后,栈顶的STARTED FLOAT_NUM完整匹配title的产生式右部,直接执行title的规约动作,不会单独对FLOAT_NUM做my_type的规约
  • 只有输入仅为单个FLOAT_NUM时,栈顶只有FLOAT_NUM,才会匹配my_type的产生式触发对应动作。

特殊例外

如果你的文法中存在其他关联规则,比如title: STARTED my_type,那此时FLOAT_NUM会先被规约为my_type触发对应动作,再和STARTED一起规约为title触发title的动作,不过这种情况和你给出的规则示例无关。

内容的提问来源于stack exchange,提问作者volnistii11

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:15:01