如何使用Lex / Yacc识别中文字符标识符?
答案 0 :(得分:2)
我认为你的意思是Lex(词法分析器)。 Yacc是解析器生成器。
根据What's the complete range for Chinese characters in Unicode?,大多数CJH字符属于3400-9FFF
范围。
根据http://dinosaur.compilertools.net/lex/index.html
任意角色。几乎匹配 任何角色,操作员角色 。是所有角色的类 除了换行符。逃到八进制是 可能虽然不便携:
[\40-\176]
匹配中的所有可打印字符 ASCII字符集,来自八进制40 (空白)到八进制176(代字号)。
所以我认为你需要的是[\32000-\117777]
。
答案 1 :(得分:0)
GreatVendor\Db
不关心中文字符,但是Yacc
会这样做:它负责分析输入字节(和字符)以识别标记。但是,汉字通常是多字节的。有一些 {/ em> lex
这样的程序可以支持这一点,但它们不是lex
。已经多次讨论过。
进一步阅读:
标准词汇标记器
lex
(或lex
)不接受多字节字符,因此对许多人而言是不切实际的现代语言。本文档描述了从描述UTF-8多字节字符的正则表达式到单字节正则表达式的映射。
Flex(lexer) support for unicode(2012/3/8)
答案指出如何通过使用UTF-8模式的特殊情况来解决限制。
Unicode Support in Flex(2009/4/26)
基本上与之前相同(但前面的,以及这些评论的可能来源)
How do I lex unicode characters in C?
答案列出了可能所做的一些替代实施。