1

私は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; }
}

ドキュメントへの提案やポインタは大歓迎です!

4

3 に答える 3

3

arg2 != null かどうかを確認できるはずです。

于 2009-06-11T22:06:28.917 に答える
0

スコットの答えは魅力のように機能します!

ANTLR で定義された変数をifステートメントで参照する方法は、ドル記号 ( )なし$であることが判明しましたが、それ以外の$場合は が必要です。

また、単純な文字列よりも複雑な構造が存在するかどうかを確認するには、次を使用します。

if (arg2.tree != NULL)
于 2009-06-12T14:26:17.033 に答える
0

これをより一般的にしたい場合は、オプションのパラメーターを 1 つハードコーディングする代わりに、次のようにコードで複数の要素を解析することができます。

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)*
于 2009-06-12T21:18:11.770 に答える