【发布时间】:2013-03-29 06:48:23
【问题描述】:
我正在编写一个编译器(用于我自己的编程语言),我希望允许用户使用 Unicode 字母类别中的任何字符来定义标识符(现代语言,如 Go 已经允许这样的语法)。 我已经阅读了很多关于 C++11 中字符编码的内容,并且根据我发现的所有信息,使用 utf32 编码会很好(在词法分析器中迭代速度很快,并且它比 utf8 有更好的支持在 C++ 中)。
在 C++ 中有isalpha 函数。我如何测试wchar32_t 是否是字母(在任何语言中被归类为“字母”的 Unicode 代码点)?
有可能吗?
【问题讨论】:
-
Unicode 标准包括在编程语言的“标识符”中应允许哪些字符的指南。 C++ 实际上被指定遵循这些准则,尽管在实际实现中支持仍然参差不齐。除了标识符和某些文字之外,您不必对字符进行分类,因为您几乎可以准确地指定每个标记。
-
在哪里可以找到这些指导方针?是否有任何 C++ 函数可以检查特定字符是否可以在编程语言的“标识符”中使用(根据规范)?
-
这个问题是关于测试有效的C++标识符字符还是有效的字母字符?
-
有效的字母字符,很抱歉造成混淆。 (我希望用户能够在我的语言中使用任何字母字符作为标识符的一部分),但第二个问题的答案也很好:)
-
有关 Unicode 标识符的定义,请参见 UAX #31。