【问题标题】:multiple return values in ANTLRANTLR 中的多个返回值
【发布时间】:2013-02-19 09:48:59
【问题描述】:

我在 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 大小)始终为 1。发生这种情况是因为每次在输入中识别出 QUERY 元素时,都会将其添加到 $qs ArrayList 中,但是对于每个其他 QUERY,都会实例化一个新的 ArrayList,并且此查询会添加到这个新的 ArrayList 中。当所有查询都被识别时,db : 规则的操作被调用,但 $query.qs ArrayList 只有最后一个查询。我通过维护存储查询的全局 ArrayLists 解决了这个问题。但是,当规则返回并且没有我自己的全局 ArrayLists 时,还有其他方法可以使用 ANTLR 吗?

提前非常感谢, 迪莫斯。

【问题讨论】:

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


    【解决方案1】:

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

    db [ArrayList 查询] : 'DB' ....

    然后在查询规则处:

    $db::queries.add(查询)

    所以,一切都很好!

    无论如何,感谢您的关注!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 2015-12-10
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多