Flex(lexer)支持unicode

前端之家收集整理的这篇文章主要介绍了Flex(lexer)支持unicode前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道最新版本的flex是否支持unicode?

如果是这样,怎样才能使用模式来匹配汉字?

更多:
Use regular expression to match ANY Chinese character in utf-8 encoding

解决方法

目前,flex只生成8位扫描仪,这基本上限制了您使用UTF-8。所以如果你有一个模式:
肖晗   { printf ("xiaohan\n"); }

它将按预期工作,因为模式和输入中的字节序列将相同。字符类更困难。如果你想匹配字符肖或晗,你不能写:

[肖晗]   { printf ("xiaohan/2\n"); }

因为这将匹配六个字节0xe8,0x82,0x96,0xe6,0x99和0x97中的每一个,这实际上意味着如果您提供肖晗作为输入,则模式将匹配六次。所以在这种简单的情况下,你必须将模式重写(肖|晗)。

对于范围,汉斯·阿伯格写了一个tool in Haskell,将其转换成8位模式:

Unicode> urToRegU8 0 0xFFFF
[\0-\x7F]|[\xC2-\xDF][\x80-\xBF]|(\xE0[\xA0-\xBF]|[\xE1-\xEF][\x80-\xBF])[\x80-\xBF]
Unicode> urToRegU32 0x00010000 0x001FFFFF
\0[\x01-\x1F][\0-\xFF][\0-\xFF]
Unicode> urToRegU32L 0x00010000 0x001FFFFF
[\x01-\x1F][\0-\xFF][\0-\xFF]\0

这不漂亮,但它应该工作。

原文链接:https://www.f2er.com/flex/174392.html

猜你在找的Flex相关文章