Как сделать поддержку кириллицы в JavaCC? - PullRequest
1 голос
/ 22 апреля 2011

Могу ли я создать кириллические токены для файла * .jjt?

Например, токены приведены в jjt:

TOKEN : /* LITERALS */
{
    < TEST: "тест" >
|   < DEVELOP: "разработка" >
}

, но токены в файле jj выглядят ужасно:

TOKEN : /* LITERALS */
{
    < TEST: "\u0421\u201a\u0420\u00b5\u0421\u0403\u0421\u201a" >
|   < DEVELOP: "\u0421\u0402\u0420\u00b0\u0420\u00b7\u0421\u0402\u0420\u00b0\u0420\u00b1\u0420\u0455\u0421\u201a\u0420\u0454\u0420\u00b0" >
}

Используйте следующие опции:

options {
  JDK_VERSION = "1.6";
  UNICODE_INPUT = true;
  JAVA_UNICODE_ESCAPE = false;
  TRACK_TOKENS=true;
  STATIC=false;
}

Если я делаю Unicode с помощью ее класса:

class GetUnicode {
  public static void main(String[] args) {
      if (args.length < 1) return;
      for (String input: args) {
        for (int index = 0; index < input.length(); ++index) {
            final char c = input.charAt(index); 
            final String s = String.format ("\\u%04x", (int)c);
            System.out.print(s);
        }
        System.out.println();
      }
  }
}

После запуска программы:

$ java GetUnicode тест разработка                                                                                                                                                                                       
\u0442\u0435\u0441\u0442
\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430

В результате я вижу, что строки Unicode не совпадают.Например:

"\u0442\u0435\u0441\u0442" != "\u0421\u201a\u0420\u00b5\u0421\u0403\u0421\u201a"

У вас есть идеи, почему это происходит?

PS: эта ошибка возникает только в ОС Windows.

1 Ответ

1 голос
/ 25 апреля 2011

Файл .jj был создан с экранированными кириллическими символами (Unicode).Это хорошо, так как они не могут быть неправильно истолкованы при использовании неправильной кодировки.Вы не должны беспокоиться об этом;менеджер токенов будет работать нормально.

...