stringLiteral function
Implementation
Parser<Literal> stringLiteral() {
Parser<String> quotedString(String quote) {
final backslash = String.fromCharCode(92);
final bodyCharPattern = '^$quote$backslash';
final escapeSequence = (char('\\') & any())
.map((values) {
final String character = values[1] as String;
switch (character) {
case 'n':
return '\n';
case 'r':
return '\r';
case 't':
return '\t';
case '"':
return '"';
case "'":
return "'";
case '\\':
return '\\';
default:
// Unknown escape sequences keep the backslash and the character.
return '\\$character';
}
})
.labeled("quotedString");
final bodyCharacter = pattern(bodyCharPattern);
final content = (escapeSequence | bodyCharacter).star().map(
(values) => values.join(),
);
return (char(quote) & content & char(quote)).map(
(values) => values[1] as String,
);
}
return (quotedString('"') | quotedString("'"))
.map((value) => Literal(value, LiteralType.string))
.labeled('stringLiteral');
}