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