UTF-8 문자 입력을 읽기 위해 Flex (어휘 스캐너)를 만드는 방법은 무엇입니까?
-
06-09-2019 - |
문제
그것은 것 같습니다 몸을 풀다 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