2

3 + 4のような式の場合、中間表現ツリーで値7を使用したいと思います。

戻り値を書き換えルールに入れる方法がわかりません。

式は[intv]を返します:など。

expression.vをWRに取り込むにはどうすればよいですか?(+ 3 4)を取得した瞬間、(7)が欲しい

| ^(WRITE c = expression)-> ^(WRINT ^(INTC ^($ c))

次のステップは、アセンブラーで7を発行することです。

4

1 に答える 1

1

別のツリーではなく、書き換え構文を使用して$c の値を持つ単一の数値トークンを作成する方法を知りたいと思いますか? その場合は、これを行うことができます

^(WRITE c=expression) -> INT[$c.v] ;

INT が整数のトークン タイプであると仮定します。

これは、式ルールが実際に評価され、整数の結果が返されることを前提としています。そうでなく、一定の折り畳みを行う方法を知りたい場合は、それははるかに大きなトピックです。ANTLR の例のコレクションにある多項式の例を見てください。基本的な単純化を行う方法を示しています。おそらく、次のようなルールを使用してツリーリライターで行うことができます

^('+' a=INT b=INT) -> INT[String.valueOf($a.int+$b.int)] ;
于 2010-09-01T23:23:06.940 に答える