【发布时间】:2010-10-29 15:06:53
【问题描述】:
flex 似乎不支持 UTF-8 输入。每当扫描器遇到非 ASCII 字符时,它就会停止扫描,就好像它是一个 EOF。
有没有办法强制 flex 吃掉我的 UTF-8 字符?我不希望它真正匹配 UTF-8 字符,只是在使用 '.' 时吃掉它们。模式。
有什么建议吗?
编辑
最简单的解决方案是:
任何 [\x00-\xff]
并使用 'ANY' 而不是 '.'在我的规则中。
【问题讨论】:
-
如果它有效,那就太好了 :) 适当的 unicode 支持会很好。
-
同意。我现在正在处理一个不同的问题,Flex 检查“if(yychar
-
你会遇到很多问题。从内部看,重写 ecs 代码、表格生成器和其他东西将是一项任务。从头开始可能会更好:P 需要帮助吗?
-
啊。这太可怕了。我在 flex 邮件列表上发布了一个问题,我们将看看这些人要说什么。
-
只是我的 2 美分:使用
ANY [\x00-\xff]代替 . (点)是一个糟糕的主意:1)不安全,它接受无效的 UTF-8(溢出,非 Unicode 平面),2)它只匹配一个字节而不是 UTF-8 多字节,3)你需要启用 8 -bit,并非所有 lex/flex 工具都支持。要匹配一个有效的 UTF-8 字符,您需要[\x00-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xec][\x80-\xbf][\x80-\xbf]|\xed[\x80-\x9f][\x80-\xbf]|[\xee\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf3][\x80-\xbf][\x80-\xbf][\x80-\xbf]|\xf4[\x80-\x8f][\x80-\xbf][\x80-\xbf]
标签: utf-8 lexical-analysis flex-lexer