ANTLRInputStream и ANTLRFileStream устарели, каковы альтернативы? - PullRequest
0 голосов
/ 26 мая 2018

Если я использую

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

или

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

Компилятор показывает ошибку устаревания для обоих классов, что является альтернативой?

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Что касается комментария @Mike Lischke о том, что, к сожалению, поддержка Unicode была не просто свернута в существующий ANTLRInputStream, а не создала новый класс CharStreams (и нарушил существующий код, хотя (возможно? Обычно?) "Легко-fix манера ": Может ли быть так, что какой-то код записывается для ANTLRInputStream в зависимости от того, что это поток не в Юникоде (например, только 8 или 16-битные символы)?

Я новичок в ANTLR (и выбираю ржавыйЯва снова после изучения 10 лет назад в классе CS.), Поэтому я не знаю, насколько была неполная поддержка Unicode для ANTLRInputStream.

«Не меняйте старое»интерфейс для складывания в новом поведении, просто создать новый ", что напоминает мне Apple Swift (и их API-интерфейсы Cocoa / iOS / и т.д.), который, кажется, находится в постоянном состоянии потока совместимости с исходным кодом.

0 голосов
/ 26 мая 2018

Вы можете использовать класс 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(); 
...