[英]Why does the preprocessor distinguish between number and character tokens?
根据语言规范,词法元素定义如下:
token:
keyword
identifier
constant
string-literal
operator
punctuator
preprocessing-token:
header-name
identifier
pp-number
character-constant
string-literal
operator
punctuator
each non-white-space character that cannot be one of the above
为什么预处理令牌级别上的数字和字符之间存在区别,而在令牌级别上,只有常量? 我没有看到这种区别的好处。
C语法中非终端的名称不是规范性的; 它们只是为了描述而存在。 只有正确描述行为才是重要的。 语法本身不足以描述语言; 它需要与文本一起阅读,这对良构的程序施加了进一步的限制。
预处理程序令牌与程序令牌之间没有一对一的关系。 存在重叠:预处理程序identifier
可能是关键字,也可能是各种可定义的符号类型之一(包括一些常量和typedef-names
)。 pp-number
可以是整数或浮点常量,但也可能无效。 词汇产品并非全部互斥,词汇类别实际应用于程序的子串需要标准文本中描述的过程,而不是正式语法。
字符常量直接从预处理器传递到程序语法而不进行修改(尽管它们被包含在constant
类别中)。 如果有关于预处理程序编号的单个注释(例如,如果它们在预处理程序中存活,它们必须可转换为实数数字常量文字)是获得该类别的充分理由。
另外,它会在pp-number
的定义中包含character-constant
? 您仍然需要两种产品来描述语言。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.