当我使用bison test.y
编译下面的语法时,它会警告非终结符“header_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
;
%%
使用这些非终结者的规则也被视为无用。
答案 0 :(得分:2)
那是因为stm没有如何减少到程序规则,试试这个:
%%
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
;
%%
另外,我通过左递归解决了header_stms中的reduce问题。