2011-04-22 1 views
1

* .jjt 파일에 키릴 문자 토큰을 만들 수 있습니까?JavaCC에서 어떻게 키릴 문자를 지원합니까?

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

하지만 JJ 파일의 토큰은 끔찍한 모양 : exampe 토큰

는 jjt에 제시되어있다

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

내가 할 경우

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" > 
} 

은 다음과 같은 옵션을 사용하여 그녀의 수업의 도움으로 유니 코드 :

프로그램 시작 후
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 

, 나는 유니 코드 문자열이 일치하지 않는 것을 볼 수 있습니다. 예를 들어 :

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

는 이런 일이 발생하는 이유는 아이디어가 있습니까?

추신 :이 버그는 Windows OS에서만 발생합니다.

+1

이 질문이 있으십니까? 아니면 다음과 같이 대답 했습니까? _ "다음 옵션을 사용하십시오. ..."_? –

+0

수정 해 주셔서 감사합니다 –

답변

1

.jj 파일은 키릴 문자를 이스케이프 처리 (유니 코드)하여 생성되었습니다. 이는 잘못된 인코딩을 사용하여 오해 할 수 없기 때문에 좋은 것입니다. 그것에 대해 걱정할 필요가 없습니다. 토큰 관리자는 정상적으로 작동합니다.

+0

그 점은 이해하지만 javacc은 유니 코드를 끔찍합니다. –

+0

@Nicolay Moskvin 좀 더 정확하게 설명해 주실 수 있습니까? "끔찍한"이란 뜻은 무엇입니까? –

+0

때문에 "\ u0442 \ u0435 \ u0441 \ u0442"대신 "\는 u0421 \는 u201a \는 u0420 \ u00b5는 \ u0421는 \ u0403는 \ u0421는 \ u201a" –