Bison非终结词在语法上是无用的
当我使用Bison非终结词在语法上是无用的,bison,Bison,当我使用bison test.y编译下面的语法时,它警告非终结符“header\u stms”和“forward”是无用的。为什么?它们在“程序”规则中使用。非终结符“stm”不会报告为无用 %% program: /* empty */ | stm | header_stms ; header_stms: header_stms forward ; /* forward proc declaration */ forward: "forward" TK_I
bison test.y
编译下面的语法时,它警告非终结符“header\u stms”和“forward”是无用的。为什么?它们在“程序”规则中使用。非终结符“stm”不会报告为无用
%%
program: /* empty */
| stm
| header_stms
;
header_stms: header_stms forward
;
/* forward proc declaration */
forward: "forward" TK_ID ";"
;
stm: TK_ID "+" TK_ID
;
%%
使用这些非终结符的规则也被认为是无用的。这是因为stm不知道如何简化为程序规则,请尝试以下操作:
%%
program: /* empty */
| stm
| header_stms
;
header_stms: header_stms forward
;
/* forward proc declaration */
forward: "forward" TK_ID ";"
;
stm: TK_ID "+" TK_ID
;
%%
%%
program: /* empty */
| stm
| header_stms
;
header_stms: /* empty */
| forward
| header_stms forward
;
/* forward proc declaration */
forward: "forward" TK_ID ";"
;
stm: /* empty */
| TK_ID "+" TK_ID
;
%%
此外,我还通过左递归解决了标题中的reduce问题。谢谢!我所需要做的就是添加额外的规则
header\u stms:forward
来结束递归。