我在antlr4中为类似json的语言构建了一个语法。
Gramar文件:https://github.com/antlr/grammars-v4/tree/master/json
如何使用Visit功能遍历树?到目前为止,我有代码流,它输出令牌流,但我必须用正则表达规则再次解析它,以获得成员和值。
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
答案 0 :(得分:0)
应该有一个GramatikaParserBaseVisitor<T>
可以用作基类。
然后您可以覆盖虚拟函数,例如(此处:T == object
)
object VisitStart(StartContext context)
,其参数的界面比IParseTree
更丰富,您可以按名称访问子项,它们也是类型,即类型<Child>Context
而不仅仅是IParseTree
{{1}}。