5.5. Strings
StringExpression = (* variant: *) StringLiteral (* Deprecated in 0.5.14 *)
| (* variant: *) StringLiterals (* Introduced in 0.5.14 *)
| (* variant: *) HexStringLiteral (* Deprecated in 0.5.14 *)
| (* variant: *) HexStringLiterals (* Introduced in 0.5.14 *)
| (* variant: *) UnicodeStringLiterals; (* Introduced in 0.7.0 *)
(* Introduced in 0.5.14 *)
StringLiterals = (* item: *) StringLiteral+;
StringLiteral = (* variant: *) SINGLE_QUOTED_STRING_LITERAL
| (* variant: *) DOUBLE_QUOTED_STRING_LITERAL;
(* Deprecated in 0.4.25 *)
SINGLE_QUOTED_STRING_LITERAL = "'" («ESCAPE_SEQUENCE_ARBITRARY» | !("'" | "\\" | "\r" | "\n"))* "'";
(* Introduced in 0.4.25 and deprecated in 0.7.0. *)
SINGLE_QUOTED_STRING_LITERAL = "'" («ESCAPE_SEQUENCE» | !("'" | "\\" | "\r" | "\n"))* "'";
SINGLE_QUOTED_STRING_LITERAL = "'" («ESCAPE_SEQUENCE» | " "…"&" | "("…"[" | "]"…"~")* "'";
(* Deprecated in 0.4.25 *)
DOUBLE_QUOTED_STRING_LITERAL = '"' («ESCAPE_SEQUENCE_ARBITRARY» | !('"' | "\\" | "\r" | "\n"))* '"';
(* Introduced in 0.4.25 and deprecated in 0.7.0. *)
DOUBLE_QUOTED_STRING_LITERAL = '"' («ESCAPE_SEQUENCE» | !('"' | "\\" | "\r" | "\n"))* '"';
DOUBLE_QUOTED_STRING_LITERAL = '"' («ESCAPE_SEQUENCE» | " "…"!" | "#"…"[" | "]"…"~")* '"';
(* Introduced in 0.5.14 *)
HexStringLiterals = (* item: *) HexStringLiteral+;
HexStringLiteral = (* variant: *) SINGLE_QUOTED_HEX_STRING_LITERAL
| (* variant: *) DOUBLE_QUOTED_HEX_STRING_LITERAL;
SINGLE_QUOTED_HEX_STRING_LITERAL = "hex'" «HEX_STRING_CONTENTS»? "'";
DOUBLE_QUOTED_HEX_STRING_LITERAL = 'hex"' «HEX_STRING_CONTENTS»? '"';
«HEX_STRING_CONTENTS» = «HEX_CHARACTER» «HEX_CHARACTER» ("_"? «HEX_CHARACTER» «HEX_CHARACTER»)*;
«HEX_CHARACTER» = "0"…"9" | "a"…"f" | "A"…"F";
(* Introduced in 0.7.0 *)
UnicodeStringLiterals = (* item: *) UnicodeStringLiteral+;
(* Introduced in 0.7.0 *)
UnicodeStringLiteral = (* variant: *) SINGLE_QUOTED_UNICODE_STRING_LITERAL
| (* variant: *) DOUBLE_QUOTED_UNICODE_STRING_LITERAL;
(* Introduced in 0.7.0 *)
SINGLE_QUOTED_UNICODE_STRING_LITERAL = "unicode'" («ESCAPE_SEQUENCE» | !("'" | "\\" | "\r" | "\n"))* "'";
(* Introduced in 0.7.0 *)
DOUBLE_QUOTED_UNICODE_STRING_LITERAL = 'unicode"' («ESCAPE_SEQUENCE» | !('"' | "\\" | "\r" | "\n"))* '"';
«ESCAPE_SEQUENCE» = "\\" («ASCII_ESCAPE» | «HEX_BYTE_ESCAPE» | «UNICODE_ESCAPE»);
(* Deprecated in 0.4.25 *)
«ESCAPE_SEQUENCE_ARBITRARY» = "\\" (!("x" | "u") | «HEX_BYTE_ESCAPE» | «UNICODE_ESCAPE»);
«ASCII_ESCAPE» = "n" | "r" | "t" | "'" | '"' | "\\" | "\r\n" | "\r" | "\n";
«HEX_BYTE_ESCAPE» = "x" «HEX_CHARACTER» «HEX_CHARACTER»;
«UNICODE_ESCAPE» = "u" «HEX_CHARACTER» «HEX_CHARACTER» «HEX_CHARACTER» «HEX_CHARACTER»;