2012-12-09 3 views
1

: 그것은 그에 관해서UTF-8 렉스와 (플렉스) 나는 다음과 같은 정의로 지정된 렉서를

ws  [ \t\n]+ 
punc   (\.|\,|\!|\?) 
word  ({punc}|[a-zA-Z0-9])* 
special   (\%|\_|\&|\$|\#) 

내가 구문 분석 할 필요가 일부 UTF-8 파일을 가지고 있고, 자연스럽게 불면 문자. 나는 과거에 비슷한 질문을 몇 번이나했지만, 아무도 도움을받지 못했다는 것을 알고있다. 나는 this 답변에 주어진 접근 방식을 사용하려했지만 실패했습니다. 문제는 위의 word의 정의에 있다고 생각하십니까?

flex를 사용하여 UTF-8 인코딩을 사용하는 일반적인 개념에 대해 자세히 설명해 줄 수 있다면 정말 도움이 될 것입니다.

+0

그리고 이것은 19500의 "FLEX"태그를 착용 한 질문입니다. GZ! :) –

+0

예, Adobe가 이미 사용중인 제품의 이름을 선택했기 때문입니다 (1992 년, IIRC 이후) – wildplasser

+0

나는 시원하게 들렸습니다. D – hosolmaz

답변

2

시도 (플렉스 -8 가진 - 공정) :

%% 
ws  [ \t\n]+ 
punc   (\.|\,|\!|\?) 
word  ({punc}|[a-zA-Z0-9\x80-\xf3])* 
special   (\%|\_|\&|\$|\#) 

%% 

Kaz's anwer로 이어지는, 영업 의해 metioned 링크 (코딩 조금 코스 세밀한입니다 ...)이 훨씬 더 정확한 WRT입니다 허용 된 순서

+0

출력을 다시 검사하여 실제로 utf- 8 번째 출력. (나는 터미널에 utf-8 지원이 없으므로 잘못 읽었습니다.) 그러나 유니 코드 문자는 별도의 단어로 취급되었습니다. 당신이 말한대로 단어의 정의를 바꾸면 문제가 해결됩니다. BTW는 xf3과 xf4 사이의 차이점이 상한값입니까? xf4는 개인적인 용도로 예약되어 있으며 xf5 +는 유효하지 않습니다. – hosolmaz

+0

나의 플렉스 구문은 약간 녹슬었고 실제로 이것을 추측으로 입력했지만 flex *는 완전한 8 비트를 지원하는 것처럼 보입니다. 0x7f 이상의 모든 문자 (및 시퀀스)가 유효한 utf 시퀀스는 아니며, 수락하는 데 더 제한적일 수 있습니다. – wildplasser

+0

질문에 링크 된 답변을보십시오. 나는 그들이 무능한 간격을 다듬어서 저것을 달성했다고 생각한다? 그래서 그것은''\ x80- \ xbf, \ xc2- \ xdf, \ xe0- \ xef, \ xf0- \ xf4''입니다. – hosolmaz