May 26, 2007

ECMA-262试译:6 Source Text

6 源代码文本

ECMAScript 源代码文本被表示为一个 Unicode 编码的字符序列,Unicode 版本2.1或更新,使用 UTF-16 转换格式。我们期望文本已被 Unicode 规范化形式 C(canonical composition)规范化,Unicode 技术报告 #15中描述了它。合乎标准的 ECMAScript 实现不要求展示任何文本的规范化形式,做出它们展示规范化文本的行为,只需展示文本自身。

源文件字符 ::

任何 Unicode 字符

ECMAScript 源文件文本可以包含任何 Unicode 字符。所有的 Unicode 空白字符都被视为空格,所有 Unicode 行、段分隔符都被视为行分隔符。Unicode 非拉丁文字符允许出现在标识符,字符串常量,正则表达式常量和注释中。

贯穿此文档的剩余部分,短语"代码点"和单词"字符"将被用于代指16位无符号值,用来呈现单个 UTF-16的16位单元。短语"Unicode 字符"将被用于代指抽象语言学或排版单元,呈现为单个 Unicode 标量值(可能长于16位,将被呈现为多于一个的代码点)。这儿仅代指单个以 Unicode 标量值形式呈现的实体:组合字符得到的字符序列仍是独立的“Unicode 字符”,即使用户认为整个序列是单个字符。

在字符串常量、正则表达式常量和标识符中,任何字符(代码点)也可以被表示为一个由六个字符组成的 Unicode 转义序列,形式为 \u 加上四个十六进制数字。事实上,在注释中,这样的转义序列被当作注释的一部分忽略 掉。在字符串常量或正则表达式常量中,Unicode 转义序列向常量的值提供一个字符。在标识符中,转义序列给标识符提供一个字符。

NOTE 1
虽然这篇文档常常提到在“字符串”中的“字符”和16位无符号整数 (该字符的 UTF-16 编码)之间的“转换”,但事实上,这种转换是不存在的,因为“字符串& rdquo;中的“字符”其实正是用那个16位无符号整数表示的。

NOTE 2
在对待 Unicode 转义序列的行为方面,ECMAScript 语言与 Java 语言不同。例如,在 Java 程序中,Unicode 转义序列 \u000A 在单行注释中出现,它将被解释为一个行结束符(Unicode 字符000A代表换行),因此下一个字符不再是注释的一部分。类似地,如果
在 Java 程序中,Unicode 转义序列 \u000A 出现在字符串常量中,将被同样解释为一个行结束符,所以它不能允许出现在字符串常量中——要把换行作为字符串常量的值的一部分,必须写成 \n 而不是 \u000A。在 ECMAScript 程序中,在注释中出现的 Unicode 转义序列决不会被解释,因此不能使注释结束。类似地,在 ECMAScript 程序中,在字符串常量中出现的 Unicode 转义序列总是为字符串常量的值提供字符,而决不会被解释成行结束符或引号,这使 Unicode 转义序列不可能结束一个字符串常量。

No comments: