6.4 词法元素

1、token(标记):

keyword(关键字)

identifier(标识符)

constant(常量)

string-literal(字符串字面量)

punctuator(标点符号)

preprocessing-token(预处理标记):

header-name(头文件名)

identifier(标识符)

pp-number(预处理数字)

character-constant(字符常量)

string-literal(字符串字面量)

punctuator(标点符号)

每个不属于上述其中之一的非空白字符

约束

2、每个被转换为一个标记的预处理标记应该具有一个关键字、一个标识符、一个常量、一个字符串字面量,或一个标点符号的词法形式。

语义

3、一个标记是在翻译阶段7和8中最小的语言词法元素。标记的类别有:关键字、标识符、常量、字符串字面量,以及标点符号。一个预处理标记是翻译阶段3到6中的最小语言词法元素。预处理标记的类别有:头文件名、标识符、预处理数字、字符常量、字符串字面量、标点符号,以及单个非空白字符,并且它在词法上不与其它预处理标记类别匹配。[注:一个额外的类别——记位符,被内部用于翻译单元阶段4(见6.10.3.3);它不能在源文件中发生。]如果一个'或一个"字符匹配了最后一个类别,那么行为是未定义的。预处理标记可以用空白空间来分隔;空白空间由注释(稍后描述),或空白字符(空格、水平制表符、换行、垂直制表符,以及换页),或两者同时构成。正如在6.10中所描述的,在某些情况下,在翻译阶段4期间,空白空间担当了比起预处理标记分隔更多任务。空白空间可以出现在一个预处理标记内,仅作为头文件名的一部分,或在一个字符常量或字符串常量中的引号字符之间的一部分。

4、如果输入流已经被解析为预处理标记到一个给定的字符,那么下一个预处理标记是可以构建一个预处理标记的最长字符序列。对这个规则有一个例外:头文件名预处理标记仅在#include预处理指示符内以及在实现定义的#pragma指示符内的位置被识别。在这样的上下文中,一个要么可以作为一个头文件名,要么可以作为一个字符串字面量的字符序列被识别为前者。

5、例1  程序片段1Ex被解析为一个预处理数字标记(它并不是一个有效的浮点或整数常量标记),即使被解析为预处理标记1Ex两个标记可能产生一个有效的表达式(比如,如果Ex是一个宏,被定义为+1)。类似地,程序片段1E1被解析为一个预处理数字(它是一个有效的浮点常量标记),无论E是否为一个宏名。

6、例2  程序片段x+++++y被解析为x ++ ++ + y,这违反了递增操作符的约束,即便将其解析为x ++ + ++ y可能产生一个正确的表达式。

6.4.1 关键字

6.4.2 标识符

6.4.3 通用字符名

6.4.4 常量

6.4.5 字符串字面量

6.4.6 标点符号

6.4.7 头文件名

6.4.8 预处理数字

6.4.9 注释

最新文章

  1. 怎样写一个webpack loader
  2. java指定路径写、读文件
  3. UVa 11210 (DFS) Chinese Mahjong
  4. Notes on Probabilistic Latent Semantic Analysis (PLSA)
  5. spark1.1.0部署standalone分布式集群
  6. ie11 selenium 报错org.openqa.selenium.NoSuchWindowException: Unable to get browser 处理方法
  7. Java线程池带图详解
  8. WebSocket-java实践
  9. 搭建activemq服务
  10. python 过滤四字节字符 表情字符
  11. 安装Go插件遇到的问题及解决方法
  12. B树学习总结
  13. webpack.prod.conf.js
  14. VSCode 设置侧边栏字体大小;Visual Studio Code改变侧边栏大小
  15. mysql中LIKE和REGEXP
  16. 【Linux 命令】sed 命令
  17. 分块 (貌似能用LCT做,反正我现在还不会) BZOJ 2002
  18. JS关闭页面弹窗提醒
  19. Java线程问题(基础回顾)
  20. [洛谷P4774] [NOI2018]屠龙勇士

热门文章

  1. java容器三:HashMap源码解析
  2. Java精通并发-wait与sleep方法字节码分析
  3. SourceTree&Git -01 -代码拉取推送流程 -提交时的相关注意事项
  4. rocketmq那些事儿之集群环境搭建
  5. Machine learning system design---prioritizing what to work on
  6. 【小技巧】O(1)快速乘
  7. Chrome抓包小技巧
  8. Tensorflow细节-P174-真正的图像预处理
  9. 012——软件安装之_matlab2019安装
  10. Apache Solr Velocity模板远程代码执行