2012-01-27 15 views
0

このルールのASTツリーを生成するための書き換えルールの書き方を知りたいのですが、ANTLRでのrelop操作のASTルール

e5 : (simpleexpression) (relop simpleexpression)* 
     ; 

relop : RELOP_GT 
     | RELOP_LT 
     | RELOP_GE 
     | RELOP_LE 
     ; 

答えて

0

これはバイナリ操作であると思われる場合(サブ)ツリーのルートは、オペレータ、relopであり、葉はsimpleexpression秒です。私は以下のように入力を受け入れるだろう、あなたの元のルール以来?*を変更

e5 : simpleexpression (relop^ simpleexpression)? 
     ; 

relop : RELOP_GT 
     | RELOP_LT 
     | RELOP_GE 
     | RELOP_LE 
     ; 

注:

その場合は、単にその前にルートをインライントークンを作る木オペレータ ^、/ツリーを使用評価されてしまうからです多くのプログラミング言語で
1 <= 2 < 3 

は:

true < 3 

とみなされるかもしれません無効な表現(あなたの言語はそれを受け入れるかもしれませんが、その場合は*を残してください!)インライン^

、式

1 <= 2 

は、次のASTに解析されるであろう:

<= 
/\ 
1 2 

また参照:How to output the AST built using ANTLR?

関連する問題