8

我正在尝试制作一个 Bison 解析器来处理 UTF-8 字符。我不希望解析器实际解释 Unicode 字符值,但我希望它将 UTF-8 字符串解析为字节序列。

现在,Bison 生成了以下有问题的代码:

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

问题是 UTF-8 字符串的许多字节都会有负值,而 Bison 将负值解释为 EOF,然后停止。

有没有解决的办法?

4

3 回答 3

8

bison是的, flex不。有一次我需要一个 bison 解析器来处理 UTF-8 编码的文件,我最终编写了自己的yylex函数。

编辑:为了提供帮助,我使用了glib中可用的许多 Unicode 操作(我发现有一个gunicode类型和一些文件/字符串操作函数很有用)。

于 2009-06-01T14:50:01.537 回答
4

flex作为这里的问题,您可能想看看zlex.

于 2009-06-01T15:00:49.877 回答
0

这是4年前的一个问题,但我面临同样的问题,我想分享我的想法。

问题是在 UTF-8 中你不知道要读取多少字节。如上所述,您可以使用自己的词法分析器,让它读取整行,或者每次读取 4 个字节。然后从中提取 UTF-8 字符,并读取更多字节以再次完成 4 个字节。

于 2013-07-20T09:38:20.127 回答