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

Rya*_*yan 5 action antlr return-value antlrworks

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

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

list
: '[]' 
| '[' value (COMMA value)* ']'
Run Code Online (Sandbox Code Playgroud)

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

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

我想问题是:酷孩子们如何做到这一点?

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

Don*_*eba 5

在C#中它可能看起来像这样:

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