如何处理ANTLR中的列表返回值

时间:2009-04-17 04:29:51

标签: return-value antlr action antlrworks

在ANTLR中解决此问题的正确方法是什么:

我有一个简单的语法规则,比如一个包含任意数量元素的列表。

list
: '[]' 
| '[' value (COMMA value)* ']'

如果我想为list分配一个返回值,并且该值是生产中返回值的实际列表,那么正确的方法是什么?我很有趣的选择是:

  • 在全局范围内创建我自己的堆栈以跟踪这些列表
  • 尝试检查我下面的树节点并以这种方式提取信息
  • 以一种光滑而酷炫的方式访问它,我希望能够从中找到可以从与规则相关的操作中轻松访问这样的列表。

我想问题是:很酷的孩子怎么做呢?

(仅供参考我使用的是ANTLR的python API,但是如果你用另一种语言打我,我可以处理它)

2 个答案:

答案 0 :(得分:5)

在C#中,它可能如下所示:

list returns [ List<string> ValueList ]
    @init
    {
        $ValueList = new List<string>();
    }
    : '[]'
    | '[' value {$ValueList.Add(value);} (COMMA value {$ValueList.Add(value);})* ']'
    ;

答案 1 :(得分:1)

我想更简单的方法可能是

list returns [ List values ]
: '[]' 
| '[' vs+=value (COMMA vs+=value)* ']' {
        $values = $vs;
}