假设我每次匹配规则时都需要运行一些初始化代码,如何减少冗余?
rule : TOKEN1 { init(); token1Code(); }
| TOKEN2 { init(); token2Code(); }
;
也可以做类似
的事情rule : TOKEN1
| TOKEN2
{ codeForToken1OrToken2(); }
;
答案 0 :(得分:3)
您可以使用以下内容:
rule : { init(); } real_rule { codeForToken1or2(); } ;
real_rule : TOKEN1 { token1Code(); }
| TOKEN2 { token2Code(); }
;
但这可能会引入冲突,具体取决于“规则”的使用方式。
答案 1 :(得分:0)
因为这确实有效:
rule : TOKEN1 { getToken(); init(); token1Code(); }
| TOKEN2 { getToken(); init(); token2Code(); }
;
其中 getToken(); 是与输入中的下一个标记匹配的函数的名称(我不记得函数的名称),你可以调用一些<在其中强> init(); 。