UTF-8 문자 입력을 읽기 위해 Flex (어휘 스캐너)를 만드는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/921648

문제

그것은 것 같습니다 몸을 풀다 UTF-8 입력을 지원하지 않습니다. 스캐너가 비 ASCII 숯을 만날 때마다 마치 EOF 인 것처럼 스캔을 중지합니다.

Flex가 내 UTF-8 숯을 먹도록 강요하는 방법이 있습니까? 나는 그것이 실제로 UTF-8 숯과 일치하는 것을 원하지 않습니다. 무늬.

어떠한 제안?

편집하다

가장 간단한 솔루션은 다음과 같습니다.

모든 [ x00- xff

그리고 '대신'대신 ''사용 '을 사용하십시오. 내 규칙에서.

도움이 되었습니까?

해결책

나는 이것을 직접 조사하고 Flex 메일 링리스트를 읽고 누군가가 그것에 대해 생각하는지 확인했습니다. Flex가 유니 코드를 읽도록하는 것은 복잡한 일입니다 ...

UTF-8 인코딩을 수행 할 수 있으며 대부분의 다른 인코딩 (16S)은 자동 카타를 구동하는 거대한 테이블로 이어집니다.

지금까지 일반적인 방법은 다음과 같습니다.

내가 한 일은 단순히 단일 UTF-8 문자와 일치하는 패턴을 쓰는 것입니다. 그들은 다음과 같은 것처럼 보이지만 오래 전에 이것을 썼기 때문에 UTF-8 사양을 다시 읽고 싶을 수도 있습니다.
물론 단일 문자뿐만 아니라 유니 코드 문자열을 원하기 때문에이를 결합해야합니다.

UB [\200-\277] %% 
[\300-\337]{UB}                   { do something } 
[\340-\357]{UB}{2}                { do something } 
[\360-\367]{UB}{3}                { do something } 
[\370-\373]{UB}{4}                { do something } 
[\374-\375]{UB}{5}                { do something }

메일 링리스트에서 가져 왔습니다.

UTF-8 지원을위한 적절한 패치를 더 살펴본 후에 볼 수 있습니다. 위의 솔루션은 대형 .L 파일에 대해 유지할 수없는 것 같습니다. 그리고 정말 추악합니다! ''를 만들기 위해 비슷한 범위를 사용할 수 있습니다. 모든 ASCII 및 UTF-8 문자와 일치하는 규칙을 대체하지만 여전히 못 생겼습니다.

도움이 되었기를 바랍니다!

다른 팁

NegateT 문자 클래스를 작성하면 다음과 같은 도움이 될 수 있습니다.

n t] whitespace를 반환합니다. [^ n t] retrun non_whitespace

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top