字符串字面量

2018-06-16 14:47 更新

一个字符串字面量是关闭的单引号或双引号里的零个或多个字符。每个字符都可以用一个转义序列代表。除了闭合银行字符,反斜杠,回车,行分隔符,段落分隔符,换行符之外的所有字符都可以直接出现的字符串字面量里。任何字符都可以通过转移序列的形式出现。


语法


StringLiteral :: 
" DoubleStringCharactersopt "
 ' SingleStringCharactersopt '
DoubleStringCharacters :: 
DoubleStringCharacter DoubleStringCharactersopt
SingleStringCharacters :: 
SingleStringCharacter SingleStringCharactersopt
DoubleStringCharacter :: 
SourceCharacter but not double-quote " or backslash \ or LineTerminator 
\ EscapeSequence 
LineContinuation
SingleStringCharacter :: 
SourceCharacter but not single-quote ' or backslash \ or LineTerminator 
\ EscapeSequence 
LineContinuation
LineContinuation :: 
\ LineTerminatorSequence
EscapeSequence :: 
CharacterEscapeSequence 
0 [lookahead ∉ DecimalDigit] 
HexEscapeSequence 
UnicodeEscapeSequence
CharacterEscapeSequence :: 
SingleEscapeCharacter 
NonEscapeCharacter
SingleEscapeCharacter :: one of 
' " \ b f n r t v
NonEscapeCharacter :: 
SourceCharacter but not EscapeCharacter or LineTerminator
EscapeCharacter :: 
SingleEscapeCharacter 
DecimalDigit 
x 
u
HexEscapeSequence :: 
x HexDigit HexDigit
UnicodeEscapeSequence :: 
u HexDigit HexDigit HexDigit HexDigit


7.6 给出了 HexDigit 非终结符的定义。 第 6 章 定义了 SourceCharacter。


语义


一个字符串字面量代表一个 String 类型的值。字面量的字符串值 (SV) 由字符串字面量各部分贡献的字符值 (CV) 描述。作为这一过程的一部分,字符字面量里的某些字符字符会被解释成包含数学值 (MV),如 7.8.3 和下面描述的。

  • StringLiteral :: "" 的 SV 是空字符序列。
  • StringLiteral :: 的 SV 是空字符序列。
  • StringLiteral :: " DoubleStringCharacters " 的 SV 是 DoubleStringCharacters 的 SV。
  • StringLiteral :: ' SingleStringCharacters ' 的 SV 是 SingleStringCharacters 的 SV。
  • DoubleStringCharacters :: DoubleStringCharacter 的 SV 是包含一个字符的序列,此字符的 CV 是 DoubleStringCharacter 的 CV。
  • DoubleStringCharacters :: DoubleStringCharacter DoubleStringCharacters 的 SV 是 (DoubleStringCharacter 的 CV 后面跟着 DoubleStringCharacters 的 SV 里所有字符的)序列。
  • SingleStringCharacters :: SingleStringCharacter 的 SV 是包含一个字符的序列,此字符的 CV 是 SingleStringCharacter 的 CV。
  • SingleStringCharacters :: SingleStringCharacter SingleStringCharacters 的 SV 是(SingleStringCharacter 的 CV 后面跟着 SingleStringCharacters 的 SV 里所有字符的)序列。
  • LineContinuation :: \ LineTerminatorSequence 的 SV 是空字符序列。
  • DoubleStringCharacter :: SourceCharacter but not double-quote " or backslash \ or LineTerminator 的 CV 是 SourceCharacter 字符自身。
  • DoubleStringCharacter :: \ EscapeSequence 的 CV 是 EscapeSequence 的 CV。
  • DoubleStringCharacter :: LineContinuation 的 CV 是空字符序列。
  • SingleStringCharacter :: SourceCharacter but not single-quote ' or backslash \ or LineTerminator 的 CV 是 SourceCharacter 字符自身。
  • SingleStringCharacter :: \ EscapeSequence 的 CV 是 EscapeSequence 的 CV。
  • SingleStringCharacter :: LineContinuation 的 CV 是空字符序列。
  • EscapeSequence :: CharacterEscapeSequence 的 CV 是 CharacterEscapeSequence 的 CV。
  • EscapeSequence :: 0 [lookahead ∉ DecimalDigit] 的 CV 是 字符(Unicode 值 0000)。
  • EscapeSequence :: HexEscapeSequence 的 CV 是 HexEscapeSequence 的 CV。
  • EscapeSequence :: UnicodeEscapeSequence 的 CV 是 UnicodeEscapeSequence 的 CV。
  • CharacterEscapeSequence ::SingleEscapeCharacter 的 CV 是表格 4 里的 SingleEscapeCharacter 确定的代码单元值字符:


表4——字符串单字符转义序列

转义序列字符编码值名称符号
\b\u0008回格<BS>
\t\u0009水平制表符<HT>
\n\u000A进行(新行)<LF>
\v\u000B竖直制表符<VT>
\f\u000C进纸<FF>
\r\u000D回车<CR>
\"\u0022双引号"
\'\u0027单引号'
\\\u005C反斜杠\

  • CharacterEscapeSequence :: NonEscapeCharacter 的 CV 是 NonEscapeCharacter 的 CV.
  • NonEscapeCharacter :: SourceCharacter but not EscapeCharacter or LineTerminator 的 CV 是 SourceCharacter 字符自身 .
  • HexEscapeSequence :: x HexDigit HexDigit 的 CV 是 ((16 乘第一个 HexDigit 的 MV) 加第二个 HexDigit 的 MV) 代码单元确定的字符。
  • UnicodeEscapeSequence :: u HexDigit HexDigit HexDigit HexDigit 的 CV 是 (4096 乘第一个 HexDigit 的 MV) 加 (256 乘第二个 HexDigit 的 MV) 加 (16 乘第三个 HexDigit 的 MV) 加 ( 第四个 HexDigit 的 MV) 代码单元确定的字符。


符合标准的实现,在处理严格模式代码(见 10.1.1)时,按照 B.1.2 的描述,不得扩展 EscapeSequence 包含 OctalEscapeSequence 的语法。


行终结符不能出现在字符串字面量里,除非它成为 LineContinuation 的一部分产生空字符序列。让字符串字面量的字符串值包含行终结符的正确方法是使用转义序列,如 \n或 \u000A。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号