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 に答える