ANTLR中的多个返回值

时间:2013-03-05 05:07:41

标签: arraylist return-value antlr4 multiple-variable-return

我在Java中使用ANTLR4,我希望在解析输入时存储规则返回的值。我使用这样的语法:

db : 'DB' '(' 'ID' '=' ID ',' query* ')'
{
System.out.println("creating db");
System.out.println("Number of queries -> "+$query.qs.size());
}
;

query returns [ArrayList<Query> qs] 
@init
{
    $qs = new ArrayList<Query>();
}
: 'QUERY' '(' 'ID' '=' ID ','  smth ')'
{
System.out.println("creating query with id "+$ID.text);
Query query = new Query();
query.setId($ID.text);
$qs.add(query);
}
;

但是会发生的是打印的查询数($ query.qs size)总是一个。发生这种情况是因为每次在输入处识别QUERY元素时,它都会被添加到$ qs ArrayList中,但是对于彼此QUERY,将实例化一个新的ArrayList,并将此查询添加到此新的ArrayList中。当识别出所有查询时,将调用db:规则的操作,但$ query.qs ArrayList只有最后一个查询。我通过维护存储查询的全局ArrayLists解决了这个问题。但是,当规则返回时,是否还有另一种方法可以使用ANTLR,而不是拥有自己的全局ArrayLists?

非常感谢, DIMOS。

1 个答案:

答案 0 :(得分:1)

嗯,问题解决了。我刚刚将ArrayList添加到db规则中,如下所示:

db [ArrayList queries]:'DB'....

然后在查询规则:

$分贝:: queries.add(查询)

所以,一切都很好!

无论如何,谢谢你的期待!