2009-06-01 80 views
8

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

眼下,野牛生成以下代码这是有问题:

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

的问题是,UTF-8字符串的许多字节将具有负值,和Bison解释负值作为EOF,并停下来。

有没有办法解决这个问题?

回答

8

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

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

+0

那么,我的词法分析器处理UTF-8字符就好了,但Bison解析器只要看到一个负值就会停止解析。请指教。 – 2009-06-01 14:52:16

+0

你一次读取1个字节的文件吗?或一次utf-8编码的字符? – eduffy 2009-06-01 14:53:41

+0

一次1个字节。 – 2009-06-01 14:59:29

4

flex成为问题在这里,你可能想看看zlex

0

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

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