字符串字面量

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

公眾號
微信公眾號

編程獅公眾號