我用antlr4为类似json的语言构建了一个语法。
语法文件:https://github.com/antlr/grammars-v4/tree/master/json
如何使用traverse函数遍历树?到目前为止,我有下面的代码,它输出令牌流,但我必须用正则规则再次解析它,以获得成员和值。
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());
}
}
}我用以下命令得到树:
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发布于 2014-06-12 14:22:10
在某个地方应该有一个可以用作基类的GramatikaParserBaseVisitor<T>。
然后你可以重写虚函数,比如(这里:T == object) object VisitStart(StartContext context),它的参数比IParseTree具有更丰富的接口,你可以通过名称访问子函数,并且它们也是类型化的,即类型为<Child>Context而不仅仅是IParseTree。
https://stackoverflow.com/questions/24162667
复制相似问题