0

我正在使用 antlr Grammar 和antlr Ruby Target解析 PHP 代码。我必须解析的源文件之一实际上包含翻译,其中一些大量使用 Unicode 字符。语法似乎挂在“补充平面”的一个字符上,即U+10430

过去我也遇到过类似的问题,因为 Ruby antlr 目标很老,而且不兼容 unicode(嗯,当时 Ruby 不兼容)。我们不得不将 RubyTarget.java getMaxCharValue 从 0xFF (ascii) 提高到 0xFFFF (unicode) 来解决它。现在看来,即使是这一套也不够。Unicode 声明此范围之外的字符可以使用两个 UTF-16 字符表示,但 antlr 如何管理呢?再次碰撞 getMaxCharValue 会有所帮助吗(它曾经做过一次,但我不喜欢“尝试”方法)?

谢谢 !

4

1 回答 1

1

ANTLR 的参考 Java 目标只能通过在语法中使用 UTF-16 代理对并对输入流使用 UTF-16 编码来解析补充平面中的字符。其他目标是由社区成员创建的,可能或(如您所见的 Ruby 目标)可能不支持相同范围的字符。

由于无法在语法本身中表示超过 0xFFFE 的任何内容,因此即使您修改目标以支持高于 0xFF 的字符,您也将被限制为 UTF-16 编码。

于 2012-12-26T15:27:20.123 回答