我有一个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 :(得分: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)*