May 29, 2007

ECMA-262试译:7.8 Literals(下)

语义

数值常量代表数值类型的值。用两个步骤来确定这个值:首先,从常量中获得数学值;然后,用下面所描述的方式舍入这个数学值。

  • 数值常量的MV :: 十 进制常量的MV 是 十进制常量的MV。
  • 数值常量的MV :: 十六进制整数常量的MV 是 十六进制整数常量的MV。
  • 十进制常量的MV :: 十进制整数常量 .十进制整数常量的MV。
  • 十进制常量的MV :: 十进制整数常量 . 十进制数十进制整数常量的MV 加 ( 十进制数的MV 乘以 10 -n ), 这里的 n十进制数中的字符数。
  • 十进制常量的MV :: 十进制整数常量 . 指数部分十进制整数常量的MV 乘以 10 e的MV ,这里的 e的MV 是 指数部分的MV。
  • 十进制常量的MV :: 十进制整数常量 . 十进制数 指数部分 是 ( 十进制整数常量的MV 加 ( 十进制数的MV 乘以 10-n )) 乘以 10e, 这里的 n十进制数中的字符数 和 e的MV 是 指数部分的MV。
  • 十进制常量的MV ::. 十进制数十进制数的MV 乘以 10-n, 这里的 n十进制数中 的字符数。
  • 十进制常量的MV :: . 十 进制数 指数部分的MV 是 十进制数的MV 乘以 10e-n,这里的 n十进制数中的字符数 且 e指数部分的MV。
  • 十进制常量的MV :: 十进制整数常量十进制整数常量的MV。
  • 十进制常量的MV :: 十进制整数常量 指数部分十进制整数常量的MV 乘以 10e的MV, 这里的 e 是 指数部分的MV。
  • 十进制整数常量的MV :: 0 是 0。
  • 十进制整数常量的MV :: 非 零数字 十进制数 是 ( 非零数字的MV 乘以 10n的MV ) 加 十进制数的MV, 这里的 n十进制数中的字符数。
  • 十进制数的MV :: 十 进制数字十进制数字的MV.
  • 十进制数的MV :: 十 进制数 十进制数字 是 ( 十进制数的MV 乘以 10) 加 十进制数字的MV。
  • 指数部分的MV :: 指 数指示符 有符号整数有符号整数的MV。
  • 有符号整数的MV :: 十 进制数十进制数的MV.
  • 有符号整数的MV :: + 十进制数十进制数的MV.
  • 有符号整数的MV :: - 十进制数的MV 是 十进制数的负MV.
  • 十进制数字的MV :: 0 or of 十六进制数字 :: 0 是 0.
  • 十进制数字的MV :: 1 or of 非零数字 :: 1 or of 十六进制数字 :: 1 是 1. 十进制数字的MV :: 2 or of 非零数字 :: 2 or of 十六进制数字 :: 2 是 2.
  • 十进制数字的MV :: 3 or of 非零数字 :: 3 or of 十六进制数字 :: 3 是 3.
  • 十进制数字的MV :: 4 or of 非零数字 :: 4 or of 十六进制数字 :: 4 是 4.
  • 十进制数字的MV :: 5 or of 非零数字 :: 5 or of 十六进制数字 :: 5 是 5. 十进制数字的MV :: 6 or of 非零数字 :: 6 or of 十六进制数字 :: 6 是 6.
  • 十进制数字的MV :: 7 or of 非零数字 :: 7 or of 十六进制数字 :: 7 是 7.
  • 十进制数字的MV :: 8 or of 非零数字 :: 8 or of 十六进制数字 :: 8 是 8.
  • 十进制数字的MV :: 9 or of 非零数字 :: 9 or of 十六进制数字 :: 9 是 9. 十六进制数字的MV :: a or of 十六进制数字 :: A 是 10.
  • 十六进制数字的MV :: b or of 十六进制数字 :: B 是 11.
  • 十六进制数字的MV :: c or of 十六进制数字 :: C 是 12.
  • 十六进制数字的MV :: d or of 十六进制数字 :: D 是 13.
  • 十六进制数字的MV :: e or of 十六进制数字 :: E 是 14.
  • 十六进制数字的MV :: f or of 十六进制数字 :: F 是 15.
  • 十六进制整数常量的MV :: 0x 十六进制数字十六进制数字的MV。
  • 十六进制整数常量的MV :: 0X 十六进制数字十六进制数字的MV。
  • 十六进制整数常量的MV :: 十 六进制整数常量 十六进制数字 是 ( 十六进制整数常量的MV 乘以 16) 加 十六进制数字的MV。

一旦数值常量的 MV 被精确地确定,接下来就会被舍入为数值类型的一个值。如果 MV 是0,那么舍入值为 +0; 否则,舍入值必须正是 MV 的值(在8.5中定义),除非该常量是 一个有效数字超过20位的十进制常量——在这种情况下,此数字的值是下 面两种之一:一是将其20位之后的每个有效数字用0替换,产生此常量的 MV;二是将其20位之后的每个有效数字用0替换,并在20位有效数字之后增加数字位,产生此常量的 MV 值。判断一个数字是否为有 效数字,首先它不能是指数部分的一部分,且

  • 它不是0;或
  • 它的左边是一个非零值,右边是一个不在指数部分中的非零值。

7.8.4 字符串常量

字符串常量是被单引号或双引号括起的零个或多个字符。每个字符都可以呈现为转义序列。

语法

字符串常量 :: " 双字符串字符集opt "
'
单字符串字符sopt '

双字符串字符集 :: 双字符串字符 双字符串字符集opt

单字符串字符s :: 单字符串字符 单字符串字符sopt

双字符串字符 :: 源代码字符 but not 双引号 " or 反斜杠 \ or 行结束符
\ 转义序列

单字符串字符 :: 源代码字符 but not 单引号 ' or 反斜杠 \ or 行结束符
\ 转义序列

转义序列 :: 字符转义序列
0 [lookahead ? 十进制数字]
十六进制转义序列
Unicode转义序列

字符转义序列 :: 单个转义字符
非转义字符

单个转义字符 :: one of ' " \ b f n r t v

非转义字符 :: 源代码字符 but not 转义字符 or 行结束符

转义字符 :: 单个转义字符
十进制数字

x
u

十六进制转义序列 :: x 十六进制数字 十六进制数字

Unicode转义序列 :: u 十六进制数字 十六进制数字 十六进制数字 十六进制数字

非终止十六进制数字的定义在7.8.3节中给出。源 代码字符的描述在章节26中。

字符串常量代表字符串类型的值。该常量的字符串值(SV)的描述,取决于字符串常量各个部分提供的字符值(CV)。作为此过程的一部 分,一些字符串常量中的字符被解释为拥有数学值(MV),正如下文和章节7.8.3中所描述的。

  • 字符串常量的SV :: "" 是 空字符序列
  • 字符串常量的SV :: '' 是 空字符序列
  • 字符串常量的SV :: " 双字符串字符集 " 是 the SV of 双字符串字符集.
  • 字符串常量的SV :: ' 单字符串字符s '单字符串字符s的SV.
  • 双字符串字符集的SV :: 双字符串字符 是一个字符的序列,双字符串字符的SV.
  • 双字符串字符集的SV :: 双字符串字符 双字符串字符集双字符串字符的SV 的序列 后跟所有双字符串字符集的SV 中的有序字符
  • 单字符串字符集的SV :: 单字符串字符 是一个字符的序列, 单字符串字符的SV.
  • 单字符串字符s :: 单字符串字符 单字符串字符s单字符串字符后跟所有单字符串字符集的SV 中的有序字符
  • 双字符串字符 :: 源代码字符 but not 双引号 " or 反斜杠 \ or 行结束符 是 the 源代码字符 字符本身。
  • 双字符串字符 :: \ 转义序列转义序列. 单字符串字符 :: 源代码字符 but not 单引号 ' or 反斜杠 \ or 行结束符源代码字符 字符本身。
  • 单字符串字符 :: \ 转义序列转 义序列.
  • 转义序列 :: 字符转义序列 是 the 字符转义序列.
  • 转义序列 :: 0 [lookahead ? 十进制数字] 是 a 字符 (Unicode 值 0000).
  • 转义序列 :: 十六进制转义序列十六进制转义序列.
  • 转义序列 :: Unicode转义序列Unicode转义序列.
  • 字符转义序列 :: 单个转义字符 是 由单个转义字符根据下表确定的代码点值的字符:
//此处表格不发,blogger支持不好。
  • 字符转义序列 :: 非转义字符 是 the 非转义字符.
  • 非转义字符 :: 源代码字符 but not 转义字符 or 行结束符 是 the 源代码字符 字符本身。
  • 十六进制转义序列 :: x 十六进制数字 十六进制数字 是以 (第一个十六进制数字的 MV 值的16倍) 加 (第二个 十六进制数字的 MV 值) 为代码点值的字符。
  • Unicode转义序列 :: u 十六进制数字 十六进制数字 十六进制数字 十六进制数字 是以 (第一个 十六进制数字)的 MV 的 (4096 (即, 163 )倍) 加 (第二个 十六进制数字)的 MV 的(256 (即 , 162 )倍) 加 (第三个 十六进制数字的 16 倍) 加 (第四个 十六进制数字的 MV) 为代码点值的字符。
NOTE
“行结束”字符不能出现在字符串常量中,即使在它前面有一个反斜杠 \。 使行结束字符成为字符串常量的值一部分的正确方法是,使用转义序列,如 \n\u000A

7.8.5 正则表达式常量

正则表达式常量被扫描后,转换为 RegExp 对象的输入元素(章节15.10)。 此对象在包含它的程序或函数开始求值之前被创建。求值此常量产生一个到那个对象的引用;这不产生新对象。决不能用 === 比较被程序求值为正则表达式对象的两个正则表达式常量,即使两个常量内容相同。在运行时创建RegExp 对象,可以用 new RegExp (章节15.10.4),或者以函数的方式调用 RegExp 构造函数(章节15.10.3)。

下面的产生式描述了正则表达式常量的语法,以及输入元素扫描器查找正则表达式常量结尾的方法。给正则表达式构造函数传递包含正 则表达式体正则表达式徽标的、不被解释的字符串,将以更严厉的文法,根据它们自己解释它 们。实现可以扩展正则表达式构造函数的文法,但不应扩展正 则表达式体正则表达式徽标的产生式,以及被它们使用的产生式。

语法

正则表达式常量 :: / 正则表达式体 / 正则表达式徽标

正则表达式体 :: 正则表达式首字符 正则表达式字符集

正则表达式字符集 :: [empty]
正则表达式字符集 正则表达式字符

正则表达式首字符 :: 非结束符 but not * or \ or /
反斜杠序列

正则表达式字符 :: 非结束符 but not \ or /
反斜杠序列

反斜杠序列 :: \ 非结束符

非结束符 :: 源代码字符 but not 行结束符

正则表达式徽标 :: [empty]
正则表达式徽标 标识部分

NOTE
正则表达式常量不可为空;// 开始一个单行注释而非表示空正则表达式。描述空正则表达式,使用 /(?:)/


语义

正则表达式常量代表一个 Object 类型的值。确定该值要两个步骤:首先,包含和的产生式延伸的字符,只收集、不解释地转为两个字符串,分别为 Pattern 和 Flags。然后,用参数 Pattern 和 Flags 两个参数调用 new RegExp 构造函数,结果是 正则表达式常量 的值。如果调用 new RegExp 产生了错误,可能的实现是,作为其判断力,在扫描程序时立即报错,或推迟报错,直到该正则表达式常量在出现执行的轨迹中被求值。

No comments: