2012-12-26 20 views
0

我使用antlr語法和antlr Ruby Target解析PHP代碼。我必須解析的一個源文件實際上包含翻譯,其中一些大量使用Unicode字符。語法似乎掛在「輔助飛機」中的一個角色上,即U+10430Antlr生成的詞法分析器掛在「輔助平面」的unicode字符上(antlr 3.4)

由於Ruby antlr目標非常陳舊,並且不符合unicode(當然,Ruby當時不是),所以過去有類似的問題。我們不得不將RubyTarget.java的getMaxCharValue從0xFF(ascii)改爲0xFFFF(unicode)來解決它。現在看來,即使這個集合還不夠。 Unicode規定超出此範圍的字符可能使用兩個UTF-16字符表示,但antlr如何管理這個字符?會再次碰撞getMaxCharValue有幫助(它曾經做過,但我不是「嘗試」方法的粉絲)?

謝謝!

回答

1

ANTLR的參考Java目標只能通過在語法中使用UTF-16代理對並在輸入流中使用UTF-16編碼來解析輔助平面中的字符。其他目標由社區成員創建,可能或(如您所見,Ruby目標)可能不支持相同範圍的字符。

由於在語法本身中無法表示任何過去的0xFFFE,所以即使您修改目標以支持0xFF以上的字符,也只能使用UTF-16編碼。

+0

感謝您提供的信息豐富的答案。我不需要像這樣表示它們(這些字符在引用的字符串中,對我沒有實際意義),只是爲了讓詞法分析器在這種情況下接受它們作爲「QuotedString」的有效內容。你有使用UTF-16代理對的語法的例子嗎? – Martin

+0

好的,也發現這個:http://www.antlr.org/pipermail/antlr-interest/2009-August/035780.html應該幫助人們在這種情況下。 – Martin

相關問題