Parsing 如何更改应用于antlr4生成的类和方法的访问修饰符?

Parsing 如何更改应用于antlr4生成的类和方法的访问修饰符?,parsing,antlr4,Parsing,Antlr4,我不希望antlr生成的类和方法公开给公共API 有一个6年前的答案。但我希望有一种更现代、更真实的方法来做这件事。好吧,你不能。您可以在语法中使用超类选项,以便扩展自定义解析器类,在该类中,您只定义您想要公开的那些方法: grammar T; options { superClass=MyParser; } parse : id+ EOF ; id : ID ; ID : [a-zA-Z] [a-zA-Z0-9_]* ; 您的MyParser类可以如下所示: 公共抽象

我不希望antlr生成的类和方法公开给公共API


有一个6年前的答案。但我希望有一种更现代、更真实的方法来做这件事。

好吧,你不能。您可以在语法中使用
超类
选项,以便扩展自定义解析器类,在该类中,您只定义您想要公开的那些方法:

grammar T;

options {
  superClass=MyParser;
}

parse
 : id+ EOF
 ;

id
 : ID
 ;

ID
 : [a-zA-Z] [a-zA-Z0-9_]*
 ;
您的
MyParser
类可以如下所示:

公共抽象类MyParser扩展了Parser{
公共MyParser(令牌流输入){
超级(输入);
}
抽象TParser.ParseContext parse()引发识别异常;
}
然后像这样实例化解析器:

TLexer lexer=new-TLexer(CharStreams.fromString(“foo”);
MyParser parser=newTparser(newCommonTokenStream(lexer));
parser.parse();//好啊
parser.id();//不行
但我需要隐藏整个班级。这个类应该是内部的,它在库的内部方法中被调用


那不是你可以马上做的事。我认为,您必须使用一些后期构建脚本(简单的搜索/替换)来添加这些内容。

如果您的目标是在商业项目中对其他人隐藏生成的类,那么模糊处理是唯一“现代且真实”的方法。公开/内部翻页从来不是一种方式。不,不是商业性的。只是为了通用性&对于公共api分析器,seems-like有答案,但它在antlr4Aha上不起作用,谢谢,但我需要实际隐藏整个类。这个类应该是内部的,它在库的内部方法中被调用