首页
学习
活动
专区
圈层
工具
发布

树评估
EN

Stack Overflow用户
提问于 2014-06-11 20:13:44
回答 1查看 249关注 0票数 1

我用antlr4为类似json的语言构建了一个语法。

语法文件:https://github.com/antlr/grammars-v4/tree/master/json

如何使用traverse函数遍历树?到目前为止,我有下面的代码,它输出令牌流,但我必须用正则规则再次解析它,以获得成员和值。

代码语言:javascript
复制
public void Visit(IParseTree tree)
    {
        for (int i = 0; i < tree.ChildCount; i++)
        {
            if (tree.GetChild(i).ChildCount > 0)
            {
                Visit(tree.GetChild(i));

            }
            else
            {
                Console.WriteLine(tree.GetChild(i).ToString());
            }
        }
    }

我用以下命令得到树:

代码语言:javascript
复制
        GramatikaLexer lexer = new GramatikaLexer(inputStream);
        CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);
        GramatikaParser parser = new GramatikaParser(commonTokenStream);

        IParseTree tree = parser.start(); // start is entry point in .g4 file
EN

回答 1

Stack Overflow用户

发布于 2014-06-12 14:22:10

在某个地方应该有一个可以用作基类的GramatikaParserBaseVisitor<T>

然后你可以重写虚函数,比如(这里:T == object) object VisitStart(StartContext context),它的参数比IParseTree具有更丰富的接口,你可以通过名称访问子函数,并且它们也是类型化的,即类型为<Child>Context而不仅仅是IParseTree

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24162667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档