check可选规则是否为null

时间:2013-02-27 14:09:35

标签: antlr

说我有这样的语法(目标语言是C):

mycmd : cmd_name  option? arg1

由于“选项”是可选的,如果我像这样直接访问 -

mycmd : cmd_name  option? arg1
{ add_option($option.text); }

程序崩溃,生成的C代码

add_option(option->getText(option));

此处“选项”为NULL。

我试验了以下

mycmd : cmd_name  option? arg1
{ if ($option != NULL) { add_option($option.text);} }

这很好用。

但我搜索了一下,发现推荐的方法是预先声明一些bool,在子规则中将其设置为true并检查其值。我不喜欢它,因为它更难以阅读语法。

问题是,对我来说检查“$ option”对我来说,这是不是很幸运?有没有其他推荐方法,以便我可以将语法和动作分开?

我正在使用ANTLR3.4。

2 个答案:

答案 0 :(得分:2)

我会使用以下内容:

{ if ($option) { add_option($option.text); } }

答案 1 :(得分:1)

检查NULL是合适的,或者您可以将操作放在可选的子规则中。

mycmd : cmd_name 
        (option {add_option($option.text);} )? 
        arg1
相关问题