如何处理Antlr 4生成的LISP样式树



我使用Antlr 4语法解析了一个SQL查询。tree.toStringTree()的结果是:([]([845]SELECT([87845]([1473 878 845]([1129 1473 878 845]([1700 1129 1473 873 845]col1)))as([1477 878 845]a))FROM([1887 845]([1487 887 845]

Antlr文档告诉我这是一个LISP样式的树。如何进一步处理LISP树?

如果您提供Parser实例:,对您的眼睛会更友好

SQLiteLexer lexer = new SQLiteLexer(new ANTLRInputStream(sql));
SQLiteParser parser = new SQLiteParser(new CommonTokenStream(lexer));
ParseTree tree = parser.select_stmt();
System.out.println(tree.toStringTree(parser));

至于你处理这个字符串的问题:你不应该。它只是用来展示树的。就像正常的toString()一样。您不应该解析这个字符串,因为无法保证它在不同版本之间看起来是一样的。

我以前建议过,但会再次这样做:如果你想获得一个层次结构,只需使用ParseTree,它有父引用和子引用。如果这不是你想要的,请更好地解释自己。

相关内容

  • 没有找到相关文章

最新更新