ANTLR解析器生成以下生成的代码:
protected TreeAdaptor adaptor = new CommonTreeAdaptor();
我已经实现了自己的TreeAdaptor,并且希望解析器始终使用我的而不使用CommonTreeAdaptor()。我发现的唯一方法是每次创建新解析器时都在调用代码中设置它:
Parser parser = new MyParser();
parser.setTreeAdaptor(new MyAdaptor());
有什么方法可以设置默认的TreeAdaptor或向生成的构造函数附加一些初始化代码?
最佳答案
有什么方法可以设置默认的TreeAdaptor或向生成的构造函数附加一些初始化代码?
一种方法是添加一个设置自定义树适配器的静态方法:
grammar T;
options {
output=AST;
ASTLabelType=CommonTree;
}
@parser::members {
public static TParser newTParser(TreeNodeStream input) {
TParser parser = new TParser(input);
parser.setTreeAdaptor(new MyAdaptor());
return parser;
}
}
parse
: Any* EOF
;
Any
: .
;
然后您可以替换:
TParser parser = new TParser(input);
与
TParser parser = TParser.newTParser(input);