微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

一个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 举报,一经查实,本站将立刻删除。