问题描述
有一个6岁的答案Antlr generated classes access modifier to internal。但我希望有一种更现代,更真实的方法来实现这一目标。
解决方法
AFAIK,您不能。您可以在语法中使用superClass
选项,以便扩展自定义解析器类,在其中仅定义要公开的那些方法:
grammar T;
options {
superClass=MyParser;
}
parse
: id+ EOF
;
id
: ID
;
ID
: [a-zA-Z] [a-zA-Z0-9_]*
;
和您的MyParser
类可能如下所示:
public abstract class MyParser extends Parser {
public MyParser(TokenStream input) {
super(input);
}
abstract TParser.ParseContext parse() throws RecognitionException;
}
然后像这样实例化解析器:
TLexer lexer = new TLexer(CharStreams.fromString("foo"));
MyParser parser = new TParser(new CommonTokenStream(lexer));
parser.parse(); // OK
parser.id(); // No can do
但是我实际上需要隐藏整个班级。这个类应该是内部的,它在lib的内部方法中被调用
您不能执行AFAIK。我想,您必须使用一些构建后脚本(简单的搜索/替换)来添加自己。