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. formset的简单使用

    1.modelform class StudentStudyRecordModelForm(forms.ModelForm): class Meta: model = StudentStudyReco ...

  2. 题解 洛谷P3745 【[六省联考2017]期末考试】

    这题有点绕,我写了\(2h\)终于搞明白了. 主要思路:枚举最晚公布成绩的时间\(maxt\),然后将所有公布时间大于\(maxt\)的课程都严格降为\(maxt\)即可. 在此之前,还要搞清楚一个概 ...

  3. Hibernate中的Session

    我们之前也经常使用Session,通过连接服务器将需要保存的值存到服务器的session中,这是之前关于session的简单应用.现在看到Hibernate框架中也有关于Session的定义,该定义是 ...

  4. test20190826 NOIP2019 模拟赛

    100+100+40=240.我觉得如果没做过第三题考场上却能想出来的都是神仙. 基因突变 [问题描述] 邪恶的 707 刚刚从白垩纪穿越回来,心中产生了一个念头:我要统治人类! 但是统治人类是很庞大 ...

  5. ajax跨域-CORS

    CORS:跨域资源共享,是一种跨域访问的W3C标准,它允许浏览器可以跨源服务器进行请求,可以让ajax实现跨域访问.出现跨域问题的原因是浏览器同源策略导致的,协议+域名+端口三者一致被认为是同源.网站 ...

  6. 使用自签CA,Server,client证书和双向认证

    服务端代码 package main import ( "crypto/tls" "crypto/x509" "google.golang.org/g ...

  7. Greenplum FTS故障检测原理

    前言 FTS(Fault Tolerance Serve)是GreenPlum中的故障检测服务,是保证GP高可用的核心功能.GreenPlum的Segment的健康检测及HA是由GP Master实现 ...

  8. learning java AWT EventQs

    import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.Ac ...

  9. 洛谷 P2791 幼儿园篮球题

    洛谷 P2791 幼儿园篮球题 https://www.luogu.org/problemnew/show/P2791 我喜欢唱♂跳♂rap♂篮球 要求的是:\(\sum_{i=0}^kC_m^iC_ ...

  10. (25)打鸡儿教你Vue.js

    vue-cli // 全局安装 vue-cli npm install --global vue-cli // 创建一个基于 webpack 模板的新项目 vue init webpack my-pr ...