1 // Copyright 2006 The RE2 Authors. All Rights Reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // Regular expression parser. 6 7 // The parser is a simple precedence-based parser with a 8 // manual stack. The parsing work is done by the methods 9 // of the ParseState class. The Regexp::Parse function is 10 // essentially just a lexer that calls the ParseState method 11 // for each token. 12 13 // The parser recognizes POSIX extended regular expressions 14 // excluding backreferences, collating elements, and collating 15 // classes. It also allows the empty string as a regular expression 16 // and recognizes the Perl escape sequences \d, \s, \w, \D, \S, and \W. 17 // See regexp.h for rationale. 18 19 #include "util/util.h" 20 #include "re2/regexp.h" 21 #include "re2/stringpiece.h" 22 #include "re2/unicode_casefold.h" 23 #include "re2/unicode_groups.h" 24 25 namespace re2 { 26 27 // Regular expression parse state. 28 // The list of parsed regexps so far is maintained as a vector of 29 // Regexp pointers called the stack. Left parenthesis and vertical 30 // bar markers are also placed on the stack, as Regexps with 31 // non-standard opcodes. 32 // Scanning a left parenthesis causes the parser to push a left parenthesis 33 // marker on the stack. 34 // Scanning a vertical bar causes the parser to pop the stack until it finds a 35 // vertical bar or left parenthesis marker (not popping the marker), 36 // concatenate all the popped results, and push them back on 37 // the stack (DoConcatenation). 38 // Scanning a right parenthesis causes the parser to act as though it 39 // has seen a vertical bar, which then leaves the top of the stack in the 40 // form LeftParen regexp VerticalBar regexp VerticalBar ... regexp VerticalBar. 41 // The parser pops all this off the stack and creates an alternation of the 42 // regexps (DoAlternation). 43 44 class Regexp::ParseState { 45 public: 46 ParseState(ParseFlags flags, const StringPiece& whole_regexp, 47 RegexpStatus* status); 48 ~ParseState(); 49 50 ParseFlags flags() { return flags_; } 51 int rune_max() { return rune_max_; } 52 53 // Parse methods. All public methods return a bool saying 54 // whether parsing should continue. If a method returns 55 // false, it has set fields in *status_, and the parser 56 // should return NULL. 57 58 // Pushes the given regular expression onto the stack. 59 // Could check for too much memory used here. 60 bool PushRegexp(Regexp* re); 61 62 // Pushes the literal rune r onto the stack. 63 bool PushLiteral(Rune r); 64 65 // Pushes a regexp with the given op (and no args) onto the stack. 66 bool PushSimpleOp(RegexpOp op); 67 68 // Pushes a ^ onto the stack. 69 bool PushCarat(); 70 71 // Pushes a \b (word == true) or \B (word == false) onto the stack. 72 bool PushWordBoundary(bool word); 73 74 // Pushes a $ onto the stack. 75 bool PushDollar(); 76 77 // Pushes a . onto the stack 78 bool PushDot(); 79 80 // Pushes a repeat operator regexp onto the stack. 81 // A valid argument for the operator must already be on the stack. 82 // s is the name of the operator, for use in error messages. 83 bool PushRepeatOp(RegexpOp op, const StringPiece& s, bool nongreedy); 84 85 // Pushes a repetition regexp onto the stack. 86 // A valid argument for the operator must already be on the stack. 87 bool PushRepetition(int min, int max, const StringPiece& s, bool nongreedy); 88 89 // Checks whether a particular regexp op is a marker. 90 bool IsMarker(RegexpOp op); 91 92 // Processes a left parenthesis in the input. 93 // Pushes a marker onto the stack. 94 bool DoLeftParen(const StringPiece& name); 95 bool DoLeftParenNoCapture(); 96 97 // Processes a vertical bar in the input. 98 bool DoVerticalBar(); 99 100 // Processes a right parenthesis in the input. 101 bool DoRightParen(); 102 103 // Processes the end of input, returning the final regexp. 104 Regexp* DoFinish(); 105 106 // Finishes the regexp if necessary, preparing it for use 107 // in a more complicated expression. 108 // If it is a CharClassBuilder, converts into a CharClass. 109 Regexp* FinishRegexp(Regexp*); 110 111 // These routines don't manipulate the parse stack 112 // directly, but they do need to look at flags_. 113 // ParseCharClass also manipulates the internals of Regexp 114 // while creating *out_re. 115 116 // Parse a character class into *out_re. 117 // Removes parsed text from s. 118 bool ParseCharClass(StringPiece* s, Regexp** out_re, 119 RegexpStatus* status); 120 121 // Parse a character class character into *rp. 122 // Removes parsed text from s. 123 bool ParseCCCharacter(StringPiece* s, Rune *rp, 124 const StringPiece& whole_class, 125 RegexpStatus* status); 126 127 // Parse a character class range into rr. 128 // Removes parsed text from s. 129 bool ParseCCRange(StringPiece* s, RuneRange* rr, 130 const StringPiece& whole_class, 131 RegexpStatus* status); 132 133 // Parse a Perl flag set or non-capturing group from s. 134 bool ParsePerlFlags(StringPiece* s); 135 136 137 // Finishes the current concatenation, 138 // collapsing it into a single regexp on the stack. 139 void DoConcatenation(); 140 141 // Finishes the current alternation, 142 // collapsing it to a single regexp on the stack. 143 void DoAlternation(); 144 145 // Generalized DoAlternation/DoConcatenation. 146 void DoCollapse(RegexpOp op); 147 148 // Maybe concatenate Literals into LiteralString. 149 bool MaybeConcatString(int r, ParseFlags flags); 150 151 private: 152 ParseFlags flags_; 153 StringPiece whole_regexp_; 154 RegexpStatus* status_; 155 Regexp* stacktop_; 156 int ncap_; // number of capturing parens seen 157 int rune_max_; // maximum char value for this encoding 158 159 DISALLOW_EVIL_CONSTRUCTORS(ParseState); 160 }; 161 162 // Pseudo-operators - only on parse stack. 163 const RegexpOp kLeftParen = static_cast<RegexpOp>(kMaxRegexpOp+1); 164 const RegexpOp kVerticalBar = static_cast<RegexpOp>(kMaxRegexpOp+2); 165 166 Regexp::ParseState::ParseState(ParseFlags flags, 167 const StringPiece& whole_regexp, 168 RegexpStatus* status) 169 : flags_(flags), whole_regexp_(whole_regexp), 170 status_(status), stacktop_(NULL), ncap_(0) { 171 if (flags_ & Latin1) 172 rune_max_ = 0xFF; 173 else 174 rune_max_ = Runemax; 175 } 176 177 // Cleans up by freeing all the regexps on the stack. 178 Regexp::ParseState::~ParseState() { 179 Regexp* next; 180 for (Regexp* re = stacktop_; re != NULL; re = next) { 181 next = re->down_; 182 re->down_ = NULL; 183 if (re->op() == kLeftParen) 184 delete re->name_; 185 re->Decref(); 186 } 187 } 188 189 // Finishes the regexp if necessary, preparing it for use in 190 // a more complex expression. 191 // If it is a CharClassBuilder, converts into a CharClass. 192 Regexp* Regexp::ParseState::FinishRegexp(Regexp* re) { 193 if (re == NULL) 194 return NULL; 195 re->down_ = NULL; 196 197 if (re->op_ == kRegexpCharClass && re->ccb_ != NULL) { 198 CharClassBuilder* ccb = re->ccb_; 199 re->ccb_ = NULL; 200 re->cc_ = ccb->GetCharClass(); 201 delete ccb; 202 } 203 204 return re; 205 } 206 207 // Pushes the given regular expression onto the stack. 208 // Could check for too much memory used here. 209 bool Regexp::ParseState::PushRegexp(Regexp* re) { 210 MaybeConcatString(-1, NoParseFlags); 211 212 // Special case: a character class of one character is just 213 // a literal. This is a common idiom for escaping 214 // single characters (e.g., [.] instead of \.), and some 215 // analysis does better with fewer character classes. 216 // Similarly, [Aa] can be rewritten as a literal A with ASCII case folding. 217 if (re->op_ == kRegexpCharClass) { 218 if (re->ccb_->size() == 1) { 219 Rune r = re->ccb_->begin()->lo; 220 re->Decref(); 221 re = new Regexp(kRegexpLiteral, flags_); 222 re->rune_ = r; 223 } else if (re->ccb_->size() == 2) { 224 Rune r = re->ccb_->begin()->lo; 225 if ('A' <= r && r <= 'Z' && re->ccb_->Contains(r + 'a' - 'A')) { 226 re->Decref(); 227 re = new Regexp(kRegexpLiteral, flags_ | FoldCase); 228 re->rune_ = r + 'a' - 'A'; 229 } 230 } 231 } 232 233 if (!IsMarker(re->op())) 234 re->simple_ = re->ComputeSimple(); 235 re->down_ = stacktop_; 236 stacktop_ = re; 237 return true; 238 } 239 240 // Searches the case folding tables and returns the CaseFold* that contains r. 241 // If there isn't one, returns the CaseFold* with smallest f->lo bigger than r. 242 // If there isn't one, returns NULL. 243 CaseFold* LookupCaseFold(CaseFold *f, int n, Rune r) { 244 CaseFold* ef = f + n; 245 246 // Binary search for entry containing r. 247 while (n > 0) { 248 int m = n/2; 249 if (f[m].lo <= r && r <= f[m].hi) 250 return &f[m]; 251 if (r < f[m].lo) { 252 n = m; 253 } else { 254 f += m+1; 255 n -= m+1; 256 } 257 } 258 259 // There is no entry that contains r, but f points 260 // where it would have been. Unless f points at 261 // the end of the array, it points at the next entry 262 // after r. 263 if (f < ef) 264 return f; 265 266 // No entry contains r; no entry contains runes > r. 267 return NULL; 268 } 269 270 // Returns the result of applying the fold f to the rune r. 271 Rune ApplyFold(CaseFold *f, Rune r) { 272 switch (f->delta) { 273 default: 274 return r + f->delta; 275 276 case EvenOddSkip: // even <-> odd but only applies to every other 277 if ((r - f->lo) % 2) 278 return r; 279 // fall through 280 case EvenOdd: // even <-> odd 281 if (r%2 == 0) 282 return r + 1; 283 return r - 1; 284 285 case OddEvenSkip: // odd <-> even but only applies to every other 286 if ((r - f->lo) % 2) 287 return r; 288 // fall through 289 case OddEven: // odd <-> even 290 if (r%2 == 1) 291 return r + 1; 292 return r - 1; 293 } 294 } 295 296 // Returns the next Rune in r's folding cycle (see unicode_casefold.h). 297 // Examples: 298 // CycleFoldRune('A') = 'a' 299 // CycleFoldRune('a') = 'A' 300 // 301 // CycleFoldRune('K') = 'k' 302 // CycleFoldRune('k') = 0x212A (Kelvin) 303 // CycleFoldRune(0x212A) = 'K' 304 // 305 // CycleFoldRune('?') = '?' 306 Rune CycleFoldRune(Rune r) { 307 CaseFold* f = LookupCaseFold(unicode_casefold, num_unicode_casefold, r); 308 if (f == NULL || r < f->lo) 309 return r; 310 return ApplyFold(f, r); 311 } 312 313 // Add lo-hi to the class, along with their fold-equivalent characters. 314 // If lo-hi is already in the class, assume that the fold-equivalent 315 // chars are there too, so there's no work to do. 316 static void AddFoldedRange(CharClassBuilder* cc, Rune lo, Rune hi, int depth) { 317 // AddFoldedRange calls itself recursively for each rune in the fold cycle. 318 // Most folding cycles are small: there aren't any bigger than four in the 319 // current Unicode tables. make_unicode_casefold.py checks that 320 // the cycles are not too long, and we double-check here using depth. 321 if (depth > 10) { 322 LOG(DFATAL) << "AddFoldedRange recurses too much."; 323 return; 324 } 325 326 if (!cc->AddRange(lo, hi)) // lo-hi was already there? we're done 327 return; 328 329 while (lo <= hi) { 330 CaseFold* f = LookupCaseFold(unicode_casefold, num_unicode_casefold, lo); 331 if (f == NULL) // lo has no fold, nor does anything above lo 332 break; 333 if (lo < f->lo) { // lo has no fold; next rune with a fold is f->lo 334 lo = f->lo; 335 continue; 336 } 337 338 // Add in the result of folding the range lo - f->hi 339 // and that range's fold, recursively. 340 Rune lo1 = lo; 341 Rune hi1 = min<Rune>(hi, f->hi); 342 switch (f->delta) { 343 default: 344 lo1 += f->delta; 345 hi1 += f->delta; 346 break; 347 case EvenOdd: 348 if (lo1%2 == 1) 349 lo1--; 350 if (hi1%2 == 0) 351 hi1++; 352 break; 353 case OddEven: 354 if (lo1%2 == 0) 355 lo1--; 356 if (hi1%2 == 1) 357 hi1++; 358 break; 359 } 360 AddFoldedRange(cc, lo1, hi1, depth+1); 361 362 // Pick up where this fold left off. 363 lo = f->hi + 1; 364 } 365 } 366 367 // Pushes the literal rune r onto the stack. 368 bool Regexp::ParseState::PushLiteral(Rune r) { 369 // Do case folding if needed. 370 if ((flags_ & FoldCase) && CycleFoldRune(r) != r) { 371 Regexp* re = new Regexp(kRegexpCharClass, flags_ & ~FoldCase); 372 re->ccb_ = new CharClassBuilder; 373 Rune r1 = r; 374 do { 375 if (!(flags_ & NeverNL) || r != '\n') { 376 re->ccb_->AddRange(r, r); 377 } 378 r = CycleFoldRune(r); 379 } while (r != r1); 380 re->ccb_->RemoveAbove(rune_max_); 381 return PushRegexp(re); 382 } 383 384 // Exclude newline if applicable. 385 if ((flags_ & NeverNL) && r == '\n') 386 return PushRegexp(new Regexp(kRegexpNoMatch, flags_)); 387 388 // No fancy stuff worked. Ordinary literal. 389 if (MaybeConcatString(r, flags_)) 390 return true; 391 392 Regexp* re = new Regexp(kRegexpLiteral, flags_); 393 re->rune_ = r; 394 return PushRegexp(re); 395 } 396 397 // Pushes a ^ onto the stack. 398 bool Regexp::ParseState::PushCarat() { 399 if (flags_ & OneLine) { 400 return PushSimpleOp(kRegexpBeginText); 401 } 402 return PushSimpleOp(kRegexpBeginLine); 403 } 404 405 // Pushes a \b or \B onto the stack. 406 bool Regexp::ParseState::PushWordBoundary(bool word) { 407 if (word) 408 return PushSimpleOp(kRegexpWordBoundary); 409 return PushSimpleOp(kRegexpNoWordBoundary); 410 } 411 412 // Pushes a $ onto the stack. 413 bool Regexp::ParseState::PushDollar() { 414 if (flags_ & OneLine) { 415 // Clumsy marker so that MimicsPCRE() can tell whether 416 // this kRegexpEndText was a $ and not a \z. 417 Regexp::ParseFlags oflags = flags_; 418 flags_ = flags_ | WasDollar; 419 bool ret = PushSimpleOp(kRegexpEndText); 420 flags_ = oflags; 421 return ret; 422 } 423 return PushSimpleOp(kRegexpEndLine); 424 } 425 426 // Pushes a . onto the stack. 427 bool Regexp::ParseState::PushDot() { 428 if ((flags_ & DotNL) && !(flags_ & NeverNL)) 429 return PushSimpleOp(kRegexpAnyChar); 430 // Rewrite . into [^\n] 431 Regexp* re = new Regexp(kRegexpCharClass, flags_ & ~FoldCase); 432 re->ccb_ = new CharClassBuilder; 433 re->ccb_->AddRange(0, '\n' - 1); 434 re->ccb_->AddRange('\n' + 1, rune_max_); 435 return PushRegexp(re); 436 } 437 438 // Pushes a regexp with the given op (and no args) onto the stack. 439 bool Regexp::ParseState::PushSimpleOp(RegexpOp op) { 440 Regexp* re = new Regexp(op, flags_); 441 return PushRegexp(re); 442 } 443 444 // Pushes a repeat operator regexp onto the stack. 445 // A valid argument for the operator must already be on the stack. 446 // The char c is the name of the operator, for use in error messages. 447 bool Regexp::ParseState::PushRepeatOp(RegexpOp op, const StringPiece& s, 448 bool nongreedy) { 449 if (stacktop_ == NULL || IsMarker(stacktop_->op())) { 450 status_->set_code(kRegexpRepeatArgument); 451 status_->set_error_arg(s); 452 return false; 453 } 454 Regexp::ParseFlags fl = flags_; 455 if (nongreedy) 456 fl = fl ^ NonGreedy; 457 Regexp* re = new Regexp(op, fl); 458 re->AllocSub(1); 459 re->down_ = stacktop_->down_; 460 re->sub()[0] = FinishRegexp(stacktop_); 461 re->simple_ = re->ComputeSimple(); 462 stacktop_ = re; 463 return true; 464 } 465 466 // Pushes a repetition regexp onto the stack. 467 // A valid argument for the operator must already be on the stack. 468 bool Regexp::ParseState::PushRepetition(int min, int max, 469 const StringPiece& s, 470 bool nongreedy) { 471 if ((max != -1 && max < min) || min > 1000 || max > 1000) { 472 status_->set_code(kRegexpRepeatSize); 473 status_->set_error_arg(s); 474 return false; 475 } 476 if (stacktop_ == NULL || IsMarker(stacktop_->op())) { 477 status_->set_code(kRegexpRepeatArgument); 478 status_->set_error_arg(s); 479 return false; 480 } 481 Regexp::ParseFlags fl = flags_; 482 if (nongreedy) 483 fl = fl ^ NonGreedy; 484 Regexp* re = new Regexp(kRegexpRepeat, fl); 485 re->min_ = min; 486 re->max_ = max; 487 re->AllocSub(1); 488 re->down_ = stacktop_->down_; 489 re->sub()[0] = FinishRegexp(stacktop_); 490 re->simple_ = re->ComputeSimple(); 491 492 stacktop_ = re; 493 return true; 494 } 495 496 // Checks whether a particular regexp op is a marker. 497 bool Regexp::ParseState::IsMarker(RegexpOp op) { 498 return op >= kLeftParen; 499 } 500 501 // Processes a left parenthesis in the input. 502 // Pushes a marker onto the stack. 503 bool Regexp::ParseState::DoLeftParen(const StringPiece& name) { 504 Regexp* re = new Regexp(kLeftParen, flags_); 505 re->cap_ = ++ncap_; 506 if (name.data() != NULL) 507 re->name_ = new string(name.as_string()); 508 return PushRegexp(re); 509 } 510 511 // Pushes a non-capturing marker onto the stack. 512 bool Regexp::ParseState::DoLeftParenNoCapture() { 513 Regexp* re = new Regexp(kLeftParen, flags_); 514 re->cap_ = -1; 515 return PushRegexp(re); 516 } 517 518 // Adds r to cc, along with r's upper case if foldascii is set. 519 static void AddLiteral(CharClassBuilder* cc, Rune r, bool foldascii) { 520 cc->AddRange(r, r); 521 if (foldascii && 'a' <= r && r <= 'z') 522 cc->AddRange(r + 'A' - 'a', r + 'A' - 'a'); 523 } 524 525 // Processes a vertical bar in the input. 526 bool Regexp::ParseState::DoVerticalBar() { 527 MaybeConcatString(-1, NoParseFlags); 528 DoConcatenation(); 529 530 // Below the vertical bar is a list to alternate. 531 // Above the vertical bar is a list to concatenate. 532 // We just did the concatenation, so either swap 533 // the result below the vertical bar or push a new 534 // vertical bar on the stack. 535 Regexp* r1; 536 Regexp* r2; 537 if ((r1 = stacktop_) != NULL && 538 (r2 = stacktop_->down_) != NULL && 539 r2->op() == kVerticalBar) { 540 // If above and below vertical bar are literal or char class, 541 // can merge into a single char class. 542 Regexp* r3; 543 if ((r1->op() == kRegexpLiteral || 544 r1->op() == kRegexpCharClass || 545 r1->op() == kRegexpAnyChar) && 546 (r3 = r2->down_) != NULL) { 547 Rune rune; 548 switch (r3->op()) { 549 case kRegexpLiteral: // convert to char class 550 rune = r3->rune_; 551 r3->op_ = kRegexpCharClass; 552 r3->cc_ = NULL; 553 r3->ccb_ = new CharClassBuilder; 554 AddLiteral(r3->ccb_, rune, r3->parse_flags_ & Regexp::FoldCase); 555 // fall through 556 case kRegexpCharClass: 557 if (r1->op() == kRegexpLiteral) 558 AddLiteral(r3->ccb_, r1->rune_, 559 r1->parse_flags_ & Regexp::FoldCase); 560 else if (r1->op() == kRegexpCharClass) 561 r3->ccb_->AddCharClass(r1->ccb_); 562 if (r1->op() == kRegexpAnyChar || r3->ccb_->full()) { 563 delete r3->ccb_; 564 r3->ccb_ = NULL; 565 r3->op_ = kRegexpAnyChar; 566 } 567 // fall through 568 case kRegexpAnyChar: 569 // pop r1 570 stacktop_ = r2; 571 r1->Decref(); 572 return true; 573 default: 574 break; 575 } 576 } 577 578 // Swap r1 below vertical bar (r2). 579 r1->down_ = r2->down_; 580 r2->down_ = r1; 581 stacktop_ = r2; 582 return true; 583 } 584 return PushSimpleOp(kVerticalBar); 585 } 586 587 // Processes a right parenthesis in the input. 588 bool Regexp::ParseState::DoRightParen() { 589 // Finish the current concatenation and alternation. 590 DoAlternation(); 591 592 // The stack should be: LeftParen regexp 593 // Remove the LeftParen, leaving the regexp, 594 // parenthesized. 595 Regexp* r1; 596 Regexp* r2; 597 if ((r1 = stacktop_) == NULL || 598 (r2 = r1->down_) == NULL || 599 r2->op() != kLeftParen) { 600 status_->set_code(kRegexpMissingParen); 601 status_->set_error_arg(whole_regexp_); 602 return false; 603 } 604 605 // Pop off r1, r2. Will Decref or reuse below. 606 stacktop_ = r2->down_; 607 608 // Restore flags from when paren opened. 609 Regexp* re = r2; 610 flags_ = re->parse_flags(); 611 612 // Rewrite LeftParen as capture if needed. 613 if (re->cap_ > 0) { 614 re->op_ = kRegexpCapture; 615 // re->cap_ is already set 616 re->AllocSub(1); 617 re->sub()[0] = FinishRegexp(r1); 618 re->simple_ = re->ComputeSimple(); 619 } else { 620 re->Decref(); 621 re = r1; 622 } 623 return PushRegexp(re); 624 } 625 626 // Processes the end of input, returning the final regexp. 627 Regexp* Regexp::ParseState::DoFinish() { 628 DoAlternation(); 629 Regexp* re = stacktop_; 630 if (re != NULL && re->down_ != NULL) { 631 status_->set_code(kRegexpMissingParen); 632 status_->set_error_arg(whole_regexp_); 633 return NULL; 634 } 635 stacktop_ = NULL; 636 return FinishRegexp(re); 637 } 638 639 // Returns the leading regexp that re starts with. 640 // The returned Regexp* points into a piece of re, 641 // so it must not be used after the caller calls re->Decref(). 642 Regexp* Regexp::LeadingRegexp(Regexp* re) { 643 if (re->op() == kRegexpEmptyMatch) 644 return NULL; 645 if (re->op() == kRegexpConcat && re->nsub() >= 2) { 646 Regexp** sub = re->sub(); 647 if (sub[0]->op() == kRegexpEmptyMatch) 648 return NULL; 649 return sub[0]; 650 } 651 return re; 652 } 653 654 // Removes LeadingRegexp(re) from re and returns what's left. 655 // Consumes the reference to re and may edit it in place. 656 // If caller wants to hold on to LeadingRegexp(re), 657 // must have already Incref'ed it. 658 Regexp* Regexp::RemoveLeadingRegexp(Regexp* re) { 659 if (re->op() == kRegexpEmptyMatch) 660 return re; 661 if (re->op() == kRegexpConcat && re->nsub() >= 2) { 662 Regexp** sub = re->sub(); 663 if (sub[0]->op() == kRegexpEmptyMatch) 664 return re; 665 sub[0]->Decref(); 666 sub[0] = NULL; 667 if (re->nsub() == 2) { 668 // Collapse concatenation to single regexp. 669 Regexp* nre = sub[1]; 670 sub[1] = NULL; 671 re->Decref(); 672 return nre; 673 } 674 // 3 or more -> 2 or more. 675 re->nsub_--; 676 memmove(sub, sub + 1, re->nsub_ * sizeof sub[0]); 677 return re; 678 } 679 Regexp::ParseFlags pf = re->parse_flags(); 680 re->Decref(); 681 return new Regexp(kRegexpEmptyMatch, pf); 682 } 683 684 // Returns the leading string that re starts with. 685 // The returned Rune* points into a piece of re, 686 // so it must not be used after the caller calls re->Decref(). 687 Rune* Regexp::LeadingString(Regexp* re, int *nrune, 688 Regexp::ParseFlags *flags) { 689 while (re->op() == kRegexpConcat && re->nsub() > 0) 690 re = re->sub()[0]; 691 692 *flags = static_cast<Regexp::ParseFlags>(re->parse_flags_ & Regexp::FoldCase); 693 694 if (re->op() == kRegexpLiteral) { 695 *nrune = 1; 696 return &re->rune_; 697 } 698 699 if (re->op() == kRegexpLiteralString) { 700 *nrune = re->nrunes_; 701 return re->runes_; 702 } 703 704 *nrune = 0; 705 return NULL; 706 } 707 708 // Removes the first n leading runes from the beginning of re. 709 // Edits re in place. 710 void Regexp::RemoveLeadingString(Regexp* re, int n) { 711 // Chase down concats to find first string. 712 // For regexps generated by parser, nested concats are 713 // flattened except when doing so would overflow the 16-bit 714 // limit on the size of a concatenation, so we should never 715 // see more than two here. 716 Regexp* stk[4]; 717 int d = 0; 718 while (re->op() == kRegexpConcat) { 719 if (d < arraysize(stk)) 720 stk[d++] = re; 721 re = re->sub()[0]; 722 } 723 724 // Remove leading string from re. 725 if (re->op() == kRegexpLiteral) { 726 re->rune_ = 0; 727 re->op_ = kRegexpEmptyMatch; 728 } else if (re->op() == kRegexpLiteralString) { 729 if (n >= re->nrunes_) { 730 delete[] re->runes_; 731 re->runes_ = NULL; 732 re->nrunes_ = 0; 733 re->op_ = kRegexpEmptyMatch; 734 } else if (n == re->nrunes_ - 1) { 735 Rune rune = re->runes_[re->nrunes_ - 1]; 736 delete[] re->runes_; 737 re->runes_ = NULL; 738 re->nrunes_ = 0; 739 re->rune_ = rune; 740 re->op_ = kRegexpLiteral; 741 } else { 742 re->nrunes_ -= n; 743 memmove(re->runes_, re->runes_ + n, re->nrunes_ * sizeof re->runes_[0]); 744 } 745 } 746 747 // If re is now empty, concatenations might simplify too. 748 while (d-- > 0) { 749 re = stk[d]; 750 Regexp** sub = re->sub(); 751 if (sub[0]->op() == kRegexpEmptyMatch) { 752 sub[0]->Decref(); 753 sub[0] = NULL; 754 // Delete first element of concat. 755 switch (re->nsub()) { 756 case 0: 757 case 1: 758 // Impossible. 759 LOG(DFATAL) << "Concat of " << re->nsub(); 760 re->submany_ = NULL; 761 re->op_ = kRegexpEmptyMatch; 762 break; 763 764 case 2: { 765 // Replace re with sub[1]. 766 Regexp* old = sub[1]; 767 sub[1] = NULL; 768 re->Swap(old); 769 old->Decref(); 770 break; 771 } 772 773 default: 774 // Slide down. 775 re->nsub_--; 776 memmove(sub, sub + 1, re->nsub_ * sizeof sub[0]); 777 break; 778 } 779 } 780 } 781 } 782 783 // Factors common prefixes from alternation. 784 // For example, 785 // ABC|ABD|AEF|BCX|BCY 786 // simplifies to 787 // A(B(C|D)|EF)|BC(X|Y) 788 // which the normal parse state routines will further simplify to 789 // A(B[CD]|EF)|BC[XY] 790 // 791 // Rewrites sub to contain simplified list to alternate and returns 792 // the new length of sub. Adjusts reference counts accordingly 793 // (incoming sub[i] decremented, outgoing sub[i] incremented). 794 795 // It's too much of a pain to write this code with an explicit stack, 796 // so instead we let the caller specify a maximum depth and 797 // don't simplify beyond that. There are around 15 words of local 798 // variables and parameters in the frame, so allowing 8 levels 799 // on a 64-bit machine is still less than a kilobyte of stack and 800 // probably enough benefit for practical uses. 801 const int kFactorAlternationMaxDepth = 8; 802 803 int Regexp::FactorAlternation( 804 Regexp** sub, int n, 805 Regexp::ParseFlags altflags) { 806 return FactorAlternationRecursive(sub, n, altflags, 807 kFactorAlternationMaxDepth); 808 } 809 810 int Regexp::FactorAlternationRecursive( 811 Regexp** sub, int n, 812 Regexp::ParseFlags altflags, 813 int maxdepth) { 814 815 if (maxdepth <= 0) 816 return n; 817 818 // Round 1: Factor out common literal prefixes. 819 Rune *rune = NULL; 820 int nrune = 0; 821 Regexp::ParseFlags runeflags = Regexp::NoParseFlags; 822 int start = 0; 823 int out = 0; 824 for (int i = 0; i <= n; i++) { 825 // Invariant: what was in sub[0:start] has been Decref'ed 826 // and that space has been reused for sub[0:out] (out <= start). 827 // 828 // Invariant: sub[start:i] consists of regexps that all begin 829 // with the string rune[0:nrune]. 830 831 Rune* rune_i = NULL; 832 int nrune_i = 0; 833 Regexp::ParseFlags runeflags_i = Regexp::NoParseFlags; 834 if (i < n) { 835 rune_i = LeadingString(sub[i], &nrune_i, &runeflags_i); 836 if (runeflags_i == runeflags) { 837 int same = 0; 838 while (same < nrune && same < nrune_i && rune[same] == rune_i[same]) 839 same++; 840 if (same > 0) { 841 // Matches at least one rune in current range. Keep going around. 842 nrune = same; 843 continue; 844 } 845 } 846 } 847 848 // Found end of a run with common leading literal string: 849 // sub[start:i] all begin with rune[0:nrune] but sub[i] 850 // does not even begin with rune[0]. 851 // 852 // Factor out common string and append factored expression to sub[0:out]. 853 if (i == start) { 854 // Nothing to do - first iteration. 855 } else if (i == start+1) { 856 // Just one: don't bother factoring. 857 sub[out++] = sub[start]; 858 } else { 859 // Construct factored form: prefix(suffix1|suffix2|...) 860 Regexp* x[2]; // x[0] = prefix, x[1] = suffix1|suffix2|... 861 x[0] = LiteralString(rune, nrune, runeflags); 862 for (int j = start; j < i; j++) 863 RemoveLeadingString(sub[j], nrune); 864 int nn = FactorAlternationRecursive(sub + start, i - start, altflags, 865 maxdepth - 1); 866 x[1] = AlternateNoFactor(sub + start, nn, altflags); 867 sub[out++] = Concat(x, 2, altflags); 868 } 869 870 // Prepare for next round (if there is one). 871 if (i < n) { 872 start = i; 873 rune = rune_i; 874 nrune = nrune_i; 875 runeflags = runeflags_i; 876 } 877 } 878 n = out; 879 880 // Round 2: Factor out common complex prefixes, 881 // just the first piece of each concatenation, 882 // whatever it is. This is good enough a lot of the time. 883 start = 0; 884 out = 0; 885 Regexp* first = NULL; 886 for (int i = 0; i <= n; i++) { 887 // Invariant: what was in sub[0:start] has been Decref'ed 888 // and that space has been reused for sub[0:out] (out <= start). 889 // 890 // Invariant: sub[start:i] consists of regexps that all begin with first. 891 892 Regexp* first_i = NULL; 893 if (i < n) { 894 first_i = LeadingRegexp(sub[i]); 895 if (first != NULL && Regexp::Equal(first, first_i)) { 896 continue; 897 } 898 } 899 900 // Found end of a run with common leading regexp: 901 // sub[start:i] all begin with first but sub[i] does not. 902 // 903 // Factor out common regexp and append factored expression to sub[0:out]. 904 if (i == start) { 905 // Nothing to do - first iteration. 906 } else if (i == start+1) { 907 // Just one: don't bother factoring. 908 sub[out++] = sub[start]; 909 } else { 910 // Construct factored form: prefix(suffix1|suffix2|...) 911 Regexp* x[2]; // x[0] = prefix, x[1] = suffix1|suffix2|... 912 x[0] = first->Incref(); 913 for (int j = start; j < i; j++) 914 sub[j] = RemoveLeadingRegexp(sub[j]); 915 int nn = FactorAlternationRecursive(sub + start, i - start, altflags, 916 maxdepth - 1); 917 x[1] = AlternateNoFactor(sub + start, nn, altflags); 918 sub[out++] = Concat(x, 2, altflags); 919 } 920 921 // Prepare for next round (if there is one). 922 if (i < n) { 923 start = i; 924 first = first_i; 925 } 926 } 927 n = out; 928 929 // Round 3: Collapse runs of single literals into character classes. 930 start = 0; 931 out = 0; 932 for (int i = 0; i <= n; i++) { 933 // Invariant: what was in sub[0:start] has been Decref'ed 934 // and that space has been reused for sub[0:out] (out <= start). 935 // 936 // Invariant: sub[start:i] consists of regexps that are either 937 // literal runes or character classes. 938 939 if (i < n && 940 (sub[i]->op() == kRegexpLiteral || 941 sub[i]->op() == kRegexpCharClass)) 942 continue; 943 944 // sub[i] is not a char or char class; 945 // emit char class for sub[start:i]... 946 if (i == start) { 947 // Nothing to do. 948 } else if (i == start+1) { 949 sub[out++] = sub[start]; 950 } else { 951 // Make new char class. 952 CharClassBuilder ccb; 953 for (int j = start; j < i; j++) { 954 Regexp* re = sub[j]; 955 if (re->op() == kRegexpCharClass) { 956 CharClass* cc = re->cc(); 957 for (CharClass::iterator it = cc->begin(); it != cc->end(); ++it) 958 ccb.AddRange(it->lo, it->hi); 959 } else if (re->op() == kRegexpLiteral) { 960 ccb.AddRangeFlags(re->rune(), re->rune(), re->parse_flags()); 961 } else { 962 LOG(DFATAL) << "RE2: unexpected op: " << re->op() << " " 963 << re->ToString(); 964 } 965 re->Decref(); 966 } 967 sub[out++] = NewCharClass(ccb.GetCharClass(), altflags); 968 } 969 970 // ... and then emit sub[i]. 971 if (i < n) 972 sub[out++] = sub[i]; 973 start = i+1; 974 } 975 n = out; 976 977 // Round 4: Collapse runs of empty matches into single empty match. 978 start = 0; 979 out = 0; 980 for (int i = 0; i < n; i++) { 981 if (i + 1 < n && 982 sub[i]->op() == kRegexpEmptyMatch && 983 sub[i+1]->op() == kRegexpEmptyMatch) { 984 sub[i]->Decref(); 985 continue; 986 } 987 sub[out++] = sub[i]; 988 } 989 n = out; 990 991 return n; 992 } 993 994 // Collapse the regexps on top of the stack, down to the 995 // first marker, into a new op node (op == kRegexpAlternate 996 // or op == kRegexpConcat). 997 void Regexp::ParseState::DoCollapse(RegexpOp op) { 998 // Scan backward to marker, counting children of composite. 999 int n = 0; 1000 Regexp* next = NULL; 1001 Regexp* sub; 1002 for (sub = stacktop_; sub != NULL && !IsMarker(sub->op()); sub = next) { 1003 next = sub->down_; 1004 if (sub->op_ == op) 1005 n += sub->nsub_; 1006 else 1007 n++; 1008 } 1009 1010 // If there's just one child, leave it alone. 1011 // (Concat of one thing is that one thing; alternate of one thing is same.) 1012 if (stacktop_ != NULL && stacktop_->down_ == next) 1013 return; 1014 1015 // Construct op (alternation or concatenation), flattening op of op. 1016 Regexp** subs = new Regexp*[n]; 1017 next = NULL; 1018 int i = n; 1019 for (sub = stacktop_; sub != NULL && !IsMarker(sub->op()); sub = next) { 1020 next = sub->down_; 1021 if (sub->op_ == op) { 1022 Regexp** sub_subs = sub->sub(); 1023 for (int k = sub->nsub_ - 1; k >= 0; k--) 1024 subs[--i] = sub_subs[k]->Incref(); 1025 sub->Decref(); 1026 } else { 1027 subs[--i] = FinishRegexp(sub); 1028 } 1029 } 1030 1031 Regexp* re = ConcatOrAlternate(op, subs, n, flags_, true); 1032 delete[] subs; 1033 re->simple_ = re->ComputeSimple(); 1034 re->down_ = next; 1035 stacktop_ = re; 1036 } 1037 1038 // Finishes the current concatenation, 1039 // collapsing it into a single regexp on the stack. 1040 void Regexp::ParseState::DoConcatenation() { 1041 Regexp* r1 = stacktop_; 1042 if (r1 == NULL || IsMarker(r1->op())) { 1043 // empty concatenation is special case 1044 Regexp* re = new Regexp(kRegexpEmptyMatch, flags_); 1045 PushRegexp(re); 1046 } 1047 DoCollapse(kRegexpConcat); 1048 } 1049 1050 // Finishes the current alternation, 1051 // collapsing it to a single regexp on the stack. 1052 void Regexp::ParseState::DoAlternation() { 1053 DoVerticalBar(); 1054 // Now stack top is kVerticalBar. 1055 Regexp* r1 = stacktop_; 1056 stacktop_ = r1->down_; 1057 r1->Decref(); 1058 DoCollapse(kRegexpAlternate); 1059 } 1060 1061 // Incremental conversion of concatenated literals into strings. 1062 // If top two elements on stack are both literal or string, 1063 // collapse into single string. 1064 // Don't walk down the stack -- the parser calls this frequently 1065 // enough that below the bottom two is known to be collapsed. 1066 // Only called when another regexp is about to be pushed 1067 // on the stack, so that the topmost literal is not being considered. 1068 // (Otherwise ab* would turn into (ab)*.) 1069 // If r >= 0, consider pushing a literal r on the stack. 1070 // Return whether that happened. 1071 bool Regexp::ParseState::MaybeConcatString(int r, ParseFlags flags) { 1072 Regexp* re1; 1073 Regexp* re2; 1074 if ((re1 = stacktop_) == NULL || (re2 = re1->down_) == NULL) 1075 return false; 1076 1077 if (re1->op_ != kRegexpLiteral && re1->op_ != kRegexpLiteralString) 1078 return false; 1079 if (re2->op_ != kRegexpLiteral && re2->op_ != kRegexpLiteralString) 1080 return false; 1081 if ((re1->parse_flags_ & FoldCase) != (re2->parse_flags_ & FoldCase)) 1082 return false; 1083 1084 if (re2->op_ == kRegexpLiteral) { 1085 // convert into string 1086 Rune rune = re2->rune_; 1087 re2->op_ = kRegexpLiteralString; 1088 re2->nrunes_ = 0; 1089 re2->runes_ = NULL; 1090 re2->AddRuneToString(rune); 1091 } 1092 1093 // push re1 into re2. 1094 if (re1->op_ == kRegexpLiteral) { 1095 re2->AddRuneToString(re1->rune_); 1096 } else { 1097 for (int i = 0; i < re1->nrunes_; i++) 1098 re2->AddRuneToString(re1->runes_[i]); 1099 re1->nrunes_ = 0; 1100 delete[] re1->runes_; 1101 re1->runes_ = NULL; 1102 } 1103 1104 // reuse re1 if possible 1105 if (r >= 0) { 1106 re1->op_ = kRegexpLiteral; 1107 re1->rune_ = r; 1108 re1->parse_flags_ = flags; 1109 return true; 1110 } 1111 1112 stacktop_ = re2; 1113 re1->Decref(); 1114 return false; 1115 } 1116 1117 // Lexing routines. 1118 1119 // Parses a decimal integer, storing it in *n. 1120 // Sets *s to span the remainder of the string. 1121 // Sets *out_re to the regexp for the class. 1122 static bool ParseInteger(StringPiece* s, int* np) { 1123 if (s->size() == 0 || !isdigit((*s)[0] & 0xFF)) 1124 return false; 1125 // Disallow leading zeros. 1126 if (s->size() >= 2 && (*s)[0] == '0' && isdigit((*s)[1] & 0xFF)) 1127 return false; 1128 int n = 0; 1129 int c; 1130 while (s->size() > 0 && isdigit(c = (*s)[0] & 0xFF)) { 1131 // Avoid overflow. 1132 if (n >= 100000000) 1133 return false; 1134 n = n*10 + c - '0'; 1135 s->remove_prefix(1); // digit 1136 } 1137 *np = n; 1138 return true; 1139 } 1140 1141 // Parses a repetition suffix like {1,2} or {2} or {2,}. 1142 // Sets *s to span the remainder of the string on success. 1143 // Sets *lo and *hi to the given range. 1144 // In the case of {2,}, the high number is unbounded; 1145 // sets *hi to -1 to signify this. 1146 // {,2} is NOT a valid suffix. 1147 // The Maybe in the name signifies that the regexp parse 1148 // doesn't fail even if ParseRepetition does, so the StringPiece 1149 // s must NOT be edited unless MaybeParseRepetition returns true. 1150 static bool MaybeParseRepetition(StringPiece* sp, int* lo, int* hi) { 1151 StringPiece s = *sp; 1152 if (s.size() == 0 || s[0] != '{') 1153 return false; 1154 s.remove_prefix(1); // '{' 1155 if (!ParseInteger(&s, lo)) 1156 return false; 1157 if (s.size() == 0) 1158 return false; 1159 if (s[0] == ',') { 1160 s.remove_prefix(1); // ',' 1161 if (s.size() == 0) 1162 return false; 1163 if (s[0] == '}') { 1164 // {2,} means at least 2 1165 *hi = -1; 1166 } else { 1167 // {2,4} means 2, 3, or 4. 1168 if (!ParseInteger(&s, hi)) 1169 return false; 1170 } 1171 } else { 1172 // {2} means exactly two 1173 *hi = *lo; 1174 } 1175 if (s.size() == 0 || s[0] != '}') 1176 return false; 1177 s.remove_prefix(1); // '}' 1178 *sp = s; 1179 return true; 1180 } 1181 1182 // Removes the next Rune from the StringPiece and stores it in *r. 1183 // Returns number of bytes removed from sp. 1184 // Behaves as though there is a terminating NUL at the end of sp. 1185 // Argument order is backwards from usual Google style 1186 // but consistent with chartorune. 1187 static int StringPieceToRune(Rune *r, StringPiece *sp, RegexpStatus* status) { 1188 int n; 1189 if (fullrune(sp->data(), sp->size())) { 1190 n = chartorune(r, sp->data()); 1191 if (!(n == 1 && *r == Runeerror)) { // no decoding error 1192 sp->remove_prefix(n); 1193 return n; 1194 } 1195 } 1196 1197 status->set_code(kRegexpBadUTF8); 1198 status->set_error_arg(NULL); 1199 return -1; 1200 } 1201 1202 // Return whether name is valid UTF-8. 1203 // If not, set status to kRegexpBadUTF8. 1204 static bool IsValidUTF8(const StringPiece& s, RegexpStatus* status) { 1205 StringPiece t = s; 1206 Rune r; 1207 while (t.size() > 0) { 1208 if (StringPieceToRune(&r, &t, status) < 0) 1209 return false; 1210 } 1211 return true; 1212 } 1213 1214 // Is c a hex digit? 1215 static int IsHex(int c) { 1216 return ('0' <= c && c <= '9') || 1217 ('A' <= c && c <= 'F') || 1218 ('a' <= c && c <= 'f'); 1219 } 1220 1221 // Convert hex digit to value. 1222 static int UnHex(int c) { 1223 if ('0' <= c && c <= '9') 1224 return c - '0'; 1225 if ('A' <= c && c <= 'F') 1226 return c - 'A' + 10; 1227 if ('a' <= c && c <= 'f') 1228 return c - 'a' + 10; 1229 LOG(DFATAL) << "Bad hex digit " << c; 1230 return 0; 1231 } 1232 1233 // Parse an escape sequence (e.g., \n, \{). 1234 // Sets *s to span the remainder of the string. 1235 // Sets *rp to the named character. 1236 static bool ParseEscape(StringPiece* s, Rune* rp, 1237 RegexpStatus* status, int rune_max) { 1238 const char* begin = s->begin(); 1239 if (s->size() < 1 || (*s)[0] != '\\') { 1240 // Should not happen - caller always checks. 1241 status->set_code(kRegexpInternalError); 1242 status->set_error_arg(NULL); 1243 return false; 1244 } 1245 if (s->size() < 2) { 1246 status->set_code(kRegexpTrailingBackslash); 1247 status->set_error_arg(NULL); 1248 return false; 1249 } 1250 Rune c, c1; 1251 s->remove_prefix(1); // backslash 1252 if (StringPieceToRune(&c, s, status) < 0) 1253 return false; 1254 int code; 1255 switch (c) { 1256 default: 1257 if (c < Runeself && !isalpha(c) && !isdigit(c)) { 1258 // Escaped non-word characters are always themselves. 1259 // PCRE is not quite so rigorous: it accepts things like 1260 // \q, but we don't. We once rejected \_, but too many 1261 // programs and people insist on using it, so allow \_. 1262 *rp = c; 1263 return true; 1264 } 1265 goto BadEscape; 1266 1267 // Octal escapes. 1268 case '1': 1269 case '2': 1270 case '3': 1271 case '4': 1272 case '5': 1273 case '6': 1274 case '7': 1275 // Single non-zero octal digit is a backreference; not supported. 1276 if (s->size() == 0 || (*s)[0] < '0' || (*s)[0] > '7') 1277 goto BadEscape; 1278 // fall through 1279 case '0': 1280 // consume up to three octal digits; already have one. 1281 code = c - '0'; 1282 if (s->size() > 0 && '0' <= (c = (*s)[0]) && c <= '7') { 1283 code = code * 8 + c - '0'; 1284 s->remove_prefix(1); // digit 1285 if (s->size() > 0) { 1286 c = (*s)[0]; 1287 if ('0' <= c && c <= '7') { 1288 code = code * 8 + c - '0'; 1289 s->remove_prefix(1); // digit 1290 } 1291 } 1292 } 1293 *rp = code; 1294 return true; 1295 1296 // Hexadecimal escapes 1297 case 'x': 1298 if (s->size() == 0) 1299 goto BadEscape; 1300 if (StringPieceToRune(&c, s, status) < 0) 1301 return false; 1302 if (c == '{') { 1303 // Any number of digits in braces. 1304 // Update n as we consume the string, so that 1305 // the whole thing gets shown in the error message. 1306 // Perl accepts any text at all; it ignores all text 1307 // after the first non-hex digit. We require only hex digits, 1308 // and at least one. 1309 if (StringPieceToRune(&c, s, status) < 0) 1310 return false; 1311 int nhex = 0; 1312 code = 0; 1313 while (IsHex(c)) { 1314 nhex++; 1315 code = code * 16 + UnHex(c); 1316 if (code > rune_max) 1317 goto BadEscape; 1318 if (s->size() == 0) 1319 goto BadEscape; 1320 if (StringPieceToRune(&c, s, status) < 0) 1321 return false; 1322 } 1323 if (c != '}' || nhex == 0) 1324 goto BadEscape; 1325 *rp = code; 1326 return true; 1327 } 1328 // Easy case: two hex digits. 1329 if (s->size() == 0) 1330 goto BadEscape; 1331 if (StringPieceToRune(&c1, s, status) < 0) 1332 return false; 1333 if (!IsHex(c) || !IsHex(c1)) 1334 goto BadEscape; 1335 *rp = UnHex(c) * 16 + UnHex(c1); 1336 return true; 1337 1338 // C escapes. 1339 case 'n': 1340 *rp = '\n'; 1341 return true; 1342 case 'r': 1343 *rp = '\r'; 1344 return true; 1345 case 't': 1346 *rp = '\t'; 1347 return true; 1348 1349 // Less common C escapes. 1350 case 'a': 1351 *rp = '\a'; 1352 return true; 1353 case 'f': 1354 *rp = '\f'; 1355 return true; 1356 case 'v': 1357 *rp = '\v'; 1358 return true; 1359 1360 // This code is disabled to avoid misparsing 1361 // the Perl word-boundary \b as a backspace 1362 // when in POSIX regexp mode. Surprisingly, 1363 // in Perl, \b means word-boundary but [\b] 1364 // means backspace. We don't support that: 1365 // if you want a backspace embed a literal 1366 // backspace character or use \x08. 1367 // 1368 // case 'b': 1369 // *rp = '\b'; 1370 // return true; 1371 } 1372 1373 LOG(DFATAL) << "Not reached in ParseEscape."; 1374 1375 BadEscape: 1376 // Unrecognized escape sequence. 1377 status->set_code(kRegexpBadEscape); 1378 status->set_error_arg(StringPiece(begin, s->data() - begin)); 1379 return false; 1380 } 1381 1382 // Add a range to the character class, but exclude newline if asked. 1383 // Also handle case folding. 1384 void CharClassBuilder::AddRangeFlags( 1385 Rune lo, Rune hi, Regexp::ParseFlags parse_flags) { 1386 1387 // Take out \n if the flags say so. 1388 bool cutnl = !(parse_flags & Regexp::ClassNL) || 1389 (parse_flags & Regexp::NeverNL); 1390 if (cutnl && lo <= '\n' && '\n' <= hi) { 1391 if (lo < '\n') 1392 AddRangeFlags(lo, '\n' - 1, parse_flags); 1393 if (hi > '\n') 1394 AddRangeFlags('\n' + 1, hi, parse_flags); 1395 return; 1396 } 1397 1398 // If folding case, add fold-equivalent characters too. 1399 if (parse_flags & Regexp::FoldCase) 1400 AddFoldedRange(this, lo, hi, 0); 1401 else 1402 AddRange(lo, hi); 1403 } 1404 1405 // Look for a group with the given name. 1406 static UGroup* LookupGroup(const StringPiece& name, 1407 UGroup *groups, int ngroups) { 1408 // Simple name lookup. 1409 for (int i = 0; i < ngroups; i++) 1410 if (StringPiece(groups[i].name) == name) 1411 return &groups[i]; 1412 return NULL; 1413 } 1414 1415 // Fake UGroup containing all Runes 1416 static URange16 any16[] = { { 0, 65535 } }; 1417 static URange32 any32[] = { { 65536, Runemax } }; 1418 static UGroup anygroup = { "Any", +1, any16, 1, any32, 1 }; 1419 1420 // Look for a POSIX group with the given name (e.g., "[:^alpha:]") 1421 static UGroup* LookupPosixGroup(const StringPiece& name) { 1422 return LookupGroup(name, posix_groups, num_posix_groups); 1423 } 1424 1425 static UGroup* LookupPerlGroup(const StringPiece& name) { 1426 return LookupGroup(name, perl_groups, num_perl_groups); 1427 } 1428 1429 // Look for a Unicode group with the given name (e.g., "Han") 1430 static UGroup* LookupUnicodeGroup(const StringPiece& name) { 1431 // Special case: "Any" means any. 1432 if (name == StringPiece("Any")) 1433 return &anygroup; 1434 return LookupGroup(name, unicode_groups, num_unicode_groups); 1435 } 1436 1437 // Add a UGroup or its negation to the character class. 1438 static void AddUGroup(CharClassBuilder *cc, UGroup *g, int sign, 1439 Regexp::ParseFlags parse_flags) { 1440 if (sign == +1) { 1441 for (int i = 0; i < g->nr16; i++) { 1442 cc->AddRangeFlags(g->r16[i].lo, g->r16[i].hi, parse_flags); 1443 } 1444 for (int i = 0; i < g->nr32; i++) { 1445 cc->AddRangeFlags(g->r32[i].lo, g->r32[i].hi, parse_flags); 1446 } 1447 } else { 1448 if (parse_flags & Regexp::FoldCase) { 1449 // Normally adding a case-folded group means 1450 // adding all the extra fold-equivalent runes too. 1451 // But if we're adding the negation of the group, 1452 // we have to exclude all the runes that are fold-equivalent 1453 // to what's already missing. Too hard, so do in two steps. 1454 CharClassBuilder ccb1; 1455 AddUGroup(&ccb1, g, +1, parse_flags); 1456 // If the flags say to take out \n, put it in, so that negating will take it out. 1457 // Normally AddRangeFlags does this, but we're bypassing AddRangeFlags. 1458 bool cutnl = !(parse_flags & Regexp::ClassNL) || 1459 (parse_flags & Regexp::NeverNL); 1460 if (cutnl) { 1461 ccb1.AddRange('\n', '\n'); 1462 } 1463 ccb1.Negate(); 1464 cc->AddCharClass(&ccb1); 1465 return; 1466 } 1467 int next = 0; 1468 for (int i = 0; i < g->nr16; i++) { 1469 if (next < g->r16[i].lo) 1470 cc->AddRangeFlags(next, g->r16[i].lo - 1, parse_flags); 1471 next = g->r16[i].hi + 1; 1472 } 1473 for (int i = 0; i < g->nr32; i++) { 1474 if (next < g->r32[i].lo) 1475 cc->AddRangeFlags(next, g->r32[i].lo - 1, parse_flags); 1476 next = g->r32[i].hi + 1; 1477 } 1478 if (next <= Runemax) 1479 cc->AddRangeFlags(next, Runemax, parse_flags); 1480 } 1481 } 1482 1483 // Maybe parse a Perl character class escape sequence. 1484 // Only recognizes the Perl character classes (\d \s \w \D \S \W), 1485 // not the Perl empty-string classes (\b \B \A \Z \z). 1486 // On success, sets *s to span the remainder of the string 1487 // and returns the corresponding UGroup. 1488 // The StringPiece must *NOT* be edited unless the call succeeds. 1489 UGroup* MaybeParsePerlCCEscape(StringPiece* s, Regexp::ParseFlags parse_flags) { 1490 if (!(parse_flags & Regexp::PerlClasses)) 1491 return NULL; 1492 if (s->size() < 2 || (*s)[0] != '\\') 1493 return NULL; 1494 // Could use StringPieceToRune, but there aren't 1495 // any non-ASCII Perl group names. 1496 StringPiece name(s->begin(), 2); 1497 UGroup *g = LookupPerlGroup(name); 1498 if (g == NULL) 1499 return NULL; 1500 s->remove_prefix(name.size()); 1501 return g; 1502 } 1503 1504 enum ParseStatus { 1505 kParseOk, // Did some parsing. 1506 kParseError, // Found an error. 1507 kParseNothing, // Decided not to parse. 1508 }; 1509 1510 // Maybe parses a Unicode character group like \p{Han} or \P{Han} 1511 // (the latter is a negated group). 1512 ParseStatus ParseUnicodeGroup(StringPiece* s, Regexp::ParseFlags parse_flags, 1513 CharClassBuilder *cc, 1514 RegexpStatus* status) { 1515 // Decide whether to parse. 1516 if (!(parse_flags & Regexp::UnicodeGroups)) 1517 return kParseNothing; 1518 if (s->size() < 2 || (*s)[0] != '\\') 1519 return kParseNothing; 1520 Rune c = (*s)[1]; 1521 if (c != 'p' && c != 'P') 1522 return kParseNothing; 1523 1524 // Committed to parse. Results: 1525 int sign = +1; // -1 = negated char class 1526 if (c == 'P') 1527 sign = -1; 1528 StringPiece seq = *s; // \p{Han} or \pL 1529 StringPiece name; // Han or L 1530 s->remove_prefix(2); // '\\', 'p' 1531 1532 if (!StringPieceToRune(&c, s, status)) 1533 return kParseError; 1534 if (c != '{') { 1535 // Name is the bit of string we just skipped over for c. 1536 const char* p = seq.begin() + 2; 1537 name = StringPiece(p, s->begin() - p); 1538 } else { 1539 // Name is in braces. Look for closing } 1540 int end = s->find('}', 0); 1541 if (end == s->npos) { 1542 if (!IsValidUTF8(seq, status)) 1543 return kParseError; 1544 status->set_code(kRegexpBadCharRange); 1545 status->set_error_arg(seq); 1546 return kParseError; 1547 } 1548 name = StringPiece(s->begin(), end); // without '}' 1549 s->remove_prefix(end + 1); // with '}' 1550 if (!IsValidUTF8(name, status)) 1551 return kParseError; 1552 } 1553 1554 // Chop seq where s now begins. 1555 seq = StringPiece(seq.begin(), s->begin() - seq.begin()); 1556 1557 // Look up group 1558 if (name.size() > 0 && name[0] == '^') { 1559 sign = -sign; 1560 name.remove_prefix(1); // '^' 1561 } 1562 UGroup *g = LookupUnicodeGroup(name); 1563 if (g == NULL) { 1564 status->set_code(kRegexpBadCharRange); 1565 status->set_error_arg(seq); 1566 return kParseError; 1567 } 1568 1569 AddUGroup(cc, g, sign, parse_flags); 1570 return kParseOk; 1571 } 1572 1573 // Parses a character class name like [:alnum:]. 1574 // Sets *s to span the remainder of the string. 1575 // Adds the ranges corresponding to the class to ranges. 1576 static ParseStatus ParseCCName(StringPiece* s, Regexp::ParseFlags parse_flags, 1577 CharClassBuilder *cc, 1578 RegexpStatus* status) { 1579 // Check begins with [: 1580 const char* p = s->data(); 1581 const char* ep = s->data() + s->size(); 1582 if (ep - p < 2 || p[0] != '[' || p[1] != ':') 1583 return kParseNothing; 1584 1585 // Look for closing :]. 1586 const char* q; 1587 for (q = p+2; q <= ep-2 && (*q != ':' || *(q+1) != ']'); q++) 1588 ; 1589 1590 // If no closing :], then ignore. 1591 if (q > ep-2) 1592 return kParseNothing; 1593 1594 // Got it. Check that it's valid. 1595 q += 2; 1596 StringPiece name(p, q-p); 1597 1598 UGroup *g = LookupPosixGroup(name); 1599 if (g == NULL) { 1600 status->set_code(kRegexpBadCharRange); 1601 status->set_error_arg(name); 1602 return kParseError; 1603 } 1604 1605 s->remove_prefix(name.size()); 1606 AddUGroup(cc, g, g->sign, parse_flags); 1607 return kParseOk; 1608 } 1609 1610 // Parses a character inside a character class. 1611 // There are fewer special characters here than in the rest of the regexp. 1612 // Sets *s to span the remainder of the string. 1613 // Sets *rp to the character. 1614 bool Regexp::ParseState::ParseCCCharacter(StringPiece* s, Rune *rp, 1615 const StringPiece& whole_class, 1616 RegexpStatus* status) { 1617 if (s->size() == 0) { 1618 status->set_code(kRegexpMissingBracket); 1619 status->set_error_arg(whole_class); 1620 return false; 1621 } 1622 1623 // Allow regular escape sequences even though 1624 // many need not be escaped in this context. 1625 if (s->size() >= 1 && (*s)[0] == '\\') 1626 return ParseEscape(s, rp, status, rune_max_); 1627 1628 // Otherwise take the next rune. 1629 return StringPieceToRune(rp, s, status) >= 0; 1630 } 1631 1632 // Parses a character class character, or, if the character 1633 // is followed by a hyphen, parses a character class range. 1634 // For single characters, rr->lo == rr->hi. 1635 // Sets *s to span the remainder of the string. 1636 // Sets *rp to the character. 1637 bool Regexp::ParseState::ParseCCRange(StringPiece* s, RuneRange* rr, 1638 const StringPiece& whole_class, 1639 RegexpStatus* status) { 1640 StringPiece os = *s; 1641 if (!ParseCCCharacter(s, &rr->lo, whole_class, status)) 1642 return false; 1643 // [a-] means (a|-), so check for final ]. 1644 if (s->size() >= 2 && (*s)[0] == '-' && (*s)[1] != ']') { 1645 s->remove_prefix(1); // '-' 1646 if (!ParseCCCharacter(s, &rr->hi, whole_class, status)) 1647 return false; 1648 if (rr->hi < rr->lo) { 1649 status->set_code(kRegexpBadCharRange); 1650 status->set_error_arg(StringPiece(os.data(), s->data() - os.data())); 1651 return false; 1652 } 1653 } else { 1654 rr->hi = rr->lo; 1655 } 1656 return true; 1657 } 1658 1659 // Parses a possibly-negated character class expression like [^abx-z[:digit:]]. 1660 // Sets *s to span the remainder of the string. 1661 // Sets *out_re to the regexp for the class. 1662 bool Regexp::ParseState::ParseCharClass(StringPiece* s, 1663 Regexp** out_re, 1664 RegexpStatus* status) { 1665 StringPiece whole_class = *s; 1666 if (s->size() == 0 || (*s)[0] != '[') { 1667 // Caller checked this. 1668 status->set_code(kRegexpInternalError); 1669 status->set_error_arg(NULL); 1670 return false; 1671 } 1672 bool negated = false; 1673 Regexp* re = new Regexp(kRegexpCharClass, flags_ & ~FoldCase); 1674 re->ccb_ = new CharClassBuilder; 1675 s->remove_prefix(1); // '[' 1676 if (s->size() > 0 && (*s)[0] == '^') { 1677 s->remove_prefix(1); // '^' 1678 negated = true; 1679 if (!(flags_ & ClassNL) || (flags_ & NeverNL)) { 1680 // If NL can't match implicitly, then pretend 1681 // negated classes include a leading \n. 1682 re->ccb_->AddRange('\n', '\n'); 1683 } 1684 } 1685 bool first = true; // ] is okay as first char in class 1686 while (s->size() > 0 && ((*s)[0] != ']' || first)) { 1687 // - is only okay unescaped as first or last in class. 1688 // Except that Perl allows - anywhere. 1689 if ((*s)[0] == '-' && !first && !(flags_&PerlX) && 1690 (s->size() == 1 || (*s)[1] != ']')) { 1691 StringPiece t = *s; 1692 t.remove_prefix(1); // '-' 1693 Rune r; 1694 int n = StringPieceToRune(&r, &t, status); 1695 if (n < 0) { 1696 re->Decref(); 1697 return false; 1698 } 1699 status->set_code(kRegexpBadCharRange); 1700 status->set_error_arg(StringPiece(s->data(), 1+n)); 1701 re->Decref(); 1702 return false; 1703 } 1704 first = false; 1705 1706 // Look for [:alnum:] etc. 1707 if (s->size() > 2 && (*s)[0] == '[' && (*s)[1] == ':') { 1708 switch (ParseCCName(s, flags_, re->ccb_, status)) { 1709 case kParseOk: 1710 continue; 1711 case kParseError: 1712 re->Decref(); 1713 return false; 1714 case kParseNothing: 1715 break; 1716 } 1717 } 1718 1719 // Look for Unicode character group like \p{Han} 1720 if (s->size() > 2 && 1721 (*s)[0] == '\\' && 1722 ((*s)[1] == 'p' || (*s)[1] == 'P')) { 1723 switch (ParseUnicodeGroup(s, flags_, re->ccb_, status)) { 1724 case kParseOk: 1725 continue; 1726 case kParseError: 1727 re->Decref(); 1728 return false; 1729 case kParseNothing: 1730 break; 1731 } 1732 } 1733 1734 // Look for Perl character class symbols (extension). 1735 UGroup *g = MaybeParsePerlCCEscape(s, flags_); 1736 if (g != NULL) { 1737 AddUGroup(re->ccb_, g, g->sign, flags_); 1738 continue; 1739 } 1740 1741 // Otherwise assume single character or simple range. 1742 RuneRange rr; 1743 if (!ParseCCRange(s, &rr, whole_class, status)) { 1744 re->Decref(); 1745 return false; 1746 } 1747 // AddRangeFlags is usually called in response to a class like 1748 // \p{Foo} or [[:foo:]]; for those, it filters \n out unless 1749 // Regexp::ClassNL is set. In an explicit range or singleton 1750 // like we just parsed, we do not filter \n out, so set ClassNL 1751 // in the flags. 1752 re->ccb_->AddRangeFlags(rr.lo, rr.hi, flags_ | Regexp::ClassNL); 1753 } 1754 if (s->size() == 0) { 1755 status->set_code(kRegexpMissingBracket); 1756 status->set_error_arg(whole_class); 1757 re->Decref(); 1758 return false; 1759 } 1760 s->remove_prefix(1); // ']' 1761 1762 if (negated) 1763 re->ccb_->Negate(); 1764 re->ccb_->RemoveAbove(rune_max_); 1765 1766 *out_re = re; 1767 return true; 1768 } 1769 1770 // Is this a valid capture name? [A-Za-z0-9_]+ 1771 // PCRE limits names to 32 bytes. 1772 // Python rejects names starting with digits. 1773 // We don't enforce either of those. 1774 static bool IsValidCaptureName(const StringPiece& name) { 1775 if (name.size() == 0) 1776 return false; 1777 for (int i = 0; i < name.size(); i++) { 1778 int c = name[i]; 1779 if (('0' <= c && c <= '9') || 1780 ('a' <= c && c <= 'z') || 1781 ('A' <= c && c <= 'Z') || 1782 c == '_') 1783 continue; 1784 return false; 1785 } 1786 return true; 1787 } 1788 1789 // Parses a Perl flag setting or non-capturing group or both, 1790 // like (?i) or (?: or (?i:. Removes from s, updates parse state. 1791 // The caller must check that s begins with "(?". 1792 // Returns true on success. If the Perl flag is not 1793 // well-formed or not supported, sets status_ and returns false. 1794 bool Regexp::ParseState::ParsePerlFlags(StringPiece* s) { 1795 StringPiece t = *s; 1796 1797 // Caller is supposed to check this. 1798 if (!(flags_ & PerlX) || t.size() < 2 || t[0] != '(' || t[1] != '?') { 1799 LOG(DFATAL) << "Bad call to ParseState::ParsePerlFlags"; 1800 status_->set_code(kRegexpInternalError); 1801 return false; 1802 } 1803 1804 t.remove_prefix(2); // "(?" 1805 1806 // Check for named captures, first introduced in Python's regexp library. 1807 // As usual, there are three slightly different syntaxes: 1808 // 1809 // (?P<name>expr) the original, introduced by Python 1810 // (?<name>expr) the .NET alteration, adopted by Perl 5.10 1811 // (?'name'expr) another .NET alteration, adopted by Perl 5.10 1812 // 1813 // Perl 5.10 gave in and implemented the Python version too, 1814 // but they claim that the last two are the preferred forms. 1815 // PCRE and languages based on it (specifically, PHP and Ruby) 1816 // support all three as well. EcmaScript 4 uses only the Python form. 1817 // 1818 // In both the open source world (via Code Search) and the 1819 // Google source tree, (?P<expr>name) is the dominant form, 1820 // so that's the one we implement. One is enough. 1821 if (t.size() > 2 && t[0] == 'P' && t[1] == '<') { 1822 // Pull out name. 1823 int end = t.find('>', 2); 1824 if (end == t.npos) { 1825 if (!IsValidUTF8(*s, status_)) 1826 return false; 1827 status_->set_code(kRegexpBadNamedCapture); 1828 status_->set_error_arg(*s); 1829 return false; 1830 } 1831 1832 // t is "P<name>...", t[end] == '>' 1833 StringPiece capture(t.begin()-2, end+3); // "(?P<name>" 1834 StringPiece name(t.begin()+2, end-2); // "name" 1835 if (!IsValidUTF8(name, status_)) 1836 return false; 1837 if (!IsValidCaptureName(name)) { 1838 status_->set_code(kRegexpBadNamedCapture); 1839 status_->set_error_arg(capture); 1840 return false; 1841 } 1842 1843 if (!DoLeftParen(name)) { 1844 // DoLeftParen's failure set status_. 1845 return false; 1846 } 1847 1848 s->remove_prefix(capture.end() - s->begin()); 1849 return true; 1850 } 1851 1852 bool negated = false; 1853 bool sawflags = false; 1854 int nflags = flags_; 1855 Rune c; 1856 for (bool done = false; !done; ) { 1857 if (t.size() == 0) 1858 goto BadPerlOp; 1859 if (StringPieceToRune(&c, &t, status_) < 0) 1860 return false; 1861 switch (c) { 1862 default: 1863 goto BadPerlOp; 1864 1865 // Parse flags. 1866 case 'i': 1867 sawflags = true; 1868 if (negated) 1869 nflags &= ~FoldCase; 1870 else 1871 nflags |= FoldCase; 1872 break; 1873 1874 case 'm': // opposite of our OneLine 1875 sawflags = true; 1876 if (negated) 1877 nflags |= OneLine; 1878 else 1879 nflags &= ~OneLine; 1880 break; 1881 1882 case 's': 1883 sawflags = true; 1884 if (negated) 1885 nflags &= ~DotNL; 1886 else 1887 nflags |= DotNL; 1888 break; 1889 1890 case 'U': 1891 sawflags = true; 1892 if (negated) 1893 nflags &= ~NonGreedy; 1894 else 1895 nflags |= NonGreedy; 1896 break; 1897 1898 // Negation 1899 case '-': 1900 if (negated) 1901 goto BadPerlOp; 1902 negated = true; 1903 sawflags = false; 1904 break; 1905 1906 // Open new group. 1907 case ':': 1908 if (!DoLeftParenNoCapture()) { 1909 // DoLeftParenNoCapture's failure set status_. 1910 return false; 1911 } 1912 done = true; 1913 break; 1914 1915 // Finish flags. 1916 case ')': 1917 done = true; 1918 break; 1919 } 1920 } 1921 1922 if (negated && !sawflags) 1923 goto BadPerlOp; 1924 1925 flags_ = static_cast<Regexp::ParseFlags>(nflags); 1926 *s = t; 1927 return true; 1928 1929 BadPerlOp: 1930 status_->set_code(kRegexpBadPerlOp); 1931 status_->set_error_arg(StringPiece(s->begin(), t.begin() - s->begin())); 1932 return false; 1933 } 1934 1935 // Converts latin1 (assumed to be encoded as Latin1 bytes) 1936 // into UTF8 encoding in string. 1937 // Can't use EncodingUtils::EncodeLatin1AsUTF8 because it is 1938 // deprecated and because it rejects code points 0x80-0x9F. 1939 void ConvertLatin1ToUTF8(const StringPiece& latin1, string* utf) { 1940 char buf[UTFmax]; 1941 1942 utf->clear(); 1943 for (int i = 0; i < latin1.size(); i++) { 1944 Rune r = latin1[i] & 0xFF; 1945 int n = runetochar(buf, &r); 1946 utf->append(buf, n); 1947 } 1948 } 1949 1950 // Parses the regular expression given by s, 1951 // returning the corresponding Regexp tree. 1952 // The caller must Decref the return value when done with it. 1953 // Returns NULL on error. 1954 Regexp* Regexp::Parse(const StringPiece& s, ParseFlags global_flags, 1955 RegexpStatus* status) { 1956 // Make status non-NULL (easier on everyone else). 1957 RegexpStatus xstatus; 1958 if (status == NULL) 1959 status = &xstatus; 1960 1961 ParseState ps(global_flags, s, status); 1962 StringPiece t = s; 1963 1964 // Convert regexp to UTF-8 (easier on the rest of the parser). 1965 if (global_flags & Latin1) { 1966 string* tmp = new string; 1967 ConvertLatin1ToUTF8(t, tmp); 1968 status->set_tmp(tmp); 1969 t = *tmp; 1970 } 1971 1972 if (global_flags & Literal) { 1973 // Special parse loop for literal string. 1974 while (t.size() > 0) { 1975 Rune r; 1976 if (StringPieceToRune(&r, &t, status) < 0) 1977 return NULL; 1978 if (!ps.PushLiteral(r)) 1979 return NULL; 1980 } 1981 return ps.DoFinish(); 1982 } 1983 1984 StringPiece lastunary = NULL; 1985 while (t.size() > 0) { 1986 StringPiece isunary = NULL; 1987 switch (t[0]) { 1988 default: { 1989 Rune r; 1990 if (StringPieceToRune(&r, &t, status) < 0) 1991 return NULL; 1992 if (!ps.PushLiteral(r)) 1993 return NULL; 1994 break; 1995 } 1996 1997 case '(': 1998 // "(?" introduces Perl escape. 1999 if ((ps.flags() & PerlX) && (t.size() >= 2 && t[1] == '?')) { 2000 // Flag changes and non-capturing groups. 2001 if (!ps.ParsePerlFlags(&t)) 2002 return NULL; 2003 break; 2004 } 2005 if (ps.flags() & NeverCapture) { 2006 if (!ps.DoLeftParenNoCapture()) 2007 return NULL; 2008 } else { 2009 if (!ps.DoLeftParen(NULL)) 2010 return NULL; 2011 } 2012 t.remove_prefix(1); // '(' 2013 break; 2014 2015 case '|': 2016 if (!ps.DoVerticalBar()) 2017 return NULL; 2018 t.remove_prefix(1); // '|' 2019 break; 2020 2021 case ')': 2022 if (!ps.DoRightParen()) 2023 return NULL; 2024 t.remove_prefix(1); // ')' 2025 break; 2026 2027 case '^': // Beginning of line. 2028 if (!ps.PushCarat()) 2029 return NULL; 2030 t.remove_prefix(1); // '^' 2031 break; 2032 2033 case '$': // End of line. 2034 if (!ps.PushDollar()) 2035 return NULL; 2036 t.remove_prefix(1); // '$' 2037 break; 2038 2039 case '.': // Any character (possibly except newline). 2040 if (!ps.PushDot()) 2041 return NULL; 2042 t.remove_prefix(1); // '.' 2043 break; 2044 2045 case '[': { // Character class. 2046 Regexp* re; 2047 if (!ps.ParseCharClass(&t, &re, status)) 2048 return NULL; 2049 if (!ps.PushRegexp(re)) 2050 return NULL; 2051 break; 2052 } 2053 2054 case '*': { // Zero or more. 2055 RegexpOp op; 2056 op = kRegexpStar; 2057 goto Rep; 2058 case '+': // One or more. 2059 op = kRegexpPlus; 2060 goto Rep; 2061 case '?': // Zero or one. 2062 op = kRegexpQuest; 2063 goto Rep; 2064 Rep: 2065 StringPiece opstr = t; 2066 bool nongreedy = false; 2067 t.remove_prefix(1); // '*' or '+' or '?' 2068 if (ps.flags() & PerlX) { 2069 if (t.size() > 0 && t[0] == '?') { 2070 nongreedy = true; 2071 t.remove_prefix(1); // '?' 2072 } 2073 if (lastunary.size() > 0) { 2074 // In Perl it is not allowed to stack repetition operators: 2075 // a** is a syntax error, not a double-star. 2076 // (and a++ means something else entirely, which we don't support!) 2077 status->set_code(kRegexpRepeatOp); 2078 status->set_error_arg(StringPiece(lastunary.begin(), 2079 t.begin() - lastunary.begin())); 2080 return NULL; 2081 } 2082 } 2083 opstr.set(opstr.data(), t.data() - opstr.data()); 2084 if (!ps.PushRepeatOp(op, opstr, nongreedy)) 2085 return NULL; 2086 isunary = opstr; 2087 break; 2088 } 2089 2090 case '{': { // Counted repetition. 2091 int lo, hi; 2092 StringPiece opstr = t; 2093 if (!MaybeParseRepetition(&t, &lo, &hi)) { 2094 // Treat like a literal. 2095 if (!ps.PushLiteral('{')) 2096 return NULL; 2097 t.remove_prefix(1); // '{' 2098 break; 2099 } 2100 bool nongreedy = false; 2101 if (ps.flags() & PerlX) { 2102 if (t.size() > 0 && t[0] == '?') { 2103 nongreedy = true; 2104 t.remove_prefix(1); // '?' 2105 } 2106 if (lastunary.size() > 0) { 2107 // Not allowed to stack repetition operators. 2108 status->set_code(kRegexpRepeatOp); 2109 status->set_error_arg(StringPiece(lastunary.begin(), 2110 t.begin() - lastunary.begin())); 2111 return NULL; 2112 } 2113 } 2114 opstr.set(opstr.data(), t.data() - opstr.data()); 2115 if (!ps.PushRepetition(lo, hi, opstr, nongreedy)) 2116 return NULL; 2117 isunary = opstr; 2118 break; 2119 } 2120 2121 case '\\': { // Escaped character or Perl sequence. 2122 // \b and \B: word boundary or not 2123 if ((ps.flags() & Regexp::PerlB) && 2124 t.size() >= 2 && (t[1] == 'b' || t[1] == 'B')) { 2125 if (!ps.PushWordBoundary(t[1] == 'b')) 2126 return NULL; 2127 t.remove_prefix(2); // '\\', 'b' 2128 break; 2129 } 2130 2131 if ((ps.flags() & Regexp::PerlX) && t.size() >= 2) { 2132 if (t[1] == 'A') { 2133 if (!ps.PushSimpleOp(kRegexpBeginText)) 2134 return NULL; 2135 t.remove_prefix(2); // '\\', 'A' 2136 break; 2137 } 2138 if (t[1] == 'z') { 2139 if (!ps.PushSimpleOp(kRegexpEndText)) 2140 return NULL; 2141 t.remove_prefix(2); // '\\', 'z' 2142 break; 2143 } 2144 // Do not recognize \Z, because this library can't 2145 // implement the exact Perl/PCRE semantics. 2146 // (This library treats "(?-m)$" as \z, even though 2147 // in Perl and PCRE it is equivalent to \Z.) 2148 2149 if (t[1] == 'C') { // \C: any byte [sic] 2150 if (!ps.PushSimpleOp(kRegexpAnyByte)) 2151 return NULL; 2152 t.remove_prefix(2); // '\\', 'C' 2153 break; 2154 } 2155 2156 if (t[1] == 'Q') { // \Q ... \E: the ... is always literals 2157 t.remove_prefix(2); // '\\', 'Q' 2158 while (t.size() > 0) { 2159 if (t.size() >= 2 && t[0] == '\\' && t[1] == 'E') { 2160 t.remove_prefix(2); // '\\', 'E' 2161 break; 2162 } 2163 Rune r; 2164 if (StringPieceToRune(&r, &t, status) < 0) 2165 return NULL; 2166 if (!ps.PushLiteral(r)) 2167 return NULL; 2168 } 2169 break; 2170 } 2171 } 2172 2173 if (t.size() >= 2 && (t[1] == 'p' || t[1] == 'P')) { 2174 Regexp* re = new Regexp(kRegexpCharClass, ps.flags() & ~FoldCase); 2175 re->ccb_ = new CharClassBuilder; 2176 switch (ParseUnicodeGroup(&t, ps.flags(), re->ccb_, status)) { 2177 case kParseOk: 2178 if (!ps.PushRegexp(re)) 2179 return NULL; 2180 goto Break2; 2181 case kParseError: 2182 re->Decref(); 2183 return NULL; 2184 case kParseNothing: 2185 re->Decref(); 2186 break; 2187 } 2188 } 2189 2190 UGroup *g = MaybeParsePerlCCEscape(&t, ps.flags()); 2191 if (g != NULL) { 2192 Regexp* re = new Regexp(kRegexpCharClass, ps.flags() & ~FoldCase); 2193 re->ccb_ = new CharClassBuilder; 2194 AddUGroup(re->ccb_, g, g->sign, ps.flags()); 2195 if (!ps.PushRegexp(re)) 2196 return NULL; 2197 break; 2198 } 2199 2200 Rune r; 2201 if (!ParseEscape(&t, &r, status, ps.rune_max())) 2202 return NULL; 2203 if (!ps.PushLiteral(r)) 2204 return NULL; 2205 break; 2206 } 2207 } 2208 Break2: 2209 lastunary = isunary; 2210 } 2211 return ps.DoFinish(); 2212 } 2213 2214 } // namespace re2 2215