不推荐使用ANTLRInputStream和ANTLRFileStream,有哪些替代方案?

时间:2018-05-26 09:33:41

标签: antlr antlr4

如果我使用

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

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

编译器显示两个类的弃用错误是什么替代?

2 个答案:

答案 0 :(得分:6)

您可以使用CharStream代替不推荐使用的类,如下所示。

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(); 

答案 1 :(得分:0)

对于@Mike Lischke的评论,不幸的是Unicode支持并没有简单地折叠到现有的ANTLRInputStream中,而不是创建了新的CharStreams类(并且破坏了现有代码,尽管(通常是?)?) -fix way“:难道是因为ANTLRInputStream是非Unicode流而写了一些代码(例如,仅8或16位字符)?

我是ANTLR的新手(十年前在CS课上学习了生锈的Java。),所以我不知道对ANTLRInputStream的 incomplete Unicode支持有多少?

“不要将旧界面折叠为新行为,只创建一个新界面”让我想起了看起来像源代码恒定状态的Apple Swift(以及它们的Cocoa / iOS / etc API)兼容性通量。