ANTLR:可选参数的语法测试(使用?运算符)

时间:2009-06-11 17:59:32

标签: code-generation antlr grammar

我有一个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; }
}

非常感谢任何有关文档的建议或指示!

3 个答案:

答案 0 :(得分:3)

你应该能够检查arg2!= null。

答案 1 :(得分:0)

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

if语句中没有美元符号($)引用ANTLR定义变量的方式,而剩下的时间是{{1是必需的。

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

$

答案 2 :(得分: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)*