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. oracle删除重复数据,只保留一条

    比如,某个表要按照id和name重复,就算重复数据 delete from 表名 where rowid not in (select min(rowid) from 表名 group by id,n ...

  2. 结构型模式(二) 桥接模式(Bridge)

    一.动机(Motivation) 在很多游戏场景中,会有这样的情况:[装备]本身会有的自己固有的逻辑,比如枪支,会有型号的问题,同时现在很多的游戏又在不同的介质平台上运行和使用,这样就使得游戏的[装备 ...

  3. Vue 实例成员

    Vue 一. 什么是Vue 可以独立完成前后端分离时 Web项目的JavaScript框架 二.为什么学Vue 前端三大主流框架:Angular React Vue Vue结合了其他框架优点.轻量级. ...

  4. OAuth 2.0攻击

    参考文章:https://www.yuque.com/pmiaowu/web_security_1/oauth 作者:PHPoop 关于OAuth2.0协议的授权流程可以参考下面的流程图: 1.Cli ...

  5. 有关 Java (jackson包问题 ,MappingJacksonHttpMessageConverter 和 MappingJackson2HttpMessageConverter问题)

    今天这一系列问题吃掉我四个小时,所以现在吸收掉. 一. 整理所有错误信息: 1.错误信息:java.lang.NoClassDefFoundError: Could not initialize cl ...

  6. [Javascript] Avoid Accidental Returns of New State by using the void Keyword

    For example we have a 'useState' function, which takes a state and a function to update the state: c ...

  7. Ubuntu 系统安装教程

  8. 洛谷 P2661 信息传递 题解

    P2661 信息传递 题目描述 有 \(n\) 个同学(编号为 \(1\) 到 \(n\) )正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为 \(i\) 的同学的信息传 ...

  9. UOJ46 【清华集训2014】玄学 【时间线段树】

    题目链接:UOJ 这题的时间线段树非常的妙. 对时间建立线段树,修改的时候在后面加,每当填满一个节点之后就合并进它的父亲. 对于一个节点维护序列,发现这是一个分段函数,合并就是归并排序.于是就形成了差 ...

  10. Reed-Solomon纠错码的译码

    其中用到了等比数列展开:1/(1-\alpha).  此时,似乎应该将\alpha视为模远小于1的复数. 只有这样,\alpha^i 才能作为一个有限域中的元素展开.它在一个半径小于1的圆上,由若干具 ...