1 /* $ANTLR 2.7.7 (20121221): "requirements.grammar" -> "RequirementParser.cpp"$ */
2 #include "RequirementParser.hpp"
3 #include <antlr/NoViableAltException.hpp>
4 #include <antlr/SemanticException.hpp>
5 #include <antlr/ASTFactory.hpp>
7 #include "requirement.h"
9 #include "csutilities.h"
10 #include <libDER/libDER.h>
11 #include <libDER/asn1Types.h>
12 #include <security_utilities/cfutilities.h>
13 #include <security_utilities/hashing.h>
14 #include <security_cdsa_utilities/cssmdata.h> // OID coding
15 #include <Security/SecCertificate.h>
16 using namespace CodeSigning
;
17 typedef Requirement::Maker Maker
;
21 /* Decode a choice of UTCTime or GeneralizedTime to a CFAbsoluteTime. Return
22 an absoluteTime if the date was valid and properly decoded. Return
23 NULL_TIME otherwise. */
24 CFAbsoluteTime
SecAbsoluteTimeFromDateContent(DERTag tag
, const uint8_t *bytes
,
30 ANTLR_BEGIN_NAMESPACE(Security_CodeSigning
)
33 // Collect error messages.
34 // Note that the immediate caller takes the absence of collected error messages
35 // to indicate compilation success.
37 void RequirementParser::reportError(const antlr::RecognitionException
&ex
)
39 errors
+= ex
.toString() + "\n";
42 void RequirementParser::reportError(const std::string
&s
)
49 // Parser helper functions
51 string
RequirementParser::hexString(const string
&s
)
54 throw antlr::SemanticException("odd number of digits");
55 const char *p
= s
.data();
57 for (unsigned n
= 0; n
< s
.length(); n
+= 2) {
59 sscanf(p
+n
, "%2hhx", &c
);
65 void RequirementParser::hashString(const string
&s
, SHA1::Digest hash
)
67 if (s
.size() != 2 * SHA1::digestLength
)
68 throw antlr::SemanticException("invalid hash length");
69 memcpy(hash
, hexString(s
).data(), SHA1::digestLength
);
72 static const char *matchPrefix(const string
&key
, const char *prefix
)
74 size_t pLength
= strlen(prefix
);
75 if (!key
.compare(0, pLength
, prefix
, 0, pLength
))
76 return key
.c_str() + pLength
;
81 void RequirementParser::certMatchOperation(Maker
&maker
, int32_t slot
, string key
)
83 if (const char *oids
= matchPrefix(key
, "timestamp.")) {
84 maker
.put(opCertFieldDate
);
86 CssmAutoData
oid(Allocator::standard()); oid
.fromOid(oids
);
87 maker
.putData(oid
.data(), oid
.length());
88 } else if (matchPrefix(key
, "subject.")) {
89 maker
.put(opCertField
);
92 } else if (const char *oids
= matchPrefix(key
, "field.")) {
93 maker
.put(opCertGeneric
);
95 CssmAutoData
oid(Allocator::standard()); oid
.fromOid(oids
);
96 maker
.putData(oid
.data(), oid
.length());
97 } else if (const char *oids
= matchPrefix(key
, "extension.")) {
98 maker
.put(opCertGeneric
);
100 CssmAutoData
oid(Allocator::standard()); oid
.fromOid(oids
);
101 maker
.putData(oid
.data(), oid
.length());
102 } else if (const char *oids
= matchPrefix(key
, "policy.")) {
103 maker
.put(opCertPolicy
);
105 CssmAutoData
oid(Allocator::standard()); oid
.fromOid(oids
);
106 maker
.putData(oid
.data(), oid
.length());
108 throw antlr::SemanticException(key
+ ": unrecognized certificate field");
112 RequirementParser::RequirementParser(antlr::TokenBuffer
& tokenBuf
, int k
)
113 : antlr::LLkParser(tokenBuf
,k
)
117 RequirementParser::RequirementParser(antlr::TokenBuffer
& tokenBuf
)
118 : antlr::LLkParser(tokenBuf
,2)
122 RequirementParser::RequirementParser(antlr::TokenStream
& lexer
, int k
)
123 : antlr::LLkParser(lexer
,k
)
127 RequirementParser::RequirementParser(antlr::TokenStream
& lexer
)
128 : antlr::LLkParser(lexer
,2)
132 RequirementParser::RequirementParser(const antlr::ParserSharedInputState
& state
)
133 : antlr::LLkParser(state
,2)
137 BlobCore
* RequirementParser::autosense() {
138 BlobCore
*result
= NULL
;
140 try { // for error handling
148 case LITERAL_identifier
:
150 case LITERAL_platform
:
151 case LITERAL_notarized
:
153 case LITERAL_certificate
:
156 case LITERAL_entitlement
:
158 result
=requirement();
163 case LITERAL_designated
:
164 case LITERAL_library
:
168 result
=requirementSet();
173 throw antlr::NoViableAltException(LT(1), getFilename());
177 catch (antlr::RecognitionException
& ex
) {
179 recover(ex
,_tokenSet_0
);
184 Requirement
* RequirementParser::requirement() {
185 Requirement
*result
= NULL
;
187 try { // for error handling
188 result
=requirementElement();
189 match(antlr::Token::EOF_TYPE
);
191 catch (antlr::RecognitionException
& ex
) {
193 recover(ex
,_tokenSet_0
);
198 Requirements
* RequirementParser::requirementSet() {
199 Requirements
*result
= NULL
;
200 Requirements::Maker maker
;
202 try { // for error handling
206 if ((_tokenSet_1
.member(LA(1)))) {
207 uint32_t t
; Requirement
*req
;
210 req
=requirementElement();
214 if ( _cnt4
>=1 ) { goto _loop4
; } else {throw antlr::NoViableAltException(LT(1), getFilename());}
221 result
= errors
.empty() ? maker() : NULL
;
222 match(antlr::Token::EOF_TYPE
);
224 catch (antlr::RecognitionException
& ex
) {
226 recover(ex
,_tokenSet_0
);
231 uint32_t RequirementParser::requirementType() {
232 uint32_t type
= kSecInvalidRequirementType
;
234 try { // for error handling
238 match(LITERAL_guest
);
239 type
= kSecGuestRequirementType
;
245 type
= kSecHostRequirementType
;
248 case LITERAL_designated
:
250 match(LITERAL_designated
);
251 type
= kSecDesignatedRequirementType
;
254 case LITERAL_library
:
256 match(LITERAL_library
);
257 type
= kSecLibraryRequirementType
;
262 match(LITERAL_plugin
);
263 type
= kSecPluginRequirementType
;
273 throw antlr::NoViableAltException(LT(1), getFilename());
277 catch (antlr::RecognitionException
& ex
) {
279 recover(ex
,_tokenSet_2
);
284 Requirement
* RequirementParser::requirementElement() {
285 Requirement
*result
= NULL
;
286 Requirement::Maker maker
;
288 try { // for error handling
293 if ((LA(1) == SEMI
)) {
304 catch (antlr::RecognitionException
& ex
) {
306 recover(ex
,_tokenSet_3
);
311 int32_t RequirementParser::integer() {
313 antlr::RefToken s
= antlr::nullToken
;
315 try { // for error handling
318 result
= int32_t(atol(s
->getText().c_str()));
320 catch (antlr::RecognitionException
& ex
) {
322 recover(ex
,_tokenSet_4
);
327 void RequirementParser::expr(
330 Maker::Label
label(maker
);
332 try { // for error handling
336 if ((LA(1) == LITERAL_or
)) {
338 maker
.insert
<ExprOp
>(label
) = opOr
;
349 catch (antlr::RecognitionException
& ex
) {
351 recover(ex
,_tokenSet_5
);
355 void RequirementParser::fluff() {
357 try { // for error handling
360 catch (antlr::RecognitionException
& ex
) {
362 recover(ex
,_tokenSet_6
);
366 void RequirementParser::term(
369 Maker::Label
label(maker
);
371 try { // for error handling
375 if ((LA(1) == LITERAL_and
)) {
377 maker
.insert
<ExprOp
>(label
) = opAnd
;
388 catch (antlr::RecognitionException
& ex
) {
390 recover(ex
,_tokenSet_7
);
394 void RequirementParser::primary(
398 try { // for error handling
414 match(LITERAL_always
);
424 throw antlr::NoViableAltException(LT(1), getFilename());
438 match(LITERAL_never
);
443 match(LITERAL_false
);
448 throw antlr::NoViableAltException(LT(1), getFilename());
456 case LITERAL_certificate
:
467 case LITERAL_entitlement
:
469 entitlementspec(maker
);
472 case LITERAL_identifier
:
474 match(LITERAL_identifier
);
477 code
=identifierString();
483 match(LITERAL_cdhash
);
487 maker
.cdhash(digest
);
490 case LITERAL_platform
:
492 match(LITERAL_platform
);
496 maker
.platform(ident
);
499 case LITERAL_notarized
:
501 match(LITERAL_notarized
);
502 maker
.put(opNotarized
);
506 if ((LA(1) == LPAREN
) && (_tokenSet_8
.member(LA(2)))) {
511 else if ((LA(1) == LPAREN
) && (LA(2) == DOTKEY
|| LA(2) == STRING
)) {
514 name
=identifierString();
516 maker
.put(opNamedCode
); maker
.put(name
);
519 throw antlr::NoViableAltException(LT(1), getFilename());
523 catch (antlr::RecognitionException
& ex
) {
525 recover(ex
,_tokenSet_9
);
529 void RequirementParser::certspec(
533 try { // for error handling
534 if ((LA(1) == LITERAL_anchor
) && (LA(2) == LITERAL_apple
)) {
535 match(LITERAL_anchor
);
536 match(LITERAL_apple
);
539 else if ((LA(1) == LITERAL_anchor
) && (LA(2) == LITERAL_generic
)) {
540 match(LITERAL_anchor
);
541 match(LITERAL_generic
);
542 match(LITERAL_apple
);
543 maker
.put(opAppleGenericAnchor
);
545 else if ((LA(1) == LITERAL_anchor
|| LA(1) == LITERAL_certificate
|| LA(1) == LITERAL_cert
) && (LA(2) == LITERAL_trusted
)) {
548 case LITERAL_certificate
:
550 match(LITERAL_certificate
);
560 match(LITERAL_anchor
);
565 throw antlr::NoViableAltException(LT(1), getFilename());
569 match(LITERAL_trusted
);
570 maker
.trustedAnchor();
572 else if ((LA(1) == LITERAL_certificate
|| LA(1) == LITERAL_cert
) && (_tokenSet_10
.member(LA(2)))) {
575 case LITERAL_certificate
:
577 match(LITERAL_certificate
);
587 throw antlr::NoViableAltException(LT(1), getFilename());
603 certslotspec(maker
, slot
);
606 case LITERAL_trusted
:
608 match(LITERAL_trusted
);
609 maker
.trustedAnchor(slot
);
614 throw antlr::NoViableAltException(LT(1), getFilename());
619 else if ((LA(1) == LITERAL_anchor
) && (_tokenSet_11
.member(LA(2)))) {
620 match(LITERAL_anchor
);
621 certslotspec(maker
, Requirement::anchorCert
);
624 throw antlr::NoViableAltException(LT(1), getFilename());
628 catch (antlr::RecognitionException
& ex
) {
630 recover(ex
,_tokenSet_9
);
634 void RequirementParser::infospec(
639 try { // for error handling
642 maker
.put(opInfoKeyField
); maker
.put(key
);
645 catch (antlr::RecognitionException
& ex
) {
647 recover(ex
,_tokenSet_9
);
651 void RequirementParser::entitlementspec(
656 try { // for error handling
657 match(LITERAL_entitlement
);
659 maker
.put(opEntitlementField
); maker
.put(key
);
662 catch (antlr::RecognitionException
& ex
) {
664 recover(ex
,_tokenSet_9
);
668 void RequirementParser::eql() {
670 try { // for error handling
693 throw antlr::NoViableAltException(LT(1), getFilename());
697 catch (antlr::RecognitionException
& ex
) {
699 recover(ex
,_tokenSet_12
);
703 string
RequirementParser::identifierString() {
705 antlr::RefToken dk
= antlr::nullToken
;
706 antlr::RefToken s
= antlr::nullToken
;
708 try { // for error handling
714 result
= dk
->getText();
721 result
= s
->getText();
726 throw antlr::NoViableAltException(LT(1), getFilename());
730 catch (antlr::RecognitionException
& ex
) {
732 recover(ex
,_tokenSet_9
);
737 void RequirementParser::hash(
740 antlr::RefToken hash
= antlr::nullToken
;
742 try { // for error handling
745 hashString(hash
->getText(), digest
);
747 catch (antlr::RecognitionException
& ex
) {
749 recover(ex
,_tokenSet_9
);
753 void RequirementParser::appleanchor(
757 try { // for error handling
759 case antlr::Token::EOF_TYPE
:
762 case LITERAL_designated
:
763 case LITERAL_library
:
772 maker
.put(opAppleAnchor
);
775 case LITERAL_generic
:
777 match(LITERAL_generic
);
778 maker
.put(opAppleGenericAnchor
);
785 name
=identifierString();
786 maker
.put(opNamedAnchor
); maker
.put(name
);
791 throw antlr::NoViableAltException(LT(1), getFilename());
795 catch (antlr::RecognitionException
& ex
) {
797 recover(ex
,_tokenSet_9
);
801 int32_t RequirementParser::certSlot() {
804 try { // for error handling
821 slot
= Requirement::leafCert
;
827 slot
= Requirement::anchorCert
;
832 throw antlr::NoViableAltException(LT(1), getFilename());
836 catch (antlr::RecognitionException
& ex
) {
838 recover(ex
,_tokenSet_13
);
843 void RequirementParser::certslotspec(
844 Maker
&maker
, int32_t slot
848 try { // for error handling
859 certificateDigest(digest
);
860 maker
.anchor(slot
, digest
);
866 certMatchOperation(maker
, slot
, key
);
872 throw antlr::NoViableAltException(LT(1), getFilename());
876 catch (antlr::RecognitionException
& ex
) {
878 recover(ex
,_tokenSet_9
);
882 void RequirementParser::empty() {
884 try { // for error handling
886 catch (antlr::RecognitionException
& ex
) {
888 recover(ex
,_tokenSet_14
);
892 void RequirementParser::certificateDigest(
896 try { // for error handling
909 if (CFRef
<CFDataRef
> certData
= cfLoadFile(path
))
910 hashOfCertificate(CFDataGetBytePtr(certData
), CFDataGetLength(certData
), digest
);
912 throw antlr::SemanticException(path
+ ": not found");
918 throw antlr::NoViableAltException(LT(1), getFilename());
922 catch (antlr::RecognitionException
& ex
) {
924 recover(ex
,_tokenSet_9
);
928 string
RequirementParser::bracketKey() {
931 try { // for error handling
936 catch (antlr::RecognitionException
& ex
) {
938 recover(ex
,_tokenSet_15
);
943 void RequirementParser::match_suffix(
947 try { // for error handling
949 case antlr::Token::EOF_TYPE
:
952 case LITERAL_designated
:
953 case LITERAL_library
:
967 match(LITERAL_exists
);
970 case antlr::Token::EOF_TYPE
:
973 case LITERAL_designated
:
974 case LITERAL_library
:
986 throw antlr::NoViableAltException(LT(1), getFilename());
990 maker
.put(matchExists
);
995 match(LITERAL_absent
);
996 maker
.put(matchAbsent
);
1004 maker
.put(matchContains
); maker
.put(value
);
1008 if ((LA(1) == EQL
|| LA(1) == EQQL
) && (_tokenSet_16
.member(LA(2)))) {
1023 throw antlr::NoViableAltException(LT(1), getFilename());
1027 MatchOperation mop
= matchEqual
; string value
;
1033 mop
= matchEndsWith
;
1044 throw antlr::NoViableAltException(LT(1), getFilename());
1054 mop
= (mop
== matchEndsWith
) ? matchContains
: matchBeginsWith
;
1057 case antlr::Token::EOF_TYPE
:
1060 case LITERAL_designated
:
1061 case LITERAL_library
:
1062 case LITERAL_plugin
:
1073 throw antlr::NoViableAltException(LT(1), getFilename());
1077 maker
.put(mop
); maker
.put(value
);
1079 else if ((LA(1) == EQL
|| LA(1) == EQQL
) && (LA(2) == LITERAL_timestamp
)) {
1094 throw antlr::NoViableAltException(LT(1), getFilename());
1098 MatchOperation mop
= matchOn
; int64_t value
;
1100 maker
.put(mop
); maker
.put(value
);
1102 else if ((LA(1) == LESS
) && ((LA(2) >= HEXCONSTANT
&& LA(2) <= STRING
))) {
1106 maker
.put(matchLessThan
); maker
.put(value
);
1108 else if ((LA(1) == GT
) && ((LA(2) >= HEXCONSTANT
&& LA(2) <= STRING
))) {
1112 maker
.put(matchGreaterThan
); maker
.put(value
);
1114 else if ((LA(1) == LE
) && ((LA(2) >= HEXCONSTANT
&& LA(2) <= STRING
))) {
1118 maker
.put(matchLessEqual
); maker
.put(value
);
1120 else if ((LA(1) == GE
) && ((LA(2) >= HEXCONSTANT
&& LA(2) <= STRING
))) {
1124 maker
.put(matchGreaterEqual
); maker
.put(value
);
1126 else if ((LA(1) == LESS
) && (LA(2) == LITERAL_timestamp
)) {
1130 maker
.put(matchBefore
); maker
.put(value
);
1132 else if ((LA(1) == GT
) && (LA(2) == LITERAL_timestamp
)) {
1136 maker
.put(matchAfter
); maker
.put(value
);
1138 else if ((LA(1) == LE
) && (LA(2) == LITERAL_timestamp
)) {
1142 maker
.put(matchOnOrBefore
); maker
.put(value
);
1144 else if ((LA(1) == GE
) && (LA(2) == LITERAL_timestamp
)) {
1148 maker
.put(matchOnOrAfter
); maker
.put(value
);
1151 throw antlr::NoViableAltException(LT(1), getFilename());
1155 catch (antlr::RecognitionException
& ex
) {
1157 recover(ex
,_tokenSet_9
);
1161 string
RequirementParser::datavalue() {
1163 antlr::RefToken hex
= antlr::nullToken
;
1165 try { // for error handling
1170 result
=stringvalue();
1177 result
= hexString(hex
->getText());
1182 throw antlr::NoViableAltException(LT(1), getFilename());
1186 catch (antlr::RecognitionException
& ex
) {
1188 recover(ex
,_tokenSet_17
);
1193 int64_t RequirementParser::timestamp() {
1195 antlr::RefToken s
= antlr::nullToken
;
1197 try { // for error handling
1198 match(LITERAL_timestamp
);
1201 result
= (int64_t)SecAbsoluteTimeFromDateContent(ASN1_GENERALIZED_TIME
, (uint8_t const *)s
->getText().c_str(), s
->getText().length());
1203 catch (antlr::RecognitionException
& ex
) {
1205 recover(ex
,_tokenSet_9
);
1210 string
RequirementParser::stringvalue() {
1212 antlr::RefToken dk
= antlr::nullToken
;
1213 antlr::RefToken s
= antlr::nullToken
;
1215 try { // for error handling
1221 result
= dk
->getText();
1228 result
= s
->getText();
1233 throw antlr::NoViableAltException(LT(1), getFilename());
1237 catch (antlr::RecognitionException
& ex
) {
1239 recover(ex
,_tokenSet_18
);
1244 string
RequirementParser::pathstring() {
1246 antlr::RefToken dk
= antlr::nullToken
;
1247 antlr::RefToken s
= antlr::nullToken
;
1248 antlr::RefToken pn
= antlr::nullToken
;
1250 try { // for error handling
1256 result
= dk
->getText();
1263 result
= s
->getText();
1270 result
= pn
->getText();
1275 throw antlr::NoViableAltException(LT(1), getFilename());
1279 catch (antlr::RecognitionException
& ex
) {
1281 recover(ex
,_tokenSet_9
);
1286 void RequirementParser::initializeASTFactory( antlr::ASTFactory
& )
1289 const char* RequirementParser::tokenNames
[] = {
1293 "NULL_TREE_LOOKAHEAD",
1354 const unsigned long RequirementParser::_tokenSet_0_data_
[] = { 2UL, 0UL, 0UL, 0UL };
1356 const antlr::BitSet
RequirementParser::_tokenSet_0(_tokenSet_0_data_
,4);
1357 const unsigned long RequirementParser::_tokenSet_1_data_
[] = { 992UL, 524288UL, 0UL, 0UL };
1358 // "guest" "host" "designated" "library" "plugin" INTEGER
1359 const antlr::BitSet
RequirementParser::_tokenSet_1(_tokenSet_1_data_
,4);
1360 const unsigned long RequirementParser::_tokenSet_2_data_
[] = { 16UL, 0UL, 0UL, 0UL };
1362 const antlr::BitSet
RequirementParser::_tokenSet_2(_tokenSet_2_data_
,4);
1363 const unsigned long RequirementParser::_tokenSet_3_data_
[] = { 994UL, 524288UL, 0UL, 0UL };
1364 // EOF "guest" "host" "designated" "library" "plugin" INTEGER
1365 const antlr::BitSet
RequirementParser::_tokenSet_3(_tokenSet_3_data_
,4);
1366 const unsigned long RequirementParser::_tokenSet_4_data_
[] = { 268447730UL, 3097094UL, 0UL, 0UL };
1367 // EOF ARROW "guest" "host" "designated" "library" "plugin" "or" "and"
1368 // RPAREN "trusted" EQL EQQL LBRACK HASHCONSTANT DOTKEY STRING PATHNAME
1370 const antlr::BitSet
RequirementParser::_tokenSet_4(_tokenSet_4_data_
,4);
1371 const unsigned long RequirementParser::_tokenSet_5_data_
[] = { 9186UL, 2621440UL, 0UL, 0UL };
1372 // EOF "guest" "host" "designated" "library" "plugin" RPAREN INTEGER SEMI
1373 const antlr::BitSet
RequirementParser::_tokenSet_5(_tokenSet_5_data_
,4);
1374 const unsigned long RequirementParser::_tokenSet_6_data_
[] = { 994UL, 2621440UL, 0UL, 0UL };
1375 // EOF "guest" "host" "designated" "library" "plugin" INTEGER SEMI
1376 const antlr::BitSet
RequirementParser::_tokenSet_6(_tokenSet_6_data_
,4);
1377 const unsigned long RequirementParser::_tokenSet_7_data_
[] = { 10210UL, 2621440UL, 0UL, 0UL };
1378 // EOF "guest" "host" "designated" "library" "plugin" "or" RPAREN INTEGER
1380 const antlr::BitSet
RequirementParser::_tokenSet_7(_tokenSet_7_data_
,4);
1381 const unsigned long RequirementParser::_tokenSet_8_data_
[] = { 1828704256UL, 0UL, 0UL, 0UL };
1382 // LPAREN NOT "always" "true" "never" "false" "identifier" "cdhash" "platform"
1383 // "notarized" "anchor" "certificate" "cert" "info" "entitlement"
1384 const antlr::BitSet
RequirementParser::_tokenSet_8(_tokenSet_8_data_
,4);
1385 const unsigned long RequirementParser::_tokenSet_9_data_
[] = { 12258UL, 2621440UL, 0UL, 0UL };
1386 // EOF "guest" "host" "designated" "library" "plugin" "or" "and" RPAREN
1388 const antlr::BitSet
RequirementParser::_tokenSet_9(_tokenSet_9_data_
,4);
1389 const unsigned long RequirementParser::_tokenSet_10_data_
[] = { 0UL, 538624UL, 0UL, 0UL };
1390 // NEG "leaf" "root" INTEGER
1391 const antlr::BitSet
RequirementParser::_tokenSet_10(_tokenSet_10_data_
,4);
1392 const unsigned long RequirementParser::_tokenSet_11_data_
[] = { 0UL, 475654UL, 0UL, 0UL };
1393 // EQL EQQL LBRACK HASHCONSTANT DOTKEY STRING PATHNAME
1394 const antlr::BitSet
RequirementParser::_tokenSet_11(_tokenSet_11_data_
,4);
1395 const unsigned long RequirementParser::_tokenSet_12_data_
[] = { 0UL, 999424UL, 0UL, 0UL };
1396 // HASHCONSTANT DOTKEY STRING PATHNAME INTEGER
1397 const antlr::BitSet
RequirementParser::_tokenSet_12(_tokenSet_12_data_
,4);
1398 const unsigned long RequirementParser::_tokenSet_13_data_
[] = { 268435456UL, 475654UL, 0UL, 0UL };
1399 // "trusted" EQL EQQL LBRACK HASHCONSTANT DOTKEY STRING PATHNAME
1400 const antlr::BitSet
RequirementParser::_tokenSet_13(_tokenSet_13_data_
,4);
1401 const unsigned long RequirementParser::_tokenSet_14_data_
[] = { 2147495906UL, 3096576UL, 0UL, 0UL };
1402 // EOF "guest" "host" "designated" "library" "plugin" "or" "and" RPAREN
1403 // "exists" HASHCONSTANT DOTKEY STRING PATHNAME INTEGER SEMI
1404 const antlr::BitSet
RequirementParser::_tokenSet_14(_tokenSet_14_data_
,4);
1405 const unsigned long RequirementParser::_tokenSet_15_data_
[] = { 2147495906UL, 2621943UL, 0UL, 0UL };
1406 // EOF "guest" "host" "designated" "library" "plugin" "or" "and" RPAREN
1407 // "exists" "absent" EQL EQQL SUBS LESS GT LE GE INTEGER SEMI
1408 const antlr::BitSet
RequirementParser::_tokenSet_15(_tokenSet_15_data_
,4);
1409 const unsigned long RequirementParser::_tokenSet_16_data_
[] = { 0UL, 229384UL, 0UL, 0UL };
1410 // STAR HEXCONSTANT DOTKEY STRING
1411 const antlr::BitSet
RequirementParser::_tokenSet_16(_tokenSet_16_data_
,4);
1412 const unsigned long RequirementParser::_tokenSet_17_data_
[] = { 12258UL, 2621448UL, 0UL, 0UL };
1413 // EOF "guest" "host" "designated" "library" "plugin" "or" "and" RPAREN
1414 // STAR INTEGER SEMI
1415 const antlr::BitSet
RequirementParser::_tokenSet_17(_tokenSet_17_data_
,4);
1416 const unsigned long RequirementParser::_tokenSet_18_data_
[] = { 12258UL, 2622472UL, 0UL, 0UL };
1417 // EOF "guest" "host" "designated" "library" "plugin" "or" "and" RPAREN
1418 // STAR RBRACK INTEGER SEMI
1419 const antlr::BitSet
RequirementParser::_tokenSet_18(_tokenSet_18_data_
,4);