如何解决如何更改应用于antlr4生成的类和方法的访问修饰符?
有一个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。我想,您必须使用一些构建后脚本(简单的搜索/替换)来添加自己。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。