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
:
154 case LITERAL_certificate
:
157 case LITERAL_entitlement
:
159 result
=requirement();
164 case LITERAL_designated
:
165 case LITERAL_library
:
169 result
=requirementSet();
174 throw antlr::NoViableAltException(LT(1), getFilename());
178 catch (antlr::RecognitionException
& ex
) {
180 recover(ex
,_tokenSet_0
);
185 Requirement
* RequirementParser::requirement() {
186 Requirement
*result
= NULL
;
188 try { // for error handling
189 result
=requirementElement();
190 match(antlr::Token::EOF_TYPE
);
192 catch (antlr::RecognitionException
& ex
) {
194 recover(ex
,_tokenSet_0
);
199 Requirements
* RequirementParser::requirementSet() {
200 Requirements
*result
= NULL
;
201 Requirements::Maker maker
;
203 try { // for error handling
207 if ((_tokenSet_1
.member(LA(1)))) {
208 uint32_t t
; Requirement
*req
;
211 req
=requirementElement();
215 if ( _cnt4
>=1 ) { goto _loop4
; } else {throw antlr::NoViableAltException(LT(1), getFilename());}
222 result
= errors
.empty() ? maker() : NULL
;
223 match(antlr::Token::EOF_TYPE
);
225 catch (antlr::RecognitionException
& ex
) {
227 recover(ex
,_tokenSet_0
);
232 uint32_t RequirementParser::requirementType() {
233 uint32_t type
= kSecInvalidRequirementType
;
235 try { // for error handling
239 match(LITERAL_guest
);
240 type
= kSecGuestRequirementType
;
246 type
= kSecHostRequirementType
;
249 case LITERAL_designated
:
251 match(LITERAL_designated
);
252 type
= kSecDesignatedRequirementType
;
255 case LITERAL_library
:
257 match(LITERAL_library
);
258 type
= kSecLibraryRequirementType
;
263 match(LITERAL_plugin
);
264 type
= kSecPluginRequirementType
;
274 throw antlr::NoViableAltException(LT(1), getFilename());
278 catch (antlr::RecognitionException
& ex
) {
280 recover(ex
,_tokenSet_2
);
285 Requirement
* RequirementParser::requirementElement() {
286 Requirement
*result
= NULL
;
287 Requirement::Maker maker
;
289 try { // for error handling
294 if ((LA(1) == SEMI
)) {
305 catch (antlr::RecognitionException
& ex
) {
307 recover(ex
,_tokenSet_3
);
312 int32_t RequirementParser::integer() {
314 antlr::RefToken s
= antlr::nullToken
;
316 try { // for error handling
319 result
= int32_t(atol(s
->getText().c_str()));
321 catch (antlr::RecognitionException
& ex
) {
323 recover(ex
,_tokenSet_4
);
328 void RequirementParser::expr(
331 Maker::Label
label(maker
);
333 try { // for error handling
337 if ((LA(1) == LITERAL_or
)) {
339 maker
.insert
<ExprOp
>(label
) = opOr
;
350 catch (antlr::RecognitionException
& ex
) {
352 recover(ex
,_tokenSet_5
);
356 void RequirementParser::fluff() {
358 try { // for error handling
361 catch (antlr::RecognitionException
& ex
) {
363 recover(ex
,_tokenSet_6
);
367 void RequirementParser::term(
370 Maker::Label
label(maker
);
372 try { // for error handling
376 if ((LA(1) == LITERAL_and
)) {
378 maker
.insert
<ExprOp
>(label
) = opAnd
;
389 catch (antlr::RecognitionException
& ex
) {
391 recover(ex
,_tokenSet_7
);
395 void RequirementParser::primary(
399 try { // for error handling
415 match(LITERAL_always
);
425 throw antlr::NoViableAltException(LT(1), getFilename());
439 match(LITERAL_never
);
444 match(LITERAL_false
);
449 throw antlr::NoViableAltException(LT(1), getFilename());
457 case LITERAL_certificate
:
468 case LITERAL_entitlement
:
470 entitlementspec(maker
);
473 case LITERAL_identifier
:
475 match(LITERAL_identifier
);
478 code
=identifierString();
484 match(LITERAL_cdhash
);
488 maker
.cdhash(digest
);
491 case LITERAL_platform
:
493 match(LITERAL_platform
);
497 maker
.platform(ident
);
500 case LITERAL_notarized
:
502 match(LITERAL_notarized
);
503 maker
.put(opNotarized
);
508 match(LITERAL_legacy
);
509 maker
.put(opLegacyDevID
);
513 if ((LA(1) == LPAREN
) && (_tokenSet_8
.member(LA(2)))) {
518 else if ((LA(1) == LPAREN
) && (LA(2) == DOTKEY
|| LA(2) == STRING
)) {
521 name
=identifierString();
523 maker
.put(opNamedCode
); maker
.put(name
);
526 throw antlr::NoViableAltException(LT(1), getFilename());
530 catch (antlr::RecognitionException
& ex
) {
532 recover(ex
,_tokenSet_9
);
536 void RequirementParser::certspec(
540 try { // for error handling
541 if ((LA(1) == LITERAL_anchor
) && (LA(2) == LITERAL_apple
)) {
542 match(LITERAL_anchor
);
543 match(LITERAL_apple
);
546 else if ((LA(1) == LITERAL_anchor
) && (LA(2) == LITERAL_generic
)) {
547 match(LITERAL_anchor
);
548 match(LITERAL_generic
);
549 match(LITERAL_apple
);
550 maker
.put(opAppleGenericAnchor
);
552 else if ((LA(1) == LITERAL_anchor
|| LA(1) == LITERAL_certificate
|| LA(1) == LITERAL_cert
) && (LA(2) == LITERAL_trusted
)) {
555 case LITERAL_certificate
:
557 match(LITERAL_certificate
);
567 match(LITERAL_anchor
);
572 throw antlr::NoViableAltException(LT(1), getFilename());
576 match(LITERAL_trusted
);
577 maker
.trustedAnchor();
579 else if ((LA(1) == LITERAL_certificate
|| LA(1) == LITERAL_cert
) && (_tokenSet_10
.member(LA(2)))) {
582 case LITERAL_certificate
:
584 match(LITERAL_certificate
);
594 throw antlr::NoViableAltException(LT(1), getFilename());
610 certslotspec(maker
, slot
);
613 case LITERAL_trusted
:
615 match(LITERAL_trusted
);
616 maker
.trustedAnchor(slot
);
621 throw antlr::NoViableAltException(LT(1), getFilename());
626 else if ((LA(1) == LITERAL_anchor
) && (_tokenSet_11
.member(LA(2)))) {
627 match(LITERAL_anchor
);
628 certslotspec(maker
, Requirement::anchorCert
);
631 throw antlr::NoViableAltException(LT(1), getFilename());
635 catch (antlr::RecognitionException
& ex
) {
637 recover(ex
,_tokenSet_9
);
641 void RequirementParser::infospec(
646 try { // for error handling
649 maker
.put(opInfoKeyField
); maker
.put(key
);
652 catch (antlr::RecognitionException
& ex
) {
654 recover(ex
,_tokenSet_9
);
658 void RequirementParser::entitlementspec(
663 try { // for error handling
664 match(LITERAL_entitlement
);
666 maker
.put(opEntitlementField
); maker
.put(key
);
669 catch (antlr::RecognitionException
& ex
) {
671 recover(ex
,_tokenSet_9
);
675 void RequirementParser::eql() {
677 try { // for error handling
700 throw antlr::NoViableAltException(LT(1), getFilename());
704 catch (antlr::RecognitionException
& ex
) {
706 recover(ex
,_tokenSet_12
);
710 string
RequirementParser::identifierString() {
712 antlr::RefToken dk
= antlr::nullToken
;
713 antlr::RefToken s
= antlr::nullToken
;
715 try { // for error handling
721 result
= dk
->getText();
728 result
= s
->getText();
733 throw antlr::NoViableAltException(LT(1), getFilename());
737 catch (antlr::RecognitionException
& ex
) {
739 recover(ex
,_tokenSet_9
);
744 void RequirementParser::hash(
747 antlr::RefToken hash
= antlr::nullToken
;
749 try { // for error handling
752 hashString(hash
->getText(), digest
);
754 catch (antlr::RecognitionException
& ex
) {
756 recover(ex
,_tokenSet_9
);
760 void RequirementParser::appleanchor(
764 try { // for error handling
766 case antlr::Token::EOF_TYPE
:
769 case LITERAL_designated
:
770 case LITERAL_library
:
779 maker
.put(opAppleAnchor
);
782 case LITERAL_generic
:
784 match(LITERAL_generic
);
785 maker
.put(opAppleGenericAnchor
);
792 name
=identifierString();
793 maker
.put(opNamedAnchor
); maker
.put(name
);
798 throw antlr::NoViableAltException(LT(1), getFilename());
802 catch (antlr::RecognitionException
& ex
) {
804 recover(ex
,_tokenSet_9
);
808 int32_t RequirementParser::certSlot() {
811 try { // for error handling
828 slot
= Requirement::leafCert
;
834 slot
= Requirement::anchorCert
;
839 throw antlr::NoViableAltException(LT(1), getFilename());
843 catch (antlr::RecognitionException
& ex
) {
845 recover(ex
,_tokenSet_13
);
850 void RequirementParser::certslotspec(
851 Maker
&maker
, int32_t slot
855 try { // for error handling
866 certificateDigest(digest
);
867 maker
.anchor(slot
, digest
);
873 certMatchOperation(maker
, slot
, key
);
879 throw antlr::NoViableAltException(LT(1), getFilename());
883 catch (antlr::RecognitionException
& ex
) {
885 recover(ex
,_tokenSet_9
);
889 void RequirementParser::empty() {
891 try { // for error handling
893 catch (antlr::RecognitionException
& ex
) {
895 recover(ex
,_tokenSet_14
);
899 void RequirementParser::certificateDigest(
903 try { // for error handling
916 if (CFRef
<CFDataRef
> certData
= cfLoadFile(path
))
917 hashOfCertificate(CFDataGetBytePtr(certData
), CFDataGetLength(certData
), digest
);
919 throw antlr::SemanticException(path
+ ": not found");
925 throw antlr::NoViableAltException(LT(1), getFilename());
929 catch (antlr::RecognitionException
& ex
) {
931 recover(ex
,_tokenSet_9
);
935 string
RequirementParser::bracketKey() {
938 try { // for error handling
943 catch (antlr::RecognitionException
& ex
) {
945 recover(ex
,_tokenSet_15
);
950 void RequirementParser::match_suffix(
954 try { // for error handling
956 case antlr::Token::EOF_TYPE
:
959 case LITERAL_designated
:
960 case LITERAL_library
:
974 match(LITERAL_exists
);
977 case antlr::Token::EOF_TYPE
:
980 case LITERAL_designated
:
981 case LITERAL_library
:
993 throw antlr::NoViableAltException(LT(1), getFilename());
997 maker
.put(matchExists
);
1000 case LITERAL_absent
:
1002 match(LITERAL_absent
);
1003 maker
.put(matchAbsent
);
1011 maker
.put(matchContains
); maker
.put(value
);
1015 if ((LA(1) == EQL
|| LA(1) == EQQL
) && (_tokenSet_16
.member(LA(2)))) {
1030 throw antlr::NoViableAltException(LT(1), getFilename());
1034 MatchOperation mop
= matchEqual
; string value
;
1040 mop
= matchEndsWith
;
1051 throw antlr::NoViableAltException(LT(1), getFilename());
1061 mop
= (mop
== matchEndsWith
) ? matchContains
: matchBeginsWith
;
1064 case antlr::Token::EOF_TYPE
:
1067 case LITERAL_designated
:
1068 case LITERAL_library
:
1069 case LITERAL_plugin
:
1080 throw antlr::NoViableAltException(LT(1), getFilename());
1084 maker
.put(mop
); maker
.put(value
);
1086 else if ((LA(1) == EQL
|| LA(1) == EQQL
) && (LA(2) == LITERAL_timestamp
)) {
1101 throw antlr::NoViableAltException(LT(1), getFilename());
1105 MatchOperation mop
= matchOn
; int64_t value
;
1107 maker
.put(mop
); maker
.put(value
);
1109 else if ((LA(1) == LESS
) && ((LA(2) >= HEXCONSTANT
&& LA(2) <= STRING
))) {
1113 maker
.put(matchLessThan
); maker
.put(value
);
1115 else if ((LA(1) == GT
) && ((LA(2) >= HEXCONSTANT
&& LA(2) <= STRING
))) {
1119 maker
.put(matchGreaterThan
); maker
.put(value
);
1121 else if ((LA(1) == LE
) && ((LA(2) >= HEXCONSTANT
&& LA(2) <= STRING
))) {
1125 maker
.put(matchLessEqual
); maker
.put(value
);
1127 else if ((LA(1) == GE
) && ((LA(2) >= HEXCONSTANT
&& LA(2) <= STRING
))) {
1131 maker
.put(matchGreaterEqual
); maker
.put(value
);
1133 else if ((LA(1) == LESS
) && (LA(2) == LITERAL_timestamp
)) {
1137 maker
.put(matchBefore
); maker
.put(value
);
1139 else if ((LA(1) == GT
) && (LA(2) == LITERAL_timestamp
)) {
1143 maker
.put(matchAfter
); maker
.put(value
);
1145 else if ((LA(1) == LE
) && (LA(2) == LITERAL_timestamp
)) {
1149 maker
.put(matchOnOrBefore
); maker
.put(value
);
1151 else if ((LA(1) == GE
) && (LA(2) == LITERAL_timestamp
)) {
1155 maker
.put(matchOnOrAfter
); maker
.put(value
);
1158 throw antlr::NoViableAltException(LT(1), getFilename());
1162 catch (antlr::RecognitionException
& ex
) {
1164 recover(ex
,_tokenSet_9
);
1168 string
RequirementParser::datavalue() {
1170 antlr::RefToken hex
= antlr::nullToken
;
1172 try { // for error handling
1177 result
=stringvalue();
1184 result
= hexString(hex
->getText());
1189 throw antlr::NoViableAltException(LT(1), getFilename());
1193 catch (antlr::RecognitionException
& ex
) {
1195 recover(ex
,_tokenSet_17
);
1200 int64_t RequirementParser::timestamp() {
1202 antlr::RefToken s
= antlr::nullToken
;
1204 try { // for error handling
1205 match(LITERAL_timestamp
);
1208 result
= (int64_t)SecAbsoluteTimeFromDateContent(ASN1_GENERALIZED_TIME
, (uint8_t const *)s
->getText().c_str(), s
->getText().length());
1210 catch (antlr::RecognitionException
& ex
) {
1212 recover(ex
,_tokenSet_9
);
1217 string
RequirementParser::stringvalue() {
1219 antlr::RefToken dk
= antlr::nullToken
;
1220 antlr::RefToken s
= antlr::nullToken
;
1222 try { // for error handling
1228 result
= dk
->getText();
1235 result
= s
->getText();
1240 throw antlr::NoViableAltException(LT(1), getFilename());
1244 catch (antlr::RecognitionException
& ex
) {
1246 recover(ex
,_tokenSet_18
);
1251 string
RequirementParser::pathstring() {
1253 antlr::RefToken dk
= antlr::nullToken
;
1254 antlr::RefToken s
= antlr::nullToken
;
1255 antlr::RefToken pn
= antlr::nullToken
;
1257 try { // for error handling
1263 result
= dk
->getText();
1270 result
= s
->getText();
1277 result
= pn
->getText();
1282 throw antlr::NoViableAltException(LT(1), getFilename());
1286 catch (antlr::RecognitionException
& ex
) {
1288 recover(ex
,_tokenSet_9
);
1293 void RequirementParser::initializeASTFactory( antlr::ASTFactory
& )
1296 const char* RequirementParser::tokenNames
[] = {
1300 "NULL_TREE_LOOKAHEAD",
1362 const unsigned long RequirementParser::_tokenSet_0_data_
[] = { 2UL, 0UL, 0UL, 0UL };
1364 const antlr::BitSet
RequirementParser::_tokenSet_0(_tokenSet_0_data_
,4);
1365 const unsigned long RequirementParser::_tokenSet_1_data_
[] = { 992UL, 1048576UL, 0UL, 0UL };
1366 // "guest" "host" "designated" "library" "plugin" INTEGER
1367 const antlr::BitSet
RequirementParser::_tokenSet_1(_tokenSet_1_data_
,4);
1368 const unsigned long RequirementParser::_tokenSet_2_data_
[] = { 16UL, 0UL, 0UL, 0UL };
1370 const antlr::BitSet
RequirementParser::_tokenSet_2(_tokenSet_2_data_
,4);
1371 const unsigned long RequirementParser::_tokenSet_3_data_
[] = { 994UL, 1048576UL, 0UL, 0UL };
1372 // EOF "guest" "host" "designated" "library" "plugin" INTEGER
1373 const antlr::BitSet
RequirementParser::_tokenSet_3(_tokenSet_3_data_
,4);
1374 const unsigned long RequirementParser::_tokenSet_4_data_
[] = { 536883186UL, 6194188UL, 0UL, 0UL };
1375 // EOF ARROW "guest" "host" "designated" "library" "plugin" "or" "and"
1376 // RPAREN "trusted" EQL EQQL LBRACK HASHCONSTANT DOTKEY STRING PATHNAME
1378 const antlr::BitSet
RequirementParser::_tokenSet_4(_tokenSet_4_data_
,4);
1379 const unsigned long RequirementParser::_tokenSet_5_data_
[] = { 9186UL, 5242880UL, 0UL, 0UL };
1380 // EOF "guest" "host" "designated" "library" "plugin" RPAREN INTEGER SEMI
1381 const antlr::BitSet
RequirementParser::_tokenSet_5(_tokenSet_5_data_
,4);
1382 const unsigned long RequirementParser::_tokenSet_6_data_
[] = { 994UL, 5242880UL, 0UL, 0UL };
1383 // EOF "guest" "host" "designated" "library" "plugin" INTEGER SEMI
1384 const antlr::BitSet
RequirementParser::_tokenSet_6(_tokenSet_6_data_
,4);
1385 const unsigned long RequirementParser::_tokenSet_7_data_
[] = { 10210UL, 5242880UL, 0UL, 0UL };
1386 // EOF "guest" "host" "designated" "library" "plugin" "or" RPAREN INTEGER
1388 const antlr::BitSet
RequirementParser::_tokenSet_7(_tokenSet_7_data_
,4);
1389 const unsigned long RequirementParser::_tokenSet_8_data_
[] = { 3657420800UL, 0UL, 0UL, 0UL };
1390 // LPAREN NOT "always" "true" "never" "false" "identifier" "cdhash" "platform"
1391 // "notarized" "legacy" "anchor" "certificate" "cert" "info" "entitlement"
1392 const antlr::BitSet
RequirementParser::_tokenSet_8(_tokenSet_8_data_
,4);
1393 const unsigned long RequirementParser::_tokenSet_9_data_
[] = { 12258UL, 5242880UL, 0UL, 0UL };
1394 // EOF "guest" "host" "designated" "library" "plugin" "or" "and" RPAREN
1396 const antlr::BitSet
RequirementParser::_tokenSet_9(_tokenSet_9_data_
,4);
1397 const unsigned long RequirementParser::_tokenSet_10_data_
[] = { 0UL, 1077248UL, 0UL, 0UL };
1398 // NEG "leaf" "root" INTEGER
1399 const antlr::BitSet
RequirementParser::_tokenSet_10(_tokenSet_10_data_
,4);
1400 const unsigned long RequirementParser::_tokenSet_11_data_
[] = { 0UL, 951308UL, 0UL, 0UL };
1401 // EQL EQQL LBRACK HASHCONSTANT DOTKEY STRING PATHNAME
1402 const antlr::BitSet
RequirementParser::_tokenSet_11(_tokenSet_11_data_
,4);
1403 const unsigned long RequirementParser::_tokenSet_12_data_
[] = { 0UL, 1998848UL, 0UL, 0UL };
1404 // HASHCONSTANT DOTKEY STRING PATHNAME INTEGER
1405 const antlr::BitSet
RequirementParser::_tokenSet_12(_tokenSet_12_data_
,4);
1406 const unsigned long RequirementParser::_tokenSet_13_data_
[] = { 536870912UL, 951308UL, 0UL, 0UL };
1407 // "trusted" EQL EQQL LBRACK HASHCONSTANT DOTKEY STRING PATHNAME
1408 const antlr::BitSet
RequirementParser::_tokenSet_13(_tokenSet_13_data_
,4);
1409 const unsigned long RequirementParser::_tokenSet_14_data_
[] = { 12258UL, 6193153UL, 0UL, 0UL };
1410 // EOF "guest" "host" "designated" "library" "plugin" "or" "and" RPAREN
1411 // "exists" HASHCONSTANT DOTKEY STRING PATHNAME INTEGER SEMI
1412 const antlr::BitSet
RequirementParser::_tokenSet_14(_tokenSet_14_data_
,4);
1413 const unsigned long RequirementParser::_tokenSet_15_data_
[] = { 12258UL, 5243887UL, 0UL, 0UL };
1414 // EOF "guest" "host" "designated" "library" "plugin" "or" "and" RPAREN
1415 // "exists" "absent" EQL EQQL SUBS LESS GT LE GE INTEGER SEMI
1416 const antlr::BitSet
RequirementParser::_tokenSet_15(_tokenSet_15_data_
,4);
1417 const unsigned long RequirementParser::_tokenSet_16_data_
[] = { 0UL, 458768UL, 0UL, 0UL };
1418 // STAR HEXCONSTANT DOTKEY STRING
1419 const antlr::BitSet
RequirementParser::_tokenSet_16(_tokenSet_16_data_
,4);
1420 const unsigned long RequirementParser::_tokenSet_17_data_
[] = { 12258UL, 5242896UL, 0UL, 0UL };
1421 // EOF "guest" "host" "designated" "library" "plugin" "or" "and" RPAREN
1422 // STAR INTEGER SEMI
1423 const antlr::BitSet
RequirementParser::_tokenSet_17(_tokenSet_17_data_
,4);
1424 const unsigned long RequirementParser::_tokenSet_18_data_
[] = { 12258UL, 5244944UL, 0UL, 0UL };
1425 // EOF "guest" "host" "designated" "library" "plugin" "or" "and" RPAREN
1426 // STAR RBRACK INTEGER SEMI
1427 const antlr::BitSet
RequirementParser::_tokenSet_18(_tokenSet_18_data_
,4);