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

斯科特的回答就像一个魅力!

事实证明,在if语句中引用 ANTLR 定义的变量的方法是没有美元符号 ( $),而其余时间$则需要。

此外,要检查是否存在比简单字符串更复杂的结构,请使用

if (arg2.tree != NULL)
于 2009-06-12T14:26:17.033 回答
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)*
于 2009-06-12T21:18:11.770 回答