Antlr生成的词法分析器挂起“补充平面”的unicode字符(antlr 3.4)

时间:2012-12-26 14:16:13

标签: unicode antlr astral-plane

我正在使用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再次提供帮助(它曾经做过一次,但我不喜欢“尝试”方法)?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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