Java, JavaCC: Как проанализировать символы вне BMP?

Я обращаюсь к спецификации XML 1.1.

Посмотрите на определение NameStartChar:

NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]

Если я интерпретирую это правильно, последний диапазон (#x10000-#xEFFFF) идет вне диапазона UTF16 Java char ввести. Таким образом, это должен быть UTF32, правильно? Так, я должен проверить пар char против этого диапазона, вместо сингла chars, правильно?

Мои вопросы:

  • Как я проверяю на такие диапазоны символов с помощью стандартных методов Java?
  • Как возможно определить такие диапазоны в JavaCC?
    • JavaCC жалуется на \u10000 и \uEFFFF

Спасибо!

Примечание: Не волнуйтесь, я не пытаюсь записать собственный XML-синтаксический-анализатор.
Править: Я пишу синтаксический анализатор, который проверил бы, будет ли ввод текста от разных текстовых форматов (не XML) соответствовать допустимым именам XML.

5
задан Alan Moore 20 May 2010 в 16:50
поделиться

1 ответ

Взгляните на Character.toCodePoint (char, char) , который преобразует суррогатную пару в кодовую точку полного диапазона. String.codePointAt тоже может быть вам полезен.

В символах и строках есть много других суррогатов. Чтобы точно знать , какие методы вызывать, нам нужно знать точные детали вашей ситуации.

3
ответ дан 15 December 2019 в 06:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: