4

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

4

2 回答 2

2

我认为您的意思是 Lex(词法分析器生成器)。Yacc 是解析器生成器。

根据Unicode中汉字的完整范围是多少?, 大多数 CJH 字符都在该3400-9FFF范围内。

根据http://dinosaur.compilertools.net/lex/index.html

任意性格。要匹配几乎任何字符,操作符字符 . 是除换行符以外的所有字符的类。尽管不可移植,但转义为八进制是可能的:

                             [\40-\176]

匹配 ASCII 字符集中的所有可打印字符,从八进制 40(空白)到八进制 176(波浪号)。

所以我会假设你需要的是类似[\32000-\117777].

于 2010-07-08T16:01:11.977 回答
1

Yacc不关心汉字,但lex有:它负责分析输入字节(和字符)以识别令牌。但是,汉字一般都是多字节的。有类似 lex的程序可能支持这一点,但它们不是lex. 已经讨论过好几次了。

进一步阅读:

标准的词法标记器lex(或flex)不接受多字节字符,因此对于许多现代语言来说是不切实际的。本文档描述了从描述 UTF-8 多字节字符的正则表达式到单字节正则表达式的映射。

于 2016-06-19T23:39:08.907 回答