ANTLRInputStream和ANTLRFileStream已被弃用,有什么替代方案?

9
如果我使用

ANTLRFileStream antlrFileStream = new ANTLRFileStream("myfile.testlang");

或者

ANTLRInputStream input = new ANTLRInputStream( new FileInputStream("myfile.testlang") );

编译器对这两个类都显示了废弃错误,有什么替代方案吗?


1
关于@Mike Lischke的评论,他认为很不幸的是,Unicode支持没有被简单地合并到现有的ANTLRInputStream中,而是创建了新的CharStreams类(并破坏了现有的代码,尽管以一种(也许?通常?)“易于修复”的方式)。这是否意味着一些为ANTLRInputStream编写的代码依赖于它是非Unicode流(例如仅8位或16位字符)?我对ANTLR还不熟悉(并且在重新学习10年前在CS课程中学习Java之后),因此我不知道ANTLRInputStream的不完整 Unicode支持有多少。"不要改变"的原则是否适用于这种情况? - Jim Witte
1个回答

13
您可以使用CharStreams类代替以下已弃用的类。
CharStream codePointCharStream = CharStreams.fromFileName("myfile.testlang");
TESTLANGLexer lexer = new TESTLANGLexer(codePointCharStream);
TESTLANGParser parser = new TESTLANGParser(new CommonTokenStream(lexer));
parser.addParseListener(new TESTLANGEventListener());

// Start parsing
parser.testlangFile(); 

5
有点不太幸运的是,这些课程已被Java目标弃用(其他目标没有这样做),尽管它们完全可以使用。创建新函数CharStreams.fromFileName()的原因是现在完整支持Unicode。这可能已经合并到现有的类中,但决定不触及它们,并创建一个新的API。 - Mike Lischke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接