2009-04-20 5 views
3

저는 JavaCC를 사용하여 문법을 만들고 있으며 작은 문제를 해결했습니다. ASCII 확장 집합 내의 모든 유효한 문자가 결과 컴파일러에 의해 인식되도록 허용하려면 노력하고있어. 내가 올바르게 이해 해요 경우JAVACC를 사용하여 확장 된 문자 인식하기

< CHARACTER: 

    ( (~["'"," ","\\","\n","\r"]) 
    | ("\\" 
     (["n","t","b","r","f","\\","'","\""] 
     | ["0"-"7"] (["0"-"7"])? 
     | ["0"-"3"] ["0"-"7"] ["0"-"7"] 
     ) 
    ) 
) 

> 

는 8 진수 표현에 일치해야합니다 같은 JavaCC에 예 내 문자를 인식하기 위해 다음 토큰을 설정합니다 (JavaCC에 문법 자체를 보여주는 주로 예)보고 후 0-377 (확장 ASCII 세트의 모든 256 문자를 포함)의 모든 ASCII 문자 중 하나입니다. 이것은 모든 키보드 문자 (a-z, 0-9,?,./etc)와 대부분의 특수 문자 (©, ¬ ®)의 경우에도 예상대로 수행됩니다. 그러나 '상표'기호 (™)를 구문 분석 할 때마다 파서는 심볼을 인식 할 수 없음을 나타내는 파일 끝 예외를 계속 throw합니다. 상표 기호가 허용 될 수 있도록 캐릭터의 정의를 향상시킬 수있는 확실한 방법이 있습니까?

답변

1

내 문법을 수행하기를 원하는 것은 ASCII 문자가 아닌 유효한 모든 유니 코드 문자를 허용한다는 것이 밝혀졌습니다. ™ 기호는 유니 코드 사양의 일부이며 ASCII 확장 문자 집합이 아닙니다. 아래에 설명 된 내 문제를 해결로 유효한 문자 내 토큰 변경 :합니다 (포맷팅 및 U + 00FF의 유효한 유니 코드 존재) 내가 텍스트 파일의 특수 기호를 인식하기위한 유사한 문제를했다

< CHARACTER:( (~["'"," ","\\","\n","\r"]) 
| ("\\" 
    (["n","t","b","r","f","\\","'","\""] 
    | ["u","U"]["+"]["0"-"9","a"-"f","A"-"F"]["0"-"9","a"-"f","A"-"F"]["0"-"9","a"-"f","A"-"F"]["0"-"9","a"-"f","A"-"F"] 
    ) 
))> 
0

(중 CP1252 또는 ISO-8859-1로 encode)를 파싱하기 전에 String에 읽어 들였습니다. 내 솔루션은 문법 헤더에 UNICODE_INPUT를 추가했다 :

options { 
    UNICODE_INPUT=true; 
} 

산들 바람처럼 일했다.

JavaCC 옵션에 대한 추가 정보 : http://javacc.java.net/doc/javaccgrm.html

관련 문제