RequirementLexer.cpp
1 /* $ANTLR 2.7.7 (20121221): "requirements.grammar" -> "RequirementLexer.cpp"$ */ 2 #include "RequirementLexer.hpp" 3 #include <antlr/CharBuffer.hpp> 4 #include <antlr/TokenStreamException.hpp> 5 #include <antlr/TokenStreamIOException.hpp> 6 #include <antlr/TokenStreamRecognitionException.hpp> 7 #include <antlr/CharStreamException.hpp> 8 #include <antlr/CharStreamIOException.hpp> 9 #include <antlr/NoViableAltForCharException.hpp> 10 11 12 #include "requirement.h" 13 #include "reqmaker.h" 14 #include "csutilities.h" 15 #include <libDER/libDER.h> 16 #include <libDER/asn1Types.h> 17 #include <security_utilities/cfutilities.h> 18 #include <security_utilities/hashing.h> 19 #include <security_cdsa_utilities/cssmdata.h> // OID coding 20 #include <Security/SecCertificate.h> 21 using namespace CodeSigning; 22 typedef Requirement::Maker Maker; 23 24 extern "C" { 25 26 /* Decode a choice of UTCTime or GeneralizedTime to a CFAbsoluteTime. Return 27 an absoluteTime if the date was valid and properly decoded. Return 28 NULL_TIME otherwise. */ 29 CFAbsoluteTime SecAbsoluteTimeFromDateContent(DERTag tag, const uint8_t *bytes, 30 size_t length); 31 32 } 33 34 35 ANTLR_BEGIN_NAMESPACE(Security_CodeSigning) 36 RequirementLexer::RequirementLexer(std::istream& in) 37 : antlr::CharScanner(new antlr::CharBuffer(in),true) 38 { 39 initLiterals(); 40 } 41 42 RequirementLexer::RequirementLexer(antlr::InputBuffer& ib) 43 : antlr::CharScanner(ib,true) 44 { 45 initLiterals(); 46 } 47 48 RequirementLexer::RequirementLexer(const antlr::LexerSharedInputState& state) 49 : antlr::CharScanner(state,true) 50 { 51 initLiterals(); 52 } 53 54 void RequirementLexer::initLiterals() 55 { 56 literals["certificate"] = 27; 57 literals["always"] = 15; 58 literals["host"] = 6; 59 literals["guest"] = 5; 60 literals["cdhash"] = 20; 61 literals["entitlement"] = 31; 62 literals["library"] = 8; 63 literals["timestamp"] = 53; 64 literals["legacy"] = 23; 65 literals["never"] = 17; 66 literals["cert"] = 28; 67 literals["plugin"] = 9; 68 literals["absent"] = 33; 69 literals["or"] = 10; 70 literals["leaf"] = 45; 71 literals["info"] = 30; 72 literals["designated"] = 7; 73 literals["apple"] = 25; 74 literals["trusted"] = 29; 75 literals["true"] = 16; 76 literals["notarized"] = 22; 77 literals["and"] = 11; 78 literals["root"] = 46; 79 literals["platform"] = 21; 80 literals["anchor"] = 24; 81 literals["false"] = 18; 82 literals["generic"] = 26; 83 literals["identifier"] = 19; 84 literals["exists"] = 32; 85 } 86 87 antlr::RefToken RequirementLexer::nextToken() 88 { 89 antlr::RefToken theRetToken; 90 for (;;) { 91 antlr::RefToken theRetToken; 92 int _ttype = antlr::Token::INVALID_TYPE; 93 resetText(); 94 try { // for lexical and char stream error handling 95 switch ( LA(1)) { 96 case 0x22 /* '\"' */ : 97 { 98 mSTRING(true); 99 theRetToken=_returnToken; 100 break; 101 } 102 case 0x3b /* ';' */ : 103 { 104 mSEMI(true); 105 theRetToken=_returnToken; 106 break; 107 } 108 case 0x28 /* '(' */ : 109 { 110 mLPAREN(true); 111 theRetToken=_returnToken; 112 break; 113 } 114 case 0x29 /* ')' */ : 115 { 116 mRPAREN(true); 117 theRetToken=_returnToken; 118 break; 119 } 120 case 0x5b /* '[' */ : 121 { 122 mLBRACK(true); 123 theRetToken=_returnToken; 124 break; 125 } 126 case 0x5d /* ']' */ : 127 { 128 mRBRACK(true); 129 theRetToken=_returnToken; 130 break; 131 } 132 case 0x2c /* ',' */ : 133 { 134 mCOMMA(true); 135 theRetToken=_returnToken; 136 break; 137 } 138 case 0x7e /* '~' */ : 139 { 140 mSUBS(true); 141 theRetToken=_returnToken; 142 break; 143 } 144 case 0x2d /* '-' */ : 145 { 146 mNEG(true); 147 theRetToken=_returnToken; 148 break; 149 } 150 case 0x21 /* '!' */ : 151 { 152 mNOT(true); 153 theRetToken=_returnToken; 154 break; 155 } 156 case 0x2a /* '*' */ : 157 { 158 mSTAR(true); 159 theRetToken=_returnToken; 160 break; 161 } 162 case 0x9 /* '\t' */ : 163 case 0xa /* '\n' */ : 164 case 0x20 /* ' ' */ : 165 { 166 mWS(true); 167 theRetToken=_returnToken; 168 break; 169 } 170 case 0x23 /* '#' */ : 171 { 172 mSHELLCOMMENT(true); 173 theRetToken=_returnToken; 174 break; 175 } 176 default: 177 if ((LA(1) == 0x2f /* '/' */ ) && (_tokenSet_0.member(LA(2)))) { 178 mPATHNAME(true); 179 theRetToken=_returnToken; 180 } 181 else if ((LA(1) == 0x48 /* 'H' */ ) && (LA(2) == 0x22 /* '\"' */ )) { 182 mHASHCONSTANT(true); 183 theRetToken=_returnToken; 184 } 185 else if ((LA(1) == 0x30 /* '0' */ ) && (LA(2) == 0x78 /* 'x' */ )) { 186 mHEXCONSTANT(true); 187 theRetToken=_returnToken; 188 } 189 else if ((LA(1) == 0x3d /* '=' */ ) && (LA(2) == 0x3e /* '>' */ )) { 190 mARROW(true); 191 theRetToken=_returnToken; 192 } 193 else if ((LA(1) == 0x3c /* '<' */ ) && (LA(2) == 0x3d /* '=' */ )) { 194 mLE(true); 195 theRetToken=_returnToken; 196 } 197 else if ((LA(1) == 0x3e /* '>' */ ) && (LA(2) == 0x3d /* '=' */ )) { 198 mGE(true); 199 theRetToken=_returnToken; 200 } 201 else if ((LA(1) == 0x3d /* '=' */ ) && (LA(2) == 0x3d /* '=' */ )) { 202 mEQQL(true); 203 theRetToken=_returnToken; 204 } 205 else if ((LA(1) == 0x2f /* '/' */ ) && (LA(2) == 0x2a /* '*' */ )) { 206 mC_COMMENT(true); 207 theRetToken=_returnToken; 208 } 209 else if ((LA(1) == 0x2f /* '/' */ ) && (LA(2) == 0x2f /* '/' */ )) { 210 mCPP_COMMENT(true); 211 theRetToken=_returnToken; 212 } 213 else if ((_tokenSet_0.member(LA(1))) && (true)) { 214 mDOTKEY(true); 215 theRetToken=_returnToken; 216 } 217 else if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ )) && (true)) { 218 mINTEGER(true); 219 theRetToken=_returnToken; 220 } 221 else if ((LA(1) == 0x3c /* '<' */ ) && (true)) { 222 mLESS(true); 223 theRetToken=_returnToken; 224 } 225 else if ((LA(1) == 0x3e /* '>' */ ) && (true)) { 226 mGT(true); 227 theRetToken=_returnToken; 228 } 229 else if ((LA(1) == 0x3d /* '=' */ ) && (true)) { 230 mEQL(true); 231 theRetToken=_returnToken; 232 } 233 else { 234 if (LA(1)==EOF_CHAR) 235 { 236 uponEOF(); 237 _returnToken = makeToken(antlr::Token::EOF_TYPE); 238 } 239 else {throw antlr::NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());} 240 } 241 } 242 if ( !_returnToken ) 243 goto tryAgain; // found SKIP token 244 245 _ttype = _returnToken->getType(); 246 _returnToken->setType(_ttype); 247 return _returnToken; 248 } 249 catch (antlr::RecognitionException& e) { 250 throw antlr::TokenStreamRecognitionException(e); 251 } 252 catch (antlr::CharStreamIOException& csie) { 253 throw antlr::TokenStreamIOException(csie.io); 254 } 255 catch (antlr::CharStreamException& cse) { 256 throw antlr::TokenStreamException(cse.getMessage()); 257 } 258 tryAgain:; 259 } 260 } 261 262 void RequirementLexer::mIDENT(bool _createToken) { 263 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 264 _ttype = IDENT; 265 std::string::size_type _saveIndex; 266 267 { 268 switch ( LA(1)) { 269 case 0x41 /* 'A' */ : 270 case 0x42 /* 'B' */ : 271 case 0x43 /* 'C' */ : 272 case 0x44 /* 'D' */ : 273 case 0x45 /* 'E' */ : 274 case 0x46 /* 'F' */ : 275 case 0x47 /* 'G' */ : 276 case 0x48 /* 'H' */ : 277 case 0x49 /* 'I' */ : 278 case 0x4a /* 'J' */ : 279 case 0x4b /* 'K' */ : 280 case 0x4c /* 'L' */ : 281 case 0x4d /* 'M' */ : 282 case 0x4e /* 'N' */ : 283 case 0x4f /* 'O' */ : 284 case 0x50 /* 'P' */ : 285 case 0x51 /* 'Q' */ : 286 case 0x52 /* 'R' */ : 287 case 0x53 /* 'S' */ : 288 case 0x54 /* 'T' */ : 289 case 0x55 /* 'U' */ : 290 case 0x56 /* 'V' */ : 291 case 0x57 /* 'W' */ : 292 case 0x58 /* 'X' */ : 293 case 0x59 /* 'Y' */ : 294 case 0x5a /* 'Z' */ : 295 { 296 matchRange('A','Z'); 297 break; 298 } 299 case 0x61 /* 'a' */ : 300 case 0x62 /* 'b' */ : 301 case 0x63 /* 'c' */ : 302 case 0x64 /* 'd' */ : 303 case 0x65 /* 'e' */ : 304 case 0x66 /* 'f' */ : 305 case 0x67 /* 'g' */ : 306 case 0x68 /* 'h' */ : 307 case 0x69 /* 'i' */ : 308 case 0x6a /* 'j' */ : 309 case 0x6b /* 'k' */ : 310 case 0x6c /* 'l' */ : 311 case 0x6d /* 'm' */ : 312 case 0x6e /* 'n' */ : 313 case 0x6f /* 'o' */ : 314 case 0x70 /* 'p' */ : 315 case 0x71 /* 'q' */ : 316 case 0x72 /* 'r' */ : 317 case 0x73 /* 's' */ : 318 case 0x74 /* 't' */ : 319 case 0x75 /* 'u' */ : 320 case 0x76 /* 'v' */ : 321 case 0x77 /* 'w' */ : 322 case 0x78 /* 'x' */ : 323 case 0x79 /* 'y' */ : 324 case 0x7a /* 'z' */ : 325 { 326 matchRange('a','z'); 327 break; 328 } 329 default: 330 { 331 throw antlr::NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn()); 332 } 333 } 334 } 335 { // ( ... )* 336 for (;;) { 337 switch ( LA(1)) { 338 case 0x41 /* 'A' */ : 339 case 0x42 /* 'B' */ : 340 case 0x43 /* 'C' */ : 341 case 0x44 /* 'D' */ : 342 case 0x45 /* 'E' */ : 343 case 0x46 /* 'F' */ : 344 case 0x47 /* 'G' */ : 345 case 0x48 /* 'H' */ : 346 case 0x49 /* 'I' */ : 347 case 0x4a /* 'J' */ : 348 case 0x4b /* 'K' */ : 349 case 0x4c /* 'L' */ : 350 case 0x4d /* 'M' */ : 351 case 0x4e /* 'N' */ : 352 case 0x4f /* 'O' */ : 353 case 0x50 /* 'P' */ : 354 case 0x51 /* 'Q' */ : 355 case 0x52 /* 'R' */ : 356 case 0x53 /* 'S' */ : 357 case 0x54 /* 'T' */ : 358 case 0x55 /* 'U' */ : 359 case 0x56 /* 'V' */ : 360 case 0x57 /* 'W' */ : 361 case 0x58 /* 'X' */ : 362 case 0x59 /* 'Y' */ : 363 case 0x5a /* 'Z' */ : 364 { 365 matchRange('A','Z'); 366 break; 367 } 368 case 0x61 /* 'a' */ : 369 case 0x62 /* 'b' */ : 370 case 0x63 /* 'c' */ : 371 case 0x64 /* 'd' */ : 372 case 0x65 /* 'e' */ : 373 case 0x66 /* 'f' */ : 374 case 0x67 /* 'g' */ : 375 case 0x68 /* 'h' */ : 376 case 0x69 /* 'i' */ : 377 case 0x6a /* 'j' */ : 378 case 0x6b /* 'k' */ : 379 case 0x6c /* 'l' */ : 380 case 0x6d /* 'm' */ : 381 case 0x6e /* 'n' */ : 382 case 0x6f /* 'o' */ : 383 case 0x70 /* 'p' */ : 384 case 0x71 /* 'q' */ : 385 case 0x72 /* 'r' */ : 386 case 0x73 /* 's' */ : 387 case 0x74 /* 't' */ : 388 case 0x75 /* 'u' */ : 389 case 0x76 /* 'v' */ : 390 case 0x77 /* 'w' */ : 391 case 0x78 /* 'x' */ : 392 case 0x79 /* 'y' */ : 393 case 0x7a /* 'z' */ : 394 { 395 matchRange('a','z'); 396 break; 397 } 398 case 0x30 /* '0' */ : 399 case 0x31 /* '1' */ : 400 case 0x32 /* '2' */ : 401 case 0x33 /* '3' */ : 402 case 0x34 /* '4' */ : 403 case 0x35 /* '5' */ : 404 case 0x36 /* '6' */ : 405 case 0x37 /* '7' */ : 406 case 0x38 /* '8' */ : 407 case 0x39 /* '9' */ : 408 { 409 matchRange('0','9'); 410 break; 411 } 412 default: 413 { 414 goto _loop49; 415 } 416 } 417 } 418 _loop49:; 419 } // ( ... )* 420 _ttype = testLiteralsTable(text.substr(_begin, text.length()-_begin),_ttype); 421 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 422 _token = makeToken(_ttype); 423 _token->setText(text.substr(_begin, text.length()-_begin)); 424 } 425 _returnToken = _token; 426 _saveIndex=0; 427 } 428 429 void RequirementLexer::mDOTKEY(bool _createToken) { 430 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 431 _ttype = DOTKEY; 432 std::string::size_type _saveIndex; 433 434 mIDENT(false); 435 { // ( ... )* 436 for (;;) { 437 if ((LA(1) == 0x2e /* '.' */ )) { 438 match("."); 439 { 440 switch ( LA(1)) { 441 case 0x41 /* 'A' */ : 442 case 0x42 /* 'B' */ : 443 case 0x43 /* 'C' */ : 444 case 0x44 /* 'D' */ : 445 case 0x45 /* 'E' */ : 446 case 0x46 /* 'F' */ : 447 case 0x47 /* 'G' */ : 448 case 0x48 /* 'H' */ : 449 case 0x49 /* 'I' */ : 450 case 0x4a /* 'J' */ : 451 case 0x4b /* 'K' */ : 452 case 0x4c /* 'L' */ : 453 case 0x4d /* 'M' */ : 454 case 0x4e /* 'N' */ : 455 case 0x4f /* 'O' */ : 456 case 0x50 /* 'P' */ : 457 case 0x51 /* 'Q' */ : 458 case 0x52 /* 'R' */ : 459 case 0x53 /* 'S' */ : 460 case 0x54 /* 'T' */ : 461 case 0x55 /* 'U' */ : 462 case 0x56 /* 'V' */ : 463 case 0x57 /* 'W' */ : 464 case 0x58 /* 'X' */ : 465 case 0x59 /* 'Y' */ : 466 case 0x5a /* 'Z' */ : 467 case 0x61 /* 'a' */ : 468 case 0x62 /* 'b' */ : 469 case 0x63 /* 'c' */ : 470 case 0x64 /* 'd' */ : 471 case 0x65 /* 'e' */ : 472 case 0x66 /* 'f' */ : 473 case 0x67 /* 'g' */ : 474 case 0x68 /* 'h' */ : 475 case 0x69 /* 'i' */ : 476 case 0x6a /* 'j' */ : 477 case 0x6b /* 'k' */ : 478 case 0x6c /* 'l' */ : 479 case 0x6d /* 'm' */ : 480 case 0x6e /* 'n' */ : 481 case 0x6f /* 'o' */ : 482 case 0x70 /* 'p' */ : 483 case 0x71 /* 'q' */ : 484 case 0x72 /* 'r' */ : 485 case 0x73 /* 's' */ : 486 case 0x74 /* 't' */ : 487 case 0x75 /* 'u' */ : 488 case 0x76 /* 'v' */ : 489 case 0x77 /* 'w' */ : 490 case 0x78 /* 'x' */ : 491 case 0x79 /* 'y' */ : 492 case 0x7a /* 'z' */ : 493 { 494 mIDENT(false); 495 break; 496 } 497 case 0x30 /* '0' */ : 498 case 0x31 /* '1' */ : 499 case 0x32 /* '2' */ : 500 case 0x33 /* '3' */ : 501 case 0x34 /* '4' */ : 502 case 0x35 /* '5' */ : 503 case 0x36 /* '6' */ : 504 case 0x37 /* '7' */ : 505 case 0x38 /* '8' */ : 506 case 0x39 /* '9' */ : 507 { 508 mINTEGER(false); 509 break; 510 } 511 default: 512 { 513 throw antlr::NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn()); 514 } 515 } 516 } 517 } 518 else { 519 goto _loop53; 520 } 521 522 } 523 _loop53:; 524 } // ( ... )* 525 _ttype = testLiteralsTable(_ttype); 526 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 527 _token = makeToken(_ttype); 528 _token->setText(text.substr(_begin, text.length()-_begin)); 529 } 530 _returnToken = _token; 531 _saveIndex=0; 532 } 533 534 void RequirementLexer::mINTEGER(bool _createToken) { 535 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 536 _ttype = INTEGER; 537 std::string::size_type _saveIndex; 538 539 { // ( ... )+ 540 int _cnt71=0; 541 for (;;) { 542 if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) { 543 matchRange('0','9'); 544 } 545 else { 546 if ( _cnt71>=1 ) { goto _loop71; } else {throw antlr::NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());} 547 } 548 549 _cnt71++; 550 } 551 _loop71:; 552 } // ( ... )+ 553 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 554 _token = makeToken(_ttype); 555 _token->setText(text.substr(_begin, text.length()-_begin)); 556 } 557 _returnToken = _token; 558 _saveIndex=0; 559 } 560 561 void RequirementLexer::mPATHNAME(bool _createToken) { 562 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 563 _ttype = PATHNAME; 564 std::string::size_type _saveIndex; 565 566 match("/"); 567 mIDENT(false); 568 { // ( ... )+ 569 int _cnt56=0; 570 for (;;) { 571 if ((LA(1) == 0x2f /* '/' */ )) { 572 match("/"); 573 mIDENT(false); 574 } 575 else { 576 if ( _cnt56>=1 ) { goto _loop56; } else {throw antlr::NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());} 577 } 578 579 _cnt56++; 580 } 581 _loop56:; 582 } // ( ... )+ 583 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 584 _token = makeToken(_ttype); 585 _token->setText(text.substr(_begin, text.length()-_begin)); 586 } 587 _returnToken = _token; 588 _saveIndex=0; 589 } 590 591 void RequirementLexer::mHASHCONSTANT(bool _createToken) { 592 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 593 _ttype = HASHCONSTANT; 594 std::string::size_type _saveIndex; 595 596 _saveIndex = text.length(); 597 match('H' /* charlit */ ); 598 text.erase(_saveIndex); 599 _saveIndex = text.length(); 600 match('\"' /* charlit */ ); 601 text.erase(_saveIndex); 602 { // ( ... )+ 603 int _cnt59=0; 604 for (;;) { 605 if ((_tokenSet_1.member(LA(1)))) { 606 mHEX(false); 607 } 608 else { 609 if ( _cnt59>=1 ) { goto _loop59; } else {throw antlr::NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());} 610 } 611 612 _cnt59++; 613 } 614 _loop59:; 615 } // ( ... )+ 616 _saveIndex = text.length(); 617 match('\"' /* charlit */ ); 618 text.erase(_saveIndex); 619 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 620 _token = makeToken(_ttype); 621 _token->setText(text.substr(_begin, text.length()-_begin)); 622 } 623 _returnToken = _token; 624 _saveIndex=0; 625 } 626 627 void RequirementLexer::mHEX(bool _createToken) { 628 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 629 _ttype = HEX; 630 std::string::size_type _saveIndex; 631 632 switch ( LA(1)) { 633 case 0x30 /* '0' */ : 634 case 0x31 /* '1' */ : 635 case 0x32 /* '2' */ : 636 case 0x33 /* '3' */ : 637 case 0x34 /* '4' */ : 638 case 0x35 /* '5' */ : 639 case 0x36 /* '6' */ : 640 case 0x37 /* '7' */ : 641 case 0x38 /* '8' */ : 642 case 0x39 /* '9' */ : 643 { 644 matchRange('0','9'); 645 break; 646 } 647 case 0x61 /* 'a' */ : 648 case 0x62 /* 'b' */ : 649 case 0x63 /* 'c' */ : 650 case 0x64 /* 'd' */ : 651 case 0x65 /* 'e' */ : 652 case 0x66 /* 'f' */ : 653 { 654 matchRange('a','f'); 655 break; 656 } 657 case 0x41 /* 'A' */ : 658 case 0x42 /* 'B' */ : 659 case 0x43 /* 'C' */ : 660 case 0x44 /* 'D' */ : 661 case 0x45 /* 'E' */ : 662 case 0x46 /* 'F' */ : 663 { 664 matchRange('A','F'); 665 break; 666 } 667 default: 668 { 669 throw antlr::NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn()); 670 } 671 } 672 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 673 _token = makeToken(_ttype); 674 _token->setText(text.substr(_begin, text.length()-_begin)); 675 } 676 _returnToken = _token; 677 _saveIndex=0; 678 } 679 680 void RequirementLexer::mHEXCONSTANT(bool _createToken) { 681 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 682 _ttype = HEXCONSTANT; 683 std::string::size_type _saveIndex; 684 685 _saveIndex = text.length(); 686 match('0' /* charlit */ ); 687 text.erase(_saveIndex); 688 _saveIndex = text.length(); 689 match('x' /* charlit */ ); 690 text.erase(_saveIndex); 691 { // ( ... )+ 692 int _cnt62=0; 693 for (;;) { 694 if ((_tokenSet_1.member(LA(1)))) { 695 mHEX(false); 696 } 697 else { 698 if ( _cnt62>=1 ) { goto _loop62; } else {throw antlr::NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());} 699 } 700 701 _cnt62++; 702 } 703 _loop62:; 704 } // ( ... )+ 705 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 706 _token = makeToken(_ttype); 707 _token->setText(text.substr(_begin, text.length()-_begin)); 708 } 709 _returnToken = _token; 710 _saveIndex=0; 711 } 712 713 void RequirementLexer::mSTRING(bool _createToken) { 714 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 715 _ttype = STRING; 716 std::string::size_type _saveIndex; 717 718 _saveIndex = text.length(); 719 match('\"' /* charlit */ ); 720 text.erase(_saveIndex); 721 { // ( ... )* 722 for (;;) { 723 if ((LA(1) == 0x5c /* '\\' */ )) { 724 { 725 _saveIndex = text.length(); 726 match('\\' /* charlit */ ); 727 text.erase(_saveIndex); 728 match('\"' /* charlit */ ); 729 } 730 } 731 else if ((_tokenSet_2.member(LA(1)))) { 732 { 733 { 734 match(_tokenSet_2); 735 } 736 } 737 } 738 else { 739 goto _loop68; 740 } 741 742 } 743 _loop68:; 744 } // ( ... )* 745 _saveIndex = text.length(); 746 match('\"' /* charlit */ ); 747 text.erase(_saveIndex); 748 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 749 _token = makeToken(_ttype); 750 _token->setText(text.substr(_begin, text.length()-_begin)); 751 } 752 _returnToken = _token; 753 _saveIndex=0; 754 } 755 756 void RequirementLexer::mARROW(bool _createToken) { 757 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 758 _ttype = ARROW; 759 std::string::size_type _saveIndex; 760 761 match("=>"); 762 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 763 _token = makeToken(_ttype); 764 _token->setText(text.substr(_begin, text.length()-_begin)); 765 } 766 _returnToken = _token; 767 _saveIndex=0; 768 } 769 770 void RequirementLexer::mSEMI(bool _createToken) { 771 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 772 _ttype = SEMI; 773 std::string::size_type _saveIndex; 774 775 match(';' /* charlit */ ); 776 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 777 _token = makeToken(_ttype); 778 _token->setText(text.substr(_begin, text.length()-_begin)); 779 } 780 _returnToken = _token; 781 _saveIndex=0; 782 } 783 784 void RequirementLexer::mLPAREN(bool _createToken) { 785 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 786 _ttype = LPAREN; 787 std::string::size_type _saveIndex; 788 789 match('(' /* charlit */ ); 790 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 791 _token = makeToken(_ttype); 792 _token->setText(text.substr(_begin, text.length()-_begin)); 793 } 794 _returnToken = _token; 795 _saveIndex=0; 796 } 797 798 void RequirementLexer::mRPAREN(bool _createToken) { 799 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 800 _ttype = RPAREN; 801 std::string::size_type _saveIndex; 802 803 match(')' /* charlit */ ); 804 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 805 _token = makeToken(_ttype); 806 _token->setText(text.substr(_begin, text.length()-_begin)); 807 } 808 _returnToken = _token; 809 _saveIndex=0; 810 } 811 812 void RequirementLexer::mLBRACK(bool _createToken) { 813 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 814 _ttype = LBRACK; 815 std::string::size_type _saveIndex; 816 817 match('[' /* charlit */ ); 818 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 819 _token = makeToken(_ttype); 820 _token->setText(text.substr(_begin, text.length()-_begin)); 821 } 822 _returnToken = _token; 823 _saveIndex=0; 824 } 825 826 void RequirementLexer::mRBRACK(bool _createToken) { 827 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 828 _ttype = RBRACK; 829 std::string::size_type _saveIndex; 830 831 match(']' /* charlit */ ); 832 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 833 _token = makeToken(_ttype); 834 _token->setText(text.substr(_begin, text.length()-_begin)); 835 } 836 _returnToken = _token; 837 _saveIndex=0; 838 } 839 840 void RequirementLexer::mLESS(bool _createToken) { 841 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 842 _ttype = LESS; 843 std::string::size_type _saveIndex; 844 845 match('<' /* charlit */ ); 846 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 847 _token = makeToken(_ttype); 848 _token->setText(text.substr(_begin, text.length()-_begin)); 849 } 850 _returnToken = _token; 851 _saveIndex=0; 852 } 853 854 void RequirementLexer::mGT(bool _createToken) { 855 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 856 _ttype = GT; 857 std::string::size_type _saveIndex; 858 859 match('>' /* charlit */ ); 860 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 861 _token = makeToken(_ttype); 862 _token->setText(text.substr(_begin, text.length()-_begin)); 863 } 864 _returnToken = _token; 865 _saveIndex=0; 866 } 867 868 void RequirementLexer::mLE(bool _createToken) { 869 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 870 _ttype = LE; 871 std::string::size_type _saveIndex; 872 873 match("<="); 874 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 875 _token = makeToken(_ttype); 876 _token->setText(text.substr(_begin, text.length()-_begin)); 877 } 878 _returnToken = _token; 879 _saveIndex=0; 880 } 881 882 void RequirementLexer::mGE(bool _createToken) { 883 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 884 _ttype = GE; 885 std::string::size_type _saveIndex; 886 887 match(">="); 888 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 889 _token = makeToken(_ttype); 890 _token->setText(text.substr(_begin, text.length()-_begin)); 891 } 892 _returnToken = _token; 893 _saveIndex=0; 894 } 895 896 void RequirementLexer::mCOMMA(bool _createToken) { 897 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 898 _ttype = COMMA; 899 std::string::size_type _saveIndex; 900 901 match(',' /* charlit */ ); 902 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 903 _token = makeToken(_ttype); 904 _token->setText(text.substr(_begin, text.length()-_begin)); 905 } 906 _returnToken = _token; 907 _saveIndex=0; 908 } 909 910 void RequirementLexer::mEQL(bool _createToken) { 911 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 912 _ttype = EQL; 913 std::string::size_type _saveIndex; 914 915 match('=' /* charlit */ ); 916 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 917 _token = makeToken(_ttype); 918 _token->setText(text.substr(_begin, text.length()-_begin)); 919 } 920 _returnToken = _token; 921 _saveIndex=0; 922 } 923 924 void RequirementLexer::mEQQL(bool _createToken) { 925 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 926 _ttype = EQQL; 927 std::string::size_type _saveIndex; 928 929 match("=="); 930 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 931 _token = makeToken(_ttype); 932 _token->setText(text.substr(_begin, text.length()-_begin)); 933 } 934 _returnToken = _token; 935 _saveIndex=0; 936 } 937 938 void RequirementLexer::mSUBS(bool _createToken) { 939 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 940 _ttype = SUBS; 941 std::string::size_type _saveIndex; 942 943 match('~' /* charlit */ ); 944 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 945 _token = makeToken(_ttype); 946 _token->setText(text.substr(_begin, text.length()-_begin)); 947 } 948 _returnToken = _token; 949 _saveIndex=0; 950 } 951 952 void RequirementLexer::mNEG(bool _createToken) { 953 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 954 _ttype = NEG; 955 std::string::size_type _saveIndex; 956 957 match('-' /* charlit */ ); 958 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 959 _token = makeToken(_ttype); 960 _token->setText(text.substr(_begin, text.length()-_begin)); 961 } 962 _returnToken = _token; 963 _saveIndex=0; 964 } 965 966 void RequirementLexer::mNOT(bool _createToken) { 967 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 968 _ttype = NOT; 969 std::string::size_type _saveIndex; 970 971 match('!' /* charlit */ ); 972 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 973 _token = makeToken(_ttype); 974 _token->setText(text.substr(_begin, text.length()-_begin)); 975 } 976 _returnToken = _token; 977 _saveIndex=0; 978 } 979 980 void RequirementLexer::mSTAR(bool _createToken) { 981 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 982 _ttype = STAR; 983 std::string::size_type _saveIndex; 984 985 match('*' /* charlit */ ); 986 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 987 _token = makeToken(_ttype); 988 _token->setText(text.substr(_begin, text.length()-_begin)); 989 } 990 _returnToken = _token; 991 _saveIndex=0; 992 } 993 994 void RequirementLexer::mWS(bool _createToken) { 995 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 996 _ttype = WS; 997 std::string::size_type _saveIndex; 998 999 { // ( ... )+ 1000 int _cnt92=0; 1001 for (;;) { 1002 switch ( LA(1)) { 1003 case 0x20 /* ' ' */ : 1004 { 1005 match(' ' /* charlit */ ); 1006 break; 1007 } 1008 case 0xa /* '\n' */ : 1009 { 1010 match('\n' /* charlit */ ); 1011 newline(); 1012 break; 1013 } 1014 case 0x9 /* '\t' */ : 1015 { 1016 match('\t' /* charlit */ ); 1017 break; 1018 } 1019 default: 1020 { 1021 if ( _cnt92>=1 ) { goto _loop92; } else {throw antlr::NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());} 1022 } 1023 } 1024 _cnt92++; 1025 } 1026 _loop92:; 1027 } // ( ... )+ 1028 _ttype = antlr::Token::SKIP; 1029 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 1030 _token = makeToken(_ttype); 1031 _token->setText(text.substr(_begin, text.length()-_begin)); 1032 } 1033 _returnToken = _token; 1034 _saveIndex=0; 1035 } 1036 1037 void RequirementLexer::mSHELLCOMMENT(bool _createToken) { 1038 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 1039 _ttype = SHELLCOMMENT; 1040 std::string::size_type _saveIndex; 1041 1042 match('#' /* charlit */ ); 1043 { // ( ... )* 1044 for (;;) { 1045 if ((_tokenSet_3.member(LA(1)))) { 1046 matchNot('\n' /* charlit */ ); 1047 } 1048 else { 1049 goto _loop95; 1050 } 1051 1052 } 1053 _loop95:; 1054 } // ( ... )* 1055 _ttype = antlr::Token::SKIP; 1056 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 1057 _token = makeToken(_ttype); 1058 _token->setText(text.substr(_begin, text.length()-_begin)); 1059 } 1060 _returnToken = _token; 1061 _saveIndex=0; 1062 } 1063 1064 void RequirementLexer::mC_COMMENT(bool _createToken) { 1065 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 1066 _ttype = C_COMMENT; 1067 std::string::size_type _saveIndex; 1068 1069 match("/*"); 1070 { // ( ... )* 1071 for (;;) { 1072 if ((LA(1) == 0x2a /* '*' */ ) && (_tokenSet_4.member(LA(2)))) { 1073 { 1074 match('*' /* charlit */ ); 1075 { 1076 matchNot('/' /* charlit */ ); 1077 } 1078 } 1079 } 1080 else if ((_tokenSet_5.member(LA(1)))) { 1081 { 1082 matchNot('*' /* charlit */ ); 1083 } 1084 } 1085 else { 1086 goto _loop101; 1087 } 1088 1089 } 1090 _loop101:; 1091 } // ( ... )* 1092 match("*/"); 1093 _ttype = antlr::Token::SKIP; 1094 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 1095 _token = makeToken(_ttype); 1096 _token->setText(text.substr(_begin, text.length()-_begin)); 1097 } 1098 _returnToken = _token; 1099 _saveIndex=0; 1100 } 1101 1102 void RequirementLexer::mCPP_COMMENT(bool _createToken) { 1103 int _ttype; antlr::RefToken _token; std::string::size_type _begin = text.length(); 1104 _ttype = CPP_COMMENT; 1105 std::string::size_type _saveIndex; 1106 1107 match("//"); 1108 { // ( ... )* 1109 for (;;) { 1110 if ((_tokenSet_3.member(LA(1)))) { 1111 matchNot('\n' /* charlit */ ); 1112 } 1113 else { 1114 goto _loop104; 1115 } 1116 1117 } 1118 _loop104:; 1119 } // ( ... )* 1120 _ttype = antlr::Token::SKIP; 1121 if ( _createToken && _token==antlr::nullToken && _ttype!=antlr::Token::SKIP ) { 1122 _token = makeToken(_ttype); 1123 _token->setText(text.substr(_begin, text.length()-_begin)); 1124 } 1125 _returnToken = _token; 1126 _saveIndex=0; 1127 } 1128 1129 1130 const unsigned long RequirementLexer::_tokenSet_0_data_[] = { 0UL, 0UL, 134217726UL, 134217726UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL }; 1131 const antlr::BitSet RequirementLexer::_tokenSet_0(_tokenSet_0_data_,10); 1132 const unsigned long RequirementLexer::_tokenSet_1_data_[] = { 0UL, 67043328UL, 126UL, 126UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL }; 1133 // 0 1 2 3 4 5 6 7 8 9 1134 const antlr::BitSet RequirementLexer::_tokenSet_1(_tokenSet_1_data_,10); 1135 const unsigned long RequirementLexer::_tokenSet_2_data_[] = { 4294967295UL, 4294967291UL, 4026531839UL, 4294967295UL, 4294967295UL, 4294967295UL, 4294967292UL, 2097151UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL }; 1136 // 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10 1137 // 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 1138 // 0x1f ! # $ % & \' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = 1139 const antlr::BitSet RequirementLexer::_tokenSet_2(_tokenSet_2_data_,16); 1140 const unsigned long RequirementLexer::_tokenSet_3_data_[] = { 4294966271UL, 4294967295UL, 4294967295UL, 4294967295UL, 4294967295UL, 4294967295UL, 4294967292UL, 2097151UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL }; 1141 // 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xb 0xc 0xd 0xe 0xf 0x10 0x11 1142 // 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f 1143 // ! \" # $ % & \' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = 1144 const antlr::BitSet RequirementLexer::_tokenSet_3(_tokenSet_3_data_,16); 1145 const unsigned long RequirementLexer::_tokenSet_4_data_[] = { 4294967295UL, 4294934527UL, 4294967295UL, 4294967295UL, 4294967295UL, 4294967295UL, 4294967292UL, 2097151UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL }; 1146 // 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10 1147 // 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 1148 // 0x1f ! \" # $ % & \' ( ) * + , - . 0 1 2 3 4 5 6 7 8 9 : ; < = 1149 const antlr::BitSet RequirementLexer::_tokenSet_4(_tokenSet_4_data_,16); 1150 const unsigned long RequirementLexer::_tokenSet_5_data_[] = { 4294967295UL, 4294966271UL, 4294967295UL, 4294967295UL, 4294967295UL, 4294967295UL, 4294967292UL, 2097151UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL }; 1151 // 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10 1152 // 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 1153 // 0x1f ! \" # $ % & \' ( ) + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = 1154 const antlr::BitSet RequirementLexer::_tokenSet_5(_tokenSet_5_data_,16); 1155 1156 ANTLR_END_NAMESPACE