Lexes quoted string with escaping characters. If matched, the quoted string will be unescaped and stored to token_state_.str_val.
| 428 | // Lexes quoted string with escaping characters. If matched, the quoted string |
| 429 | // will be unescaped and stored to token_state_.str_val. |
| 430 | TokKind HloLexer::LexString() { |
| 431 | absl::string_view consumable = |
| 432 | StringPieceFromPointers(token_state_.token_start, buf_.end()); |
| 433 | static LazyRE2 escaping_pattern = {R"("([^"\\]|\\.)*")"}; |
| 434 | if (RE2::Consume(&consumable, *escaping_pattern)) { |
| 435 | current_ptr_ = consumable.begin(); |
| 436 | absl::string_view raw = |
| 437 | StringPieceFromPointers(token_state_.token_start + 1, current_ptr_ - 1); |
| 438 | string error; |
| 439 | if (!absl::CUnescape(raw, &token_state_.str_val, &error)) { |
| 440 | LOG(ERROR) << "Failed unescaping string: " << raw << ". error: " << error; |
| 441 | return TokKind::kError; |
| 442 | } |
| 443 | return TokKind::kString; |
| 444 | } |
| 445 | return TokKind::kError; |
| 446 | } |
| 447 | |
| 448 | string TokKindToString(TokKind kind) { |
| 449 | switch (kind) { |