simpleStringLiteral method

Parser<StringLiteralNode> simpleStringLiteral()
inherited

Implementation

Parser<StringLiteralNode> simpleStringLiteral() =>
    ref1(
      token,
      [
        // Multi-line
        string('"""') &
            (string(r'\"') |
                    string(r'\\') |
                    string(r'\$') |
                    pattern('^"\$').plus() |
                    string('"""').neg())
                .star() &
            string('"""'),
        string("'''") &
            (string(r"\'") |
                    string(r'\\') |
                    string(r'\$') |
                    pattern("^'\$").plus() |
                    string("'''").neg())
                .star() &
            string("'''"),
        // Single-line
        char('"') &
            (string(r'\"') |
                    string(r'\\') |
                    string(r'\$') |
                    pattern('^"\$\r\n'))
                .star() &
            char('"'),
        char("'") &
            (string(r"\'") |
                    string(r'\\') |
                    string(r'\$') |
                    pattern("^'\$\r\n"))
                .star() &
            char("'"),
      ].toChoiceParser().flatten(),
    ).map((token) {
      final val = token.value;
      if (val.startsWith('"""') || val.startsWith("'''")) {
        return StringLiteralNode(val.substring(3, val.length - 3));
      }
      return StringLiteralNode(val.substring(1, val.length - 1));
    });