Strings are enclosed in double quotes \rm \LQT ... \RQT. Within a string, a sequence '\c' denotes the two characters '\' and 'c', with the exception of the following:
\t tab \n newline
The two-character sequences \rm \backslash n and \rm \backslash t are called \it escape\ sequences. Other escape sequences like \rm \backslash r (carriage return) are not part of Cool. These two special escape sequences should not be interpreted or transformed by the lexer; they are handled by the \rm IO module and the run-time system.
A newline character may not appear in a string:
"This is not OK"
A string may contain embedded double quotes, so long as they are escaped. The following is a valid Cool string:
"David St. Hubbins said, \"It's such a fine line between stupid, and clever.\""
Note that Cool's interpretation of \rm \backslash " may not be what you are expecting. The two-character sequence \rm \backslash " (which is not an escape sequence) does not become \rm " in any sense. Instead, it stays \rm \backslash ". This is different from most other languages, but simplifies lexing and interpreting. Example:
class Main inherits IO { main() : Object { out_string("She said, \"Hello.\"\n") } ; } ;
A string may not contain EOF; strings cannot cross file boundaries. A string may not contain NUL, the character with ASCII value 0. The lexer must reject source text that contains malformed strings.
A string may contain the two-character sequence \rm \backslash 0 (backslash zero). However, that sequence does not have any special meaning -- it just yields a backslash followed by a zero inside the string.
The single character with converted integer value zero (the NUL) is not allowed. Any other character may be included in a string.