1

我了解如何使用 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 类根据语法中定义的规则生成字符流吗?

4

0 回答 0