문제

UTF-8 캐릭터를 처리하기 위해 들소 파서를 만들려고합니다. 파서가 실제로 유니 코드 문자 값을 해석하는 것을 원하지 않지만 UTF-8 문자열을 바이트 시퀀스로 구문 분석하고 싶습니다.

현재 Bison은 문제가되는 다음 코드를 생성합니다.

  if (yychar <= YYEOF)
    {
      yychar = yytoken = YYEOF;
      YYDPRINTF ((stderr, "Now at end of input.\n"));
    }

문제는 UTF-8 문자열의 많은 바이트가 음수 값을 가질 것이며 Bison은 음수 값을 EOF로 해석하고 중지한다는 것입니다.

이것에 대한 방법이 있습니까?

도움이 되었습니까?

해결책

bison 예, flex 아니요. UTF-8 인코딩 된 파일로 작업하기 위해 Bison Parser가 필요했을 때 내 자신의 글을 썼습니다. yylex 기능.

편집하다: 도움을주기 위해 사용 가능한 많은 유니 코드 작업을 사용했습니다. 말 잘하는 (거기에 gunicode 유용한 유용한 파일/문자열 조작 함수를 입력합니다).

다른 팁

flex 여기서 문제가되면 살펴보고 싶을 수도 있습니다. zlex.

이것은 4 년 전의 질문이지만, 같은 문제에 직면하고 있으며 아이디어를 공유하고 싶습니다.

문제는 UTF-8에서 읽을 바이트 수를 모른다는 것입니다. 위에서 제안한 것처럼 자신의 Lexer를 사용하고 전체 줄을 읽거나 매번 4 바이트를 읽게 할 수 있습니다. 그런 다음 UTF-8 문자를 추출하고 더 많은 바이트를 읽고 4 바이트로 다시 완료하십시오.

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