我了解如何使用 ANTLR 从字符流生成 AST。
我希望能够以编程方式创建 AST 并让 ANTLR 应用语法中的规则以产生有效的输出,例如添加不在 AST 中的语法内容,例如引号和空格。
要使用 tree walker,您似乎需要将 TokenStream 附加到 TreeNodeStream,但如果树是通过编程创建的,则没有 TokenStream。未能在 CommonTreeNodeStream 上调用 setTokenStream(...) 会导致运行时出现 NullPointerExceptions。
例子:
TokenStream tokens = new CommonTokenStream(new MyLexer(somestream));
// parse an AST 'ast' from this stream
CommonTreeNodeStream nodes = new CommonTreeNodeStream(ast);
// needs this or npe
nodes.setTokenStream(tokens);
new MyWalker(nodes).start();
所以 - 你可以在没有字符流输入的情况下即时创建 AST 并让一些生成的 ANTLR 类根据语法中定义的规则生成字符流吗?