2009-06-11 11 views
1

ための文法テスト私はANTLR文法を持っており、オプションのパラメータを可能に私の言語で関数を定義しています。オプションのパラメータがコード生成ブロック内で渡されるかどうかを確認するにはどうすればよいですか?ANTLR:オプションのパラメータ(?使用するオペレータ)

私は基本的に、この架空の木文法書のような何かをするための構文を探しています:ドキュメントへ

myFunc returns [int retval] : 'myFunc' arg1=number arg2=string? 
{ 
    // Check if arg2 exists. 
    if (/* arg2 exists */) { $retval = $arg1.value + 10; } 
    else { $retval = $arg1.value; } 
} 

任意の提案やポインタを非常に高く評価されています!

+0

、私はANTLR3のドキュメントのために見つけた最高のリソースはここにある: http://java.ociweb.com/mark/programming/ANTLR3/ANTLR3.pdf – Han

答えて

3

あなただけarg2のかどうかを確認することができるはず!= nullを。

0

Scottの答えは魔法のように動作します!

は時間$の残りの部分が必要とされるのに対し、ドル記号($)は、なしですif文でANTLR定義された変数を参照する方法が判明します。

また

、あなたが代わりにハード1つのオプションのパラメータをコーディングこれは、より一般的になりたい場合は、あなたのコードの解析を持つことができます

if (arg2.tree != NULL) 
0

を使用し、単純な文字列よりも複雑な構造が存在しているかどうかをチェックしますそのような複数の要素:興味のある方のために

myFunc returns [int retval] 
: 'myFunc' funcArgs 
{ 
    // Here you can run through the funcArg Tree and do what 
    // ever you'd like here. 
} 

protected 
funcArgs 
: arg (COMMA arg)* 
関連する問題