0

假设我每次匹配规则时都需要运行一些初始化代码如何减少冗余?

rule : TOKEN1 { init(); token1Code(); }
     | TOKEN2 { init(); token2Code(); }
     ;

也有可能做类似的事情

rule : TOKEN1
     | TOKEN2
     { codeForToken1OrToken2(); }
     ;
4

2 回答 2

3

你可以使用类似的东西:

rule : { init(); } real_rule { codeForToken1or2(); } ;

real_rule : TOKEN1 { token1Code(); }
          | TOKEN2 { token2Code(); }
          ;

但这可能会引入冲突,具体取决于“规则”的使用方式。

于 2009-11-20T01:02:35.667 回答
0

因为这真的有效:

rule : TOKEN1 { getToken(); init(); token1Code(); }
     | TOKEN2 { getToken(); init(); token2Code(); }
     ;

其中getToken(); 是与输入中的下一个标记匹配的函数的名称(我不记得函数的名称),您可以调用一些init();在里面。

于 2009-11-20T01:02:07.153 回答