使用Lex/Yacc识别汉字标识符
如何使用Lex/Yacc识别中文字符标识符?
How can I use Lex/Yacc to recognize identifiers in Chinese characters?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何使用Lex/Yacc识别中文字符标识符?
How can I use Lex/Yacc to recognize identifiers in Chinese characters?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
我认为你的意思是 Lex(词法分析器生成器)。 Yacc 是解析器生成器。
根据 Unicode 中汉字的完整范围是多少?,大多数 CJH 字符都属于
3400-9FFF范围。
根据 http://dinosaur.compilertools.net/lex/index.html
所以我假设你需要的是类似
[\32000-\117777]
的东西。I think you mean Lex (the lexer generator). Yacc is the parser generator.
According to What's the complete range for Chinese characters in Unicode?, most CJH characters fall in the
3400-9FFF
range.According to http://dinosaur.compilertools.net/lex/index.html
So I would assume what you need is something like
[\32000-\117777]
.Yacc
不关心中文字符,但lex
关心中文字符:它负责分析输入字节(和字符)以识别标记。然而,汉字一般都是多字节的。有些程序如lex
可能支持此功能,但它们不是lex
。已经讨论过好几次了。进一步阅读:
Flex(lexer) 对 unicode 的支持 (2012/3/8)
答案指出如何通过使用 UTF-8 模式的特殊情况来解决该限制。
Flex 中的 Unicode 支持 (2009/ 4/26)
与之前的基本相同(但在之前,以及这些评论的可能来源)
如何在 C 中 lex unicode 字符?
答案列出了一些可能可以实现此处询问的替代实现。
Yacc
does not care about Chinese characters, butlex
does: it is responsible for analyzing the input bytes (and characters) to recognize tokens. However, Chinese characters generally are multibyte. There are programs likelex
which may support this, but they're notlex
. It has been discussed several times.Further reading:
Flex(lexer) support for unicode (2012/3/8)
Answers point out how you can work around the limitation by using special cases of UTF-8 patterns.
Unicode Support in Flex (2009/4/26)
Essentially the same as the previous (but preceding, and a possible source for those comments)
How do I lex unicode characters in C?
An answer lists some alternative implementations which may do that was asked here.