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 注释

ISO/IEC 9899:2011 条款6.4——词法元素的更多相关文章

  1. ISO/IEC 9899:2011 条款3——术语、定义与符号

    3. 术语.定义与符号 1.对于此国际标准的意图,应用了以下定义.其它术语是在用斜体类型或一个语法规则左侧出现的地方定义.在本国际标准中所显式定义的术语不被假定为对其它地方所定义的类似术语的隐式引用. ...

  2. ISO/IEC 9899:2011 条款5——5.2.1 字符集

    5.2.1 字符集 1.两个字符集和它们相关联的依次顺序应该被定义:写在源文件中的集合(源字符集),以及在执行环境中被解释的集合(执行字符集).每个集合此外被划分为一个基本字符集,其内容由本子条款给出 ...

  3. ISO/IEC 9899:2011 条款6.4.2——标识符

    6.4.2 标识符 6.4.2.1 通用 语法 1.identifier: identifier-nodigit identifier    identifier-nondigit identifie ...

  4. ISO/IEC 9899:2011 条款6——语言

    6 语言 6.1 标记法 1.在本条款中所使用的语法标记法.语义类别(非终结符)用斜体字指示,而字面量单词以及字符集成员(终结符)用粗体字指示.跟在一个非终结符后面的冒号(:)引出其定义.在单独的行中 ...

  5. ISO/IEC 9899:2011 条款6.4.3——通用字符名

    6.4.3 通用字符名 语法 1.通用字符名: universal_character-name: \u hex-quad(四位十六进制数) \U hex-quad hex-quad hex-quad ...

  6. ISO/IEC 9899:2011 条款5——5.1.2 执行环境

    5.1.2 执行环境 1.定义了两个执行环境:独立式(freestanding)以及宿主的(hosted).在这两种情况下,当一个派定的C函数被执行环境调用时,程序就启动.所有具有静态存储周期的对象应 ...

  7. ISO/IEC 9899:2011 条款4——标准顺从

    4. 标准顺从 1.在本国际标准中,“应该”被解释为对一个实现或一个程序的要求:相反地,“不该”被解释为禁用. 2.如果违反了出现在一个强制规定或运行时强制规定之外的“应该”或“不该”要求,那么该行为 ...

  8. ISO/IEC 9899:2011 条款6.10.3——宏替换

    6.10.3 宏替换 约束 1.两个替换列表是相同的,当且仅当两个替换列表中的预处理符记都具有相同的数.次序.拼写,以及空白分隔符,这里所有的空白分隔符都认为是相同的. 2.当前被定义为一个类似对象的 ...

  9. ISO/IEC 9899:2011 条款6.10.1——条件包含

    6.10.1 条件包含 约束 1.控制条件包含的表达式应该是一个整数常量表达式,除了:标识符(包括那些词法上与关键字相同的)被解析为以下所描述的:[注:因为控制常量表达式在翻译阶段4期间被计算,所以所 ...

随机推荐

  1. java 实现 单链表

    class Node{ public int val; public Node next; public Node(int val){ this.val=val; } } class LinkList ...

  2. redis的过期策略都有哪些?内存淘汰机制都有哪些?手写一下LRU代码实现?

    redis的过期策略都有哪些? 设置过期时间: set key 的时候,使用expire time,就是过期时间.指定这个key比如说只能存活一个小时?10分钟?指定缓存到期就会失效. redis的过 ...

  3. 0030redis主从复制以及哨兵模式的搭建

    ------------------------------redis主从备份以及哨兵模式------------------------------------------------------- ...

  4. PHP——汉字完美转为ASCII码

    前言 对接联通的接口,让我学会了不少PHP偏门函数....,主要对方用的py,我这用的PHP,人家一个函数解决了, 我这还要自己写方法,也是比较蛋疼,但是学到东西还是很开心的~ 代码 字符串转为ASC ...

  5. python字符转数字

    print(float("260.01478420521632365364543423")) 260.0147842052163

  6. java集合Map

    参考文章:https://blog.csdn.net/yjn1995/article/details/89784891 1.map接口 1.map接口实现类,HashMap.LinkListMap.H ...

  7. H3CNE学习4 命令行简介

    一.命令 1.简单命令 2.给路由器接口配置IP地址 3.常用命令 4.删除配置

  8. Mybatis 入门 (二)

    1. Mapper配置文件处理特殊字符 用 > 和 &It; 代替 > 和 < 2. 延迟加载 单表查询性能比多表关联查询要高得多,即先查询单表,如果需要关联多表时再进行查询 ...

  9. 一个简单的直播demo for java

    obs推流,nginx挂rtmp模块,配置rtmp端口,obs向此端口推流,video.js H5拉流播放 加阿里CDN 超级简单- -

  10. 计蒜客模拟赛 #5 (B 题) 动态点分治+线段树

    虽然是裸的换根dp,但是为了在联赛前锻炼码力,强行上了点分树+线段树. 写完+调完总共花了不到 $50$ 分钟,感觉还行. code: #include <bits/stdc++.h> # ...