3 + 4のような式の場合、中間表現ツリーで値7を使用したいと思います。
戻り値を書き換えルールに入れる方法がわかりません。
式は[intv]を返します:など。
expression.vをWRに取り込むにはどうすればよいですか?(+ 3 4)を取得した瞬間、(7)が欲しい
| ^(WRITE c = expression)-> ^(WRINT ^(INTC ^($ c))
次のステップは、アセンブラーで7を発行することです。
3 + 4のような式の場合、中間表現ツリーで値7を使用したいと思います。
戻り値を書き換えルールに入れる方法がわかりません。
式は[intv]を返します:など。
expression.vをWRに取り込むにはどうすればよいですか?(+ 3 4)を取得した瞬間、(7)が欲しい
| ^(WRITE c = expression)-> ^(WRINT ^(INTC ^($ c))
次のステップは、アセンブラーで7を発行することです。
別のツリーではなく、書き換え構文を使用して$c の値を持つ単一の数値トークンを作成する方法を知りたいと思いますか? その場合は、これを行うことができます
^(WRITE c=expression) -> INT[$c.v] ;
INT が整数のトークン タイプであると仮定します。
これは、式ルールが実際に評価され、整数の結果が返されることを前提としています。そうでなく、一定の折り畳みを行う方法を知りたい場合は、それははるかに大きなトピックです。ANTLR の例のコレクションにある多項式の例を見てください。基本的な単純化を行う方法を示しています。おそらく、次のようなルールを使用してツリーリライターで行うことができます
^('+' a=INT b=INT) -> INT[String.valueOf($a.int+$b.int)] ;