Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Antlr 检查可选规则是否为空_Antlr - Fatal编程技术网

Antlr 检查可选规则是否为空

Antlr 检查可选规则是否为空,antlr,Antlr,假设我有这样的语法(目标语言是C): 由于“option”是可选的,如果我像这样直接访问它- mycmd : cmd_name option? arg1 { add_option($option.text); } 程序将崩溃,生成的C代码 add_option(option->getText(option)); 这里的“选项”为空 我做了如下实验 mycmd : cmd_name option? arg1 { if ($option != NULL) { add_option($o

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

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

mycmd : cmd_name  option? arg1
{ add_option($option.text); }
程序将崩溃,生成的C代码

add_option(option->getText(option));
这里的“选项”为空

我做了如下实验

mycmd : cmd_name  option? arg1
{ if ($option != NULL) { add_option($option.text);} }
这个很好用

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

问题是,对NULL检查“$option”对我有效,这只是我的运气吗?有没有其他推荐的方法可以让我把语法和动作分开


我正在使用ANTLR3.4。

我将使用以下内容:

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

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

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

我检查生成的Parser.c,我认为原始代码不正确-我检查生成的Parser.c,我认为将操作放在可选子规则中是正确的解决方案,“option”成为Parser.c中的一个函数,检查NULL没有意义。
mycmd : cmd_name 
        (option {add_option($option.text);} )? 
        arg1