ISO/IEC 9899:2011 条款6.4——词法元素
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被解析为一个预处理数字标记(它并不是一个有效的浮点或整数常量标记),即使被解析为预处理标记1与Ex两个标记可能产生一个有效的表达式(比如,如果Ex是一个宏,被定义为+1)。类似地,程序片段1E1被解析为一个预处理数字(它是一个有效的浮点常量标记),无论E是否为一个宏名。
6、例2 程序片段x+++++y被解析为x ++ ++ + y,这违反了递增操作符的约束,即便将其解析为x ++ + ++ y可能产生一个正确的表达式。
ISO/IEC 9899:2011 条款6.4——词法元素的更多相关文章
- ISO/IEC 9899:2011 条款3——术语、定义与符号
3. 术语.定义与符号 1.对于此国际标准的意图,应用了以下定义.其它术语是在用斜体类型或一个语法规则左侧出现的地方定义.在本国际标准中所显式定义的术语不被假定为对其它地方所定义的类似术语的隐式引用. ...
- ISO/IEC 9899:2011 条款5——5.2.1 字符集
5.2.1 字符集 1.两个字符集和它们相关联的依次顺序应该被定义:写在源文件中的集合(源字符集),以及在执行环境中被解释的集合(执行字符集).每个集合此外被划分为一个基本字符集,其内容由本子条款给出 ...
- ISO/IEC 9899:2011 条款6.4.2——标识符
6.4.2 标识符 6.4.2.1 通用 语法 1.identifier: identifier-nodigit identifier identifier-nondigit identifie ...
- ISO/IEC 9899:2011 条款6——语言
6 语言 6.1 标记法 1.在本条款中所使用的语法标记法.语义类别(非终结符)用斜体字指示,而字面量单词以及字符集成员(终结符)用粗体字指示.跟在一个非终结符后面的冒号(:)引出其定义.在单独的行中 ...
- ISO/IEC 9899:2011 条款6.4.3——通用字符名
6.4.3 通用字符名 语法 1.通用字符名: universal_character-name: \u hex-quad(四位十六进制数) \U hex-quad hex-quad hex-quad ...
- ISO/IEC 9899:2011 条款5——5.1.2 执行环境
5.1.2 执行环境 1.定义了两个执行环境:独立式(freestanding)以及宿主的(hosted).在这两种情况下,当一个派定的C函数被执行环境调用时,程序就启动.所有具有静态存储周期的对象应 ...
- ISO/IEC 9899:2011 条款4——标准顺从
4. 标准顺从 1.在本国际标准中,“应该”被解释为对一个实现或一个程序的要求:相反地,“不该”被解释为禁用. 2.如果违反了出现在一个强制规定或运行时强制规定之外的“应该”或“不该”要求,那么该行为 ...
- ISO/IEC 9899:2011 条款6.10.3——宏替换
6.10.3 宏替换 约束 1.两个替换列表是相同的,当且仅当两个替换列表中的预处理符记都具有相同的数.次序.拼写,以及空白分隔符,这里所有的空白分隔符都认为是相同的. 2.当前被定义为一个类似对象的 ...
- ISO/IEC 9899:2011 条款6.10.1——条件包含
6.10.1 条件包含 约束 1.控制条件包含的表达式应该是一个整数常量表达式,除了:标识符(包括那些词法上与关键字相同的)被解析为以下所描述的:[注:因为控制常量表达式在翻译阶段4期间被计算,所以所 ...
随机推荐
- P1169 [ZJOI2007]棋盘制作[悬线法/二维dp]
题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8 \times 88×8大小的黑白相间的方阵,对应八八六十四卦,黑白 ...
- 《奋斗吧!菜鸟》第九次团队作业:Beta冲刺
项目 内容 这个作业属于哪个课程 任课教师链接 作业要求 https://www.cnblogs.com/nwnu-daizh/p/11056511.html 团队名称 奋斗吧!菜鸟 作业学习目标 B ...
- keras模块学习之model层【重点学习】
本笔记由博客园-圆柱模板 博主整理笔记发布,转载需注明,谢谢合作! model层是keras模块最重要的一个层,所以单独做下笔记,这块比较难理解,本博主自己还在学习这块,还在迷糊中. model的方法 ...
- 2019-2020-1 20199301《Linux内核原理与分析》第七周作业
第六章 进程的描述和进程的创建 学习笔记 1.操作系统的三大管理功能: 进程管理 内存管理 文件系统 2.操作系统最核心的功能是进程管理. 3.为了管理进程,内核要描述进程的结构,也成为进程描述符,进 ...
- 行为型模式(八) 职责链模式(Chain of Responsibility)
一.动机(Motivate) 在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显示指定,将必不可少地带来请求发送者与接受者的紧耦合.如何使请求的发送者不需要指定 ...
- pcl-设置多线段宽度和颜色
显示点云有使用vtk的,有使用 ros 中riz ?库的,使用pcl显示点云数据比较方便,但是对于一些模型形状只能固定特定的效果,比如说直线段,只能绘制点到点两点之间的线段.但是项目需要绘制点1到点2 ...
- CODE FESTIVAL 2016 qual B题解
传送门 \(A\) 什么玩意儿-- const char t[]={"0CODEFESTIVAL2016"}; char s[25];int res; int main(){ sc ...
- 《挑战30天C++入门极限》C++类对象的复制-拷贝构造函数
C++类对象的复制-拷贝构造函数 在学习这一章内容前我们已经学习过了类的构造函数和析构函数的相关知识,对于普通类型的对象来说,他们之间的复制是很简单的,例如: int a = 10; int ...
- 使用docker安装wazuh
使用docker安装wazuh centos下安装wazuh 官方文档: https://documentation.wazuh.com/3.9/installation-guide/installi ...
- 《自制编程语言--基于C语言 郑钢》学习笔记
<自制编程语言>学习笔记 本仓库内容 <自制编程语言>源码 src/sparrow.tgz <自制编程语言>读书笔记 docs/* <自制编程语言>样章 ...