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

如何获取Bison词法单元语法规则及在Bison中实时输出TOKEN匹配信息

在Bison中实现TOKEN的即时动作触发

嘿,我明白你的需求——不想改扫描器,只想在Bison里让第一个TOKEN被匹配到的时候就立刻打印,而不是等rule2归约完才执行rule1里的动作对吧?这完全可以做到,给你两种实用的方法:

方法1:给TOKEN加 inline 即时动作

直接把针对TOKEN的动作写在它在规则里出现的位置,而不是等整个rule1完成归约。修改后的语法规则如下:

rule1 : TOKEN { printf("Found TOKEN\n") ; } rule2 TOKEN { /* 第二个TOKEN的动作可以放这 */ }
rule2 : ATOKEN { printf("Found ATOKEN\n") ; }

这样一来,解析器一匹配到第一个TOKEN,就会立刻执行后面花括号里的打印逻辑,不用等rule2被归约。此时对应的输出顺序就会变成:

Found TOKEN
Found ATOKEN

要是第二个TOKEN也需要即时触发动作,同样在它后面加动作块就行。

方法2:拆分规则提前归约TOKEN

把rule1拆成更细的子规则,让TOKEN的归约(以及动作执行)优先级高于rule2:

rule1 : token_segment rule2 TOKEN
token_segment : TOKEN { printf("Found TOKEN\n") ; }
rule2 : ATOKEN { printf("Found ATOKEN\n") ; }

Bison的LALR(1)分析器会按最左推导的顺序归约,token_segment会先被归约触发打印,之后才会处理rule2,效果和方法1完全一致。

这两种方法都是纯Bison语法层面的操作,完全不用碰扫描器代码,刚好符合你的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:17:13