使用Lex/Yacc识别汉字中的标识符

如何使用Lex/Yacc识别汉字中的标识符?使用Lex/Yacc识别汉字中的标识符

回答:

我想你是指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]的东西。

回答:

Yacc不关心中文字符,但lex呢:它负责分析输入字节(和字符)以识别令牌。但是,汉字通常是多字节的。有程序lex可能支持这个,但他们不是lex。已经讨论过好几次了。

进一步阅读:

  • Adding utf-8 Encoding to Lex

标准词汇标记生成器,lex(或flex),不接受多字节字符,并且是用于正是如此不切实际许多现代语言。本文档描述了从描述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?

    的回答列出一些可替代可能这样做的实现在这里被问到。

以上是 使用Lex/Yacc识别汉字中的标识符 的全部内容, 来源链接: utcz.com/qa/266145.html

回到顶部