Skip to content

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»;