2013-05-15 2 views
2
내가 N, U, O, A, I, é 같은 악센트 문자를 포함하여 입력 파일에서 모든 단어를 추출하는 JFlex으로 파서를 만들 필요가

, ...JFlex과 악센트 문자

내 문제는 UTF8 인코딩과 % unicode 태그를 사용하여 모든 파일을 설정하더라도 해당 문자를 인식 할 수 없다는 것입니다.

import java_cup.runtime.*; 
%% 
%class ParserLex 
%unicode 
%public 
%final 
%cup 

%init{ 
%init} 

%{ 
    private Symbol sym(int type) { 
     return sym(type, yytext()); 
    } 
    private Symbol sym(int type, Object value) { 
     return new Symbol(type, yyline, yycolumn, value); 
    } 
%} 

Token  = [áéíóú] 
ANY   = . 

%% 

{Token} 
    { System.out.println(yytext()); } 

{ANY} 
    { } 

그리고 내 테스트 클래스는 이와 같은 것입니다 :

.lex이다 파일은 다음과 같습니다

class ParserTest { 
    public static void main(String[] args) throws IOException { 
     InputStreamReader reader = new InputStreamReader(new FileInputStream(args[0]), "UTF8"); 
     ParserLex parser = new ParserLex(reader); 
     for (Symbol sym = parser.next_token(); sym.sym != 0; sym = parser.next_token()) { 
     } 
     reader.close(); 
    } 
} 

이 문제에 대한 어떤 아이디어 나 조언을?

+0

일부 OS charset 설정이 당신을 망칠 가능성을 최소화하기 위해 StringReader를 사용하도록 테스트를 변경하면됩니다. 그렇지 않으면 나에게 좋을 것 같습니다. 생성 된 .java 파일을 검사하여 잘못된 점을 확인 했습니까? – Recurse

답변

0

내가 최근 jFlex 리눅스에 있다는 내 UTF-8 문자 리터럴

"⊖" { return new Symbol(Symbols.CIRCLED_MINUS, 1, yycolumn + 1, null); } 

에 대한

Warning in file "scanner.jflex" (line 42): 
Rule can never be matched: 
"???" { return new Symbol(Symbols.CIRCLED_MINUS, 1, yycolumn + 1, null); } 

같은 오류를 출력하는 것을 발견, 내가, 예를 인코딩을 지정 LANG 환경 변수를 변경 C.UTF-8, 그 경고를 삭제했습니다. 명령 줄 옵션 -Dfile.encoding=UTF-8을 사용하면 더 휴대하기 편리합니다. 나는 또한 feature request 29을 발견했는데, jFlex가 시스템 기본 인코딩을 존중한다는 것을 암시합니다.

관련 문제