ANTLR4不能正确处理UTF-16输入



我正在使用ANTLR 4.10.1和c++。我使用ANTLRInputStream作为输入到我的词法分析器

antlr4::ANTLRInputStream inputStream(....);

在输入中使用UTF-16字符之前工作正常,因为它们稍后会引起问题。

由于ANTLRInputStream在4.10.1中已弃用,因此似乎需要使用CharStreams来指定字符集,即"UTF-16LE"。但是我只能找到Java的文档。是否有一种方法可以使用CharStreams与UTF-16使此工作在c++中?

c++运行时中的输入流实际上总是需要UTF-8 !参见ANTLRInputStream::load中的源代码。在内部,它将其转换为UTF-32。16位转换格式从不使用。

由于这个约定,没有必要弃用ATNLRInputStream的c++版本。这只适用于没有UTF-32的旧语言目标(如JS和Java)。考虑到这一点,您可以忽略c++目标中的新CharStreams类。

最新更新