summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGeorge Wangensteen <george.wangensteen@mongodb.com>2020-09-03 22:19:59 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-09-28 17:22:56 +0000
commit6aaf036460f2cda883129795374f4e388c3dcb04 (patch)
tree4bb147d7d4a9d4b1b99ccc36d5e885151de65b86 /src
parent5b46992843fd3643395bce807d269d751f10763d (diff)
downloadmongo-6aaf036460f2cda883129795374f4e388c3dcb04.tar.gz
SERVER-48869 implement agg date expression operators in grammar
Diffstat (limited to 'src')
-rw-r--r--src/mongo/db/cst/bson_lexer.cpp46
-rw-r--r--src/mongo/db/cst/bson_lexer.h5
-rw-r--r--src/mongo/db/cst/bson_lexer_test.cpp8
-rwxr-xr-xsrc/mongo/db/cst/cst_expression_test.cpp1037
-rw-r--r--src/mongo/db/cst/cst_pipeline_translation.cpp103
-rw-r--r--src/mongo/db/cst/cst_pipeline_translation_test.cpp379
-rw-r--r--src/mongo/db/cst/grammar.yy411
-rw-r--r--src/mongo/db/cst/key_fieldname.h28
-rw-r--r--src/mongo/db/cst/parser_gen.cpp5889
-rw-r--r--src/mongo/db/cst/parser_gen.hpp1634
-rw-r--r--src/mongo/db/pipeline/expression.h42
11 files changed, 6728 insertions, 2854 deletions
diff --git a/src/mongo/db/cst/bson_lexer.cpp b/src/mongo/db/cst/bson_lexer.cpp
index be0f7bd6ba2..317dd14e2ba 100644
--- a/src/mongo/db/cst/bson_lexer.cpp
+++ b/src/mongo/db/cst/bson_lexer.cpp
@@ -170,7 +170,32 @@ const StringMap<ParserGen::token_type> reservedKeyFieldnameLookup = {
{"$setUnion", ParserGen::token::SET_UNION},
{"timezone", ParserGen::token::ARG_TIMEZONE},
{"to", ParserGen::token::ARG_TO},
-};
+ {"minute", ParserGen::token::ARG_MINUTE},
+ {"second", ParserGen::token::ARG_SECOND},
+ {"millisecond", ParserGen::token::ARG_MILLISECOND},
+ {"day", ParserGen::token::ARG_DAY},
+ {"isoDayOfWeek", ParserGen::token::ARG_ISO_DAY_OF_WEEK},
+ {"isoWeek", ParserGen::token::ARG_ISO_WEEK},
+ {"isoWeekYear", ParserGen::token::ARG_ISO_WEEK_YEAR},
+ {"iso8601", ParserGen::token::ARG_ISO_8601},
+ {"month", ParserGen::token::ARG_MONTH},
+ {"year", ParserGen::token::ARG_YEAR},
+ {"hour", ParserGen::token::ARG_HOUR},
+ {"$dateFromParts", ParserGen::token::DATE_FROM_PARTS},
+ {"$dateToParts", ParserGen::token::DATE_TO_PARTS},
+ {"$dayOfMonth", ParserGen::token::DAY_OF_MONTH},
+ {"$dayOfWeek", ParserGen::token::DAY_OF_WEEK},
+ {"$dayOfYear", ParserGen::token::DAY_OF_YEAR},
+ {"$hour", ParserGen::token::HOUR},
+ {"$isoDayOfWeek", ParserGen::token::ISO_DAY_OF_WEEK},
+ {"$isoWeek", ParserGen::token::ISO_WEEK},
+ {"$isoWeekYear", ParserGen::token::ISO_WEEK_YEAR},
+ {"$millisecond", ParserGen::token::MILLISECOND},
+ {"$minute", ParserGen::token::MINUTE},
+ {"$month", ParserGen::token::MONTH},
+ {"$second", ParserGen::token::SECOND},
+ {"$week", ParserGen::token::WEEK},
+ {"$year", ParserGen::token::YEAR}};
// Mapping of reserved key values to BSON token. Any key which is not included in this map is
// assumed to be a user value.
@@ -204,14 +229,17 @@ void BSONLexer::sortObjTokens() {
};
auto currentPosition = _position;
- if (_tokens[currentPosition].type_get() != static_cast<int>(ParserGen::token::START_OBJECT)) {
+ // Ensure that we've just entered an object - i.e. that the previous token was a START_OBJECT.
+ // Otherwise, this function is a no-op.
+ if (currentPosition < 1 ||
+ _tokens[currentPosition - 1].type_get() !=
+ static_cast<int>(ParserGen::token::START_OBJECT)) {
return;
}
std::list<TokenElement> sortedTokenPairs;
- // Increment to get to the first token after the START_OBJECT. We will sort tokens until the
- // matching END_OBJECT is found.
- currentPosition++;
+ // We've just entered an object (i.e. the previous token was a start object). We will sort
+ // tokens until the matching END_OBJECT is found.
while (_tokens[currentPosition].type_get() != static_cast<int>(ParserGen::token::END_OBJECT)) {
invariant(size_t(currentPosition) < _tokens.size());
@@ -243,10 +271,10 @@ void BSONLexer::sortObjTokens() {
}
sortedTokenPairs.sort(TokenElementCompare());
- // _position is at the initial START_OBJECT, and currentPosition is at its matching
- // END_OBJECT. We need to flatten the sorted list of KV pairs to get the correct order of
- // tokens.
- auto replacePosition = _position + 1;
+ // _position is at the token immediately following the initial START_OBJECT, and currentPosition
+ // is at the matching END_OBJECT. We need to flatten the sorted list of KV pairs to get the
+ // correct order of tokens.
+ auto replacePosition = _position;
for (auto&& [key, rhsTokens] : sortedTokenPairs) {
_tokens[replacePosition].clear();
_tokens[replacePosition++].move(key);
diff --git a/src/mongo/db/cst/bson_lexer.h b/src/mongo/db/cst/bson_lexer.h
index 512f5cd7cfb..2bb1f0cf45c 100644
--- a/src/mongo/db/cst/bson_lexer.h
+++ b/src/mongo/db/cst/bson_lexer.h
@@ -51,8 +51,9 @@ public:
}
/**
- * Sorts the object that starts at the current position, based on the enum for each of the field
- * name tokens.
+ * Sorts the object that the lexer just entered (i.e., a START_OBJECT token was just emitted,
+ * and currentPosition is now one past the start of the object), based on the enum for each of
+ * the field name tokens.
*/
void sortObjTokens();
diff --git a/src/mongo/db/cst/bson_lexer_test.cpp b/src/mongo/db/cst/bson_lexer_test.cpp
index 6523e2f453a..e8d90b89360 100644
--- a/src/mongo/db/cst/bson_lexer_test.cpp
+++ b/src/mongo/db/cst/bson_lexer_test.cpp
@@ -94,11 +94,11 @@ TEST(BSONLexerTest, MidRuleActionToSortNestedObject) {
// Iterate until the first object.
ASSERT_EQ(ParserGen::token::START_PIPELINE, lexer.getNext().type_get());
ASSERT_EQ(ParserGen::token::START_ARRAY, lexer.getNext().type_get());
+ ASSERT_EQ(ParserGen::token::START_OBJECT, lexer.getNext().type_get());
// Kick the lexer to sort the object, which should move element 'coll' in front of 'pipeline'.
// Not that this only works because these are reserved keywords recognized by the lexer,
// arbitrary string field names with *not* get sorted.
lexer.sortObjTokens();
- ASSERT_EQ(ParserGen::token::START_OBJECT, lexer.getNext().type_get());
ASSERT_EQ(ParserGen::token::ARG_COLL, lexer.getNext().type_get());
ASSERT_EQ(ParserGen::token::STRING, lexer.getNext().type_get());
ASSERT_EQ(ParserGen::token::ARG_PIPELINE, lexer.getNext().type_get());
@@ -117,8 +117,8 @@ TEST(BSONLexerTest, MidRuleActionToSortDoesNotSortNestedObjects) {
ASSERT_EQ(ParserGen::token::START_ARRAY, lexer.getNext().type_get());
ASSERT_EQ(ParserGen::token::START_OBJECT, lexer.getNext().type_get());
ASSERT_EQ(ParserGen::token::STAGE_UNION_WITH, lexer.getNext().type_get());
- lexer.sortObjTokens();
ASSERT_EQ(ParserGen::token::START_OBJECT, lexer.getNext().type_get());
+ lexer.sortObjTokens();
ASSERT_EQ(ParserGen::token::ARG_COLL, lexer.getNext().type_get());
ASSERT_EQ(ParserGen::token::STRING, lexer.getNext().type_get()); // coll: 'outer'
ASSERT_EQ(ParserGen::token::ARG_PIPELINE,
@@ -147,8 +147,8 @@ TEST(BSONLexerTest, MultipleNestedObjectsAreReorderedCorrectly) {
ASSERT_EQ(ParserGen::token::START_ARRAY, lexer.getNext().type_get());
ASSERT_EQ(ParserGen::token::START_OBJECT, lexer.getNext().type_get());
ASSERT_EQ(ParserGen::token::STAGE_UNION_WITH, lexer.getNext().type_get());
- lexer.sortObjTokens();
ASSERT_EQ(ParserGen::token::START_OBJECT, lexer.getNext().type_get());
+ lexer.sortObjTokens();
ASSERT_EQ(ParserGen::token::ARG_COLL, lexer.getNext().type_get());
ASSERT_EQ(ParserGen::token::START_ARRAY, lexer.getNext().type_get());
ASSERT_EQ(ParserGen::token::START_OBJECT, lexer.getNext().type_get());
@@ -186,8 +186,8 @@ TEST(BSONLexerTest, MultiLevelBSONDoesntSortChildren) {
ASSERT_EQ(ParserGen::token::START_ARRAY, lexer.getNext().type_get());
ASSERT_EQ(ParserGen::token::START_OBJECT, lexer.getNext().type_get());
ASSERT_EQ(ParserGen::token::STAGE_UNION_WITH, lexer.getNext().type_get());
- lexer.sortObjTokens();
ASSERT_EQ(ParserGen::token::START_OBJECT, lexer.getNext().type_get());
+ lexer.sortObjTokens();
ASSERT_EQ(ParserGen::token::ARG_COLL, lexer.getNext().type_get());
ASSERT_EQ(ParserGen::token::STRING, lexer.getNext().type_get()); // coll: 'outer'
ASSERT_EQ(ParserGen::token::ARG_PIPELINE,
diff --git a/src/mongo/db/cst/cst_expression_test.cpp b/src/mongo/db/cst/cst_expression_test.cpp
index cdf16e622f8..26e721923f4 100755
--- a/src/mongo/db/cst/cst_expression_test.cpp
+++ b/src/mongo/db/cst/cst_expression_test.cpp
@@ -512,5 +512,1042 @@ TEST(CstExpressionTest, FailsToParseInvalidVarName) {
auto parseTree = ParserGen(lexer, &output);
ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
}
+
+TEST(CstExpressionTest, ParsesDateToParts) {
+ CNode output;
+ auto input = fromjson(
+ "{pipeline: [{$project: { "
+ "a: { $dateToParts: {date: '$date', 'timezone': 'America/New_York', 'iso8601': true}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(
+ stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname dateToParts>: { "
+ "<KeyFieldname dateArg>: \"<AggregationPath date>\", <KeyFieldname timezoneArg>: "
+ "\"<UserString America/New_York>\", "
+ "<KeyFieldname iso8601Arg>: \"<UserBoolean true>\" } } } }");
+}
+
+TEST(CstExpressionTest, ParsesDateFromParts) {
+ {
+ // Non-iso formatted version:
+ CNode output;
+ auto input = fromjson(
+ "{pipeline: [{$project: { "
+ "a: { $dateFromParts: {year: '$year', month: '$month', day: '$day',"
+ "hour: '$hour', minute: '$minute', second: '$second', millisecond:"
+ " '$millisecs', timezone: 'America/New_York'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "dateFromParts>: { "
+ "<KeyFieldname yearArg>: \"<AggregationPath year>\", <KeyFieldname monthArg>: "
+ "\"<AggregationPath month>\", "
+ "<KeyFieldname dayArg>: \"<AggregationPath day>\", <KeyFieldname hourArg>: "
+ "\"<AggregationPath hour>\", <KeyFieldname minuteArg>: "
+ "\"<AggregationPath minute>\", <KeyFieldname secondArg>: \"<AggregationPath "
+ "second>\", <KeyFieldname millisecondArg>: "
+ "\"<AggregationPath millisecs>\", <KeyFieldname timezoneArg>: \"<UserString "
+ "America/New_York>\" } } } "
+ "}");
+ }
+ {
+ // Iso formatted version:
+ CNode output;
+ auto input = fromjson(
+ "{pipeline: [{$project: { "
+ "a: { $dateFromParts: {isoWeekYear: '$year', isoWeek: '$isowk', isoDayOfWeek: '$day',"
+ "hour: '$hour', minute: '$minute', second: '$second', millisecond:"
+ " '$millisecs', timezone: 'America/New_York'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "dateFromParts>: { "
+ "<KeyFieldname isoWeekYearArg>: \"<AggregationPath year>\", <KeyFieldname "
+ "isoWeekArg>: \"<AggregationPath isowk>\", "
+ "<KeyFieldname isoDayOfWeekArg>: \"<AggregationPath day>\", <KeyFieldname "
+ "hourArg>: \"<AggregationPath hour>\", "
+ "<KeyFieldname minuteArg>: "
+ "\"<AggregationPath minute>\", <KeyFieldname secondArg>: \"<AggregationPath "
+ "second>\", <KeyFieldname millisecondArg>: "
+ "\"<AggregationPath millisecs>\", <KeyFieldname timezoneArg>: \"<UserString "
+ "America/New_York>\" } } } "
+ "}");
+ }
+}
+
+TEST(CstExpressionTest, ParsesDayOfDateExpressionsWithDocumentArgument) {
+ {
+ // $dayOfMonth
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $dayOfMonth: {date: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "dayOfMonth>: { <KeyFieldname dateArg>: \"<AggregationPath date>\", "
+ "<KeyFieldname timezoneArg>: \"<KeyValue absentKey>\" } } } }");
+ }
+ {
+ // $dayOfWeek
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $dayOfWeek: {date: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "dayOfWeek>: { <KeyFieldname dateArg>: \"<AggregationPath date>\", "
+ "<KeyFieldname timezoneArg>: \"<KeyValue absentKey>\" } } } }");
+ }
+ {
+ // $dayOfYear
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $dayOfYear: {date: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "dayOfYear>: { <KeyFieldname dateArg>: \"<AggregationPath date>\", "
+ "<KeyFieldname timezoneArg>: \"<KeyValue absentKey>\" } } } }");
+ }
+}
+
+TEST(CstExpressionTest, FailsToParseDayOfDateExpressionsWithInvalidDocumentArgument) {
+ {
+ // $dayOfMonth
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $dayOfMonth: {notDate: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+ {
+ // $dayOfWeek
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $dayOfWeek: {notDate: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+ {
+ // $dayOfYear
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $dayOfYear: {notDate: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesDayOfDateExpressionsWithExpressionArgument) {
+ {
+ // $dayOfMonth
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $dayOfMonth: '$date'}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "dayOfMonth>: \"<AggregationPath date>\" } } }");
+ }
+ {
+ // $dayOfWeek
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $dayOfWeek: '$date'}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "dayOfWeek>: \"<AggregationPath date>\" } } }");
+ }
+ {
+ // $dayOfYear
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $dayOfYear: '$date'}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "dayOfYear>: \"<AggregationPath date>\" } } }");
+ }
+}
+
+TEST(CstExpressionTest, ParsesDayOfMonthWithArrayArgument) {
+ // $dayOfMonth
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $dayOfMonth: ['$date']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "dayOfMonth>: [ \"<AggregationPath date>\" ] } } }");
+ }
+ // Ensure fails to parse with non-singleton array argument.
+ {
+ CNode output;
+ auto input =
+ fromjson("{pipeline: [{$project: { a: { $dayOfMonth: ['$date', '$timeZone']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+ // Ensure fails to parse with an empty array argument.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $dayOfMonth: []}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesDayOfWeekWithArrayArgument) {
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $dayOfWeek: ['$date']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "dayOfWeek>: [ \"<AggregationPath date>\" ] } } }");
+ }
+ // Ensure fails to parse with non-singleton array argument.
+ {
+ CNode output;
+ auto input =
+ fromjson("{pipeline: [{$project: { a: { $dayOfWeek: ['$date', '$timeZone']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+ // Ensure fails to parse with an empty array argument.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $dayOfWeek: []}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesDayOfYearWithArrayArgument) {
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $dayOfYear: ['$date']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "dayOfYear>: [ \"<AggregationPath date>\" ] } } }");
+ }
+ // Ensure fails to parse with non-singleton array argument.
+ {
+ CNode output;
+ auto input =
+ fromjson("{pipeline: [{$project: { a: { $dayOfYear: ['$date', '$timeZone']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+ // Ensure fails to parse with an empty array argument.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $dayOfYear: []}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesIsoDateExpressionsWithDocumentArgument) {
+ {
+ // $isoDayOfWeek
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $isoDayOfWeek: {date: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "isoDayOfWeek>: { <KeyFieldname dateArg>: \"<AggregationPath date>\", "
+ "<KeyFieldname timezoneArg>: \"<KeyValue absentKey>\" } } } }");
+ }
+ {
+ // $isoWeek
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $isoWeek: {date: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "isoWeek>: { <KeyFieldname dateArg>: \"<AggregationPath date>\", "
+ "<KeyFieldname timezoneArg>: \"<KeyValue absentKey>\" } } } }");
+ }
+ {
+ // $isoWeekYear
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $isoWeekYear: {date: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "isoWeekYear>: { <KeyFieldname dateArg>: \"<AggregationPath date>\", "
+ "<KeyFieldname timezoneArg>: \"<KeyValue absentKey>\" } } } }");
+ }
+}
+
+TEST(CstExpressionTest, FailsToParseIsoDateExpressionsWithInvalidDocumentArgument) {
+ {
+ // $isoDayOfWeek
+ CNode output;
+ auto input =
+ fromjson("{pipeline: [{$project: { a: { $isoDayOfWeek: {notDate: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+ {
+ // $isoWeek
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $isoWeek: {notDate: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+ {
+ // $isoWeekYear
+ CNode output;
+ auto input =
+ fromjson("{pipeline: [{$project: { a: { $isoWeekYear: {notDate: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesIsoDateExpressionsWithExpressionArgument) {
+ {
+ // $isoDayOfWeek
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $isoDayOfWeek: '$date'}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "isoDayOfWeek>: \"<AggregationPath date>\" } } }");
+ }
+ {
+ // $isoWeek
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $isoWeek: '$date'}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "isoWeek>: \"<AggregationPath date>\" } } }");
+ }
+ {
+ // $isoWeekYear
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $isoWeekYear: '$date'}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "isoWeekYear>: \"<AggregationPath date>\" } } }");
+ }
+}
+
+TEST(CstExpressionTest, ParsesIsoDayOfWeekWithArrayArgument) {
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $isoDayOfWeek: ['$date']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "isoDayOfWeek>: [ \"<AggregationPath date>\" ] } } }");
+ }
+ // Ensure fails to parse with non-singleton array argument.
+ {
+ CNode output;
+ auto input =
+ fromjson("{pipeline: [{$project: { a: { $isoDayOfWeek: ['$date', '$timeZone']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+ // Ensure fails to parse with an empty array argument.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $isoDayOfWeek: []}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesIsoWeekWithArrayArgument) {
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $isoWeek: ['$date']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "isoWeek>: [ \"<AggregationPath date>\" ] } } }");
+ }
+ // Ensure fails to parse with non-singleton array argument.
+ {
+ CNode output;
+ auto input =
+ fromjson("{pipeline: [{$project: { a: { $isoWeek: ['$date', '$timeZone']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+ // Ensure fails to parse with an empty array argument.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $isoWeek: []}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesIsoWeekYearWithArrayArgument) {
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $isoWeekYear: ['$date']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "isoWeekYear>: [ \"<AggregationPath date>\" ] } } }");
+ }
+ // Ensure fails to parse with non-singleton array argument.
+ {
+ CNode output;
+ auto input =
+ fromjson("{pipeline: [{$project: { a: { $isoWeekYear: ['$date', '$timeZone']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+ // Ensure fails to parse with an empty array argument.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $isoWeekYear: []}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesHourExpressionWithDocumentArgument) {
+ {
+ // $hour
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $hour: {date: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(
+ stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname hour>: { "
+ "<KeyFieldname dateArg>: \"<AggregationPath date>\", <KeyFieldname timezoneArg>: "
+ "\"<KeyValue absentKey>\" } } } }");
+ }
+ {
+ // Ensure fails to parse with invalid argument-document.
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $hour: {notDate: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesMillisecondExpressionWithDocumentArgument) {
+ {
+ // $millisecond
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $millisecond: {date: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "millisecond>: { <KeyFieldname dateArg>: \"<AggregationPath date>\", "
+ "<KeyFieldname timezoneArg>: \"<KeyValue absentKey>\" } } } }");
+ }
+ {
+ // Ensure fails to parse with invalid argument-document.
+ CNode output;
+ auto input =
+ fromjson("{pipeline: [{$project: { a: { $millisecond: {notDate: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesMinuteExpressionWithDocumentArgument) {
+ {
+ // $minute
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $minute: {date: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(
+ stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname minute>: { "
+ "<KeyFieldname dateArg>: \"<AggregationPath date>\", "
+ "<KeyFieldname timezoneArg>: \"<KeyValue absentKey>\" } } } }");
+ }
+ {
+ // Ensure fails to parse with invalid argument-document.
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $minute: {notDate: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesMonthExpressionWithDocumentArgument) {
+ {
+ // $month
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $month: {date: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(
+ stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname month>: { "
+ "<KeyFieldname dateArg>: \"<AggregationPath date>\", "
+ "<KeyFieldname timezoneArg>: \"<KeyValue absentKey>\" } } } }");
+ }
+ {
+ // Ensure fails to parse with invalid argument-document.
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $month: {notDate: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesSecondExpressionWithDocumentArgument) {
+ {
+ // $second
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $second: {date: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(
+ stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname second>: { "
+ "<KeyFieldname dateArg>: \"<AggregationPath date>\", "
+ "<KeyFieldname timezoneArg>: \"<KeyValue absentKey>\" } } } }");
+ }
+ {
+ // Ensure fails to parse with invalid argument-document.
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $second: {notDate: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesWeekExpressionWithDocumentArgument) {
+ {
+ // $week
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $week: {date: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(
+ stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname week>: { "
+ "<KeyFieldname dateArg>: \"<AggregationPath date>\", <KeyFieldname timezoneArg>: "
+ "\"<KeyValue absentKey>\" } } } }");
+ }
+ {
+ // Ensure fails to parse with invalid argument-document.
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $week: {notDate: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesYearExpressionWithDocumentArgument) {
+ {
+ // $year
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $year: {date: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(
+ stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname year>: { "
+ "<KeyFieldname dateArg>: \"<AggregationPath date>\", <KeyFieldname timezoneArg>: "
+ "\"<KeyValue absentKey>\" } } } }");
+ }
+ {
+ // Ensure fails to parse with invalid argument-document.
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $year: {notDate: '$date'}}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesHourExpressionWithExpressionArgument) {
+ // Test with argument as-is.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $hour: '$date'}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname hour>: "
+ "\"<AggregationPath date>\" } } }");
+ }
+ // Test with argument wrapped in array.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $hour: ['$date']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname hour>: "
+ "[ \"<AggregationPath date>\" ] } } }");
+ }
+ // Ensure fails to parse with a non-singleton array argument.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $hour: ['$date', '$timezone']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+ // Ensure fails to parse with an empty array argument.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $hour: []}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesMillisecondExpressionWithExpressionArgument) {
+ // Test with argument as-is.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $millisecond: '$date'}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "millisecond>: \"<AggregationPath date>\" } } }");
+ }
+ // Test with argument wrapped in array.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $millisecond: ['$date']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "millisecond>: [ \"<AggregationPath date>\" ] } } }");
+ }
+ // Ensure fails to parse with a non-singleton array argument.
+ {
+ CNode output;
+ auto input =
+ fromjson("{pipeline: [{$project: { a: { $millisecond: ['$date', '$timezone']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+ // Ensure fails to parse with an empty array argument.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $millisecond: []}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesMinuteExpressionWithExpressionArgument) {
+ // Test with argument as-is.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $minute: '$date'}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "minute>: \"<AggregationPath date>\" } } }");
+ }
+ // Test with argument wrapped in array.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $minute: ['$date']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "minute>: [ \"<AggregationPath date>\" ] } } }");
+ }
+ // Ensure fails to parse with a non-singleton array argument.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $minute: ['$date', '$timezone']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+ // Ensure fails to parse with an empty array argument.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $minute: []}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesMonthExpressionWithExpressionArgument) {
+ // Test with argument as-is.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $month: '$date'}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "month>: \"<AggregationPath date>\" } } }");
+ }
+ // Test with argument wrapped in array.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $month: ['$date']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "month>: [ \"<AggregationPath date>\" ] } } }");
+ }
+ // Ensure fails to parse with a non-singleton array argument.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $month: ['$date', '$timezone']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+ // Ensure fails to parse with an empty array argument.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $month: []}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesSecondExpressionWithExpressionArgument) {
+ // Test with argument as-is.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $second: '$date'}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "second>: \"<AggregationPath date>\" } } }");
+ }
+ // Test with argument wrapped in array.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $second: ['$date']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname "
+ "second>: [ \"<AggregationPath date>\" ] } } }");
+ }
+ // Ensure fails to parse with a non-singleton array argument.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $second: ['$date', '$timezone']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+ // Ensure fails to parse with an empty array argument.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $second: []}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesWeekExpressionWithExpressionArgument) {
+ // Test with argument as-is.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $week: '$date'}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname week>: "
+ "\"<AggregationPath date>\" } } }");
+ }
+ // Test with argument wrapped in array.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $week: ['$date']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname week>: "
+ "[ \"<AggregationPath date>\" ] } } }");
+ }
+ // Ensure fails to parse with a non-singleton array argument.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $week: ['$date', '$timezone']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+ // Ensure fails to parse with an empty array argument.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $week: []}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
+
+TEST(CstExpressionTest, ParsesYearExpressionWithExpressionArgument) {
+ // Test with argument as-is.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $year: '$date'}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname year>: "
+ "\"<AggregationPath date>\" } } }");
+ }
+ // Test with argument wrapped in array.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $year: ['$date']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_EQ(0, parseTree.parse());
+ auto stages = stdx::get<CNode::ArrayChildren>(output.payload);
+ ASSERT_EQ(1, stages.size());
+ ASSERT(KeyFieldname::projectInclusion == stages[0].firstKeyFieldname());
+ ASSERT_EQ(stages[0].toBson().toString(),
+ "{ <KeyFieldname projectInclusion>: { <ProjectionPath a>: { <KeyFieldname year>: "
+ "[ \"<AggregationPath date>\" ] } } }");
+ }
+ // Ensure fails to parse with a non-singleton array argument.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $year: ['$date', '$timezone']}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+ // Ensure fails to parse with an empty array argument.
+ {
+ CNode output;
+ auto input = fromjson("{pipeline: [{$project: { a: { $year: []}}}]}");
+ BSONLexer lexer(input["pipeline"].embeddedObject(), ParserGen::token::START_PIPELINE);
+ auto parseTree = ParserGen(lexer, &output);
+ ASSERT_THROWS_CODE(parseTree.parse(), AssertionException, ErrorCodes::FailedToParse);
+ }
+}
} // namespace
} // namespace mongo
diff --git a/src/mongo/db/cst/cst_pipeline_translation.cpp b/src/mongo/db/cst/cst_pipeline_translation.cpp
index 48fd6d546fc..5c46bef94c1 100644
--- a/src/mongo/db/cst/cst_pipeline_translation.cpp
+++ b/src/mongo/db/cst/cst_pipeline_translation.cpp
@@ -485,7 +485,108 @@ boost::intrusive_ptr<Expression> translateFunctionObject(
return make_intrusive<ExpressionDegreesToRadians>(expCtx.get(), std::move(expressions));
case KeyFieldname::radiansToDegrees:
return make_intrusive<ExpressionRadiansToDegrees>(expCtx.get(), std::move(expressions));
-
+ case KeyFieldname::dateToParts:
+ dassert(verifyFieldnames(
+ {KeyFieldname::dateArg, KeyFieldname::timezoneArg, KeyFieldname::iso8601Arg},
+ object[0].second.objectChildren()));
+ return make_intrusive<ExpressionDateToParts>(expCtx.get(),
+ std::move(expressions[0]),
+ std::move(expressions[1]),
+ std::move(expressions[2]));
+ case KeyFieldname::dateFromParts:
+ if (stdx::get<KeyFieldname>(object[0].second.objectChildren().front().first) ==
+ KeyFieldname::yearArg) {
+ return make_intrusive<ExpressionDateFromParts>(expCtx.get(),
+ std::move(expressions[0]),
+ std::move(expressions[1]),
+ std::move(expressions[2]),
+ std::move(expressions[3]),
+ std::move(expressions[4]),
+ std::move(expressions[5]),
+ std::move(expressions[6]),
+ nullptr,
+ nullptr,
+ nullptr,
+ std::move(expressions[7]));
+ } else {
+ return make_intrusive<ExpressionDateFromParts>(expCtx.get(),
+ nullptr,
+ nullptr,
+ nullptr,
+ std::move(expressions[3]),
+ std::move(expressions[4]),
+ std::move(expressions[5]),
+ std::move(expressions[6]),
+ std::move(expressions[0]),
+ std::move(expressions[1]),
+ std::move(expressions[2]),
+ std::move(expressions[7]));
+ }
+ case KeyFieldname::dayOfMonth:
+ return make_intrusive<ExpressionDayOfMonth>(
+ expCtx.get(),
+ std::move(expressions[0]),
+ (expressions.size() == 2) ? std::move(expressions[1]) : nullptr);
+ case KeyFieldname::dayOfWeek:
+ return make_intrusive<ExpressionDayOfWeek>(
+ expCtx.get(),
+ std::move(expressions[0]),
+ (expressions.size() == 2) ? std::move(expressions[1]) : nullptr);
+ case KeyFieldname::dayOfYear:
+ return make_intrusive<ExpressionDayOfYear>(
+ expCtx.get(),
+ std::move(expressions[0]),
+ (expressions.size() == 2) ? std::move(expressions[1]) : nullptr);
+ case KeyFieldname::hour:
+ return make_intrusive<ExpressionHour>(
+ expCtx.get(),
+ std::move(expressions[0]),
+ (expressions.size() == 2) ? std::move(expressions[1]) : nullptr);
+ case KeyFieldname::isoDayOfWeek:
+ return make_intrusive<ExpressionIsoDayOfWeek>(
+ expCtx.get(),
+ std::move(expressions[0]),
+ (expressions.size() == 2) ? std::move(expressions[1]) : nullptr);
+ case KeyFieldname::isoWeek:
+ return make_intrusive<ExpressionIsoWeek>(
+ expCtx.get(),
+ std::move(expressions[0]),
+ (expressions.size() == 2) ? std::move(expressions[1]) : nullptr);
+ case KeyFieldname::isoWeekYear:
+ return make_intrusive<ExpressionIsoWeekYear>(
+ expCtx.get(),
+ std::move(expressions[0]),
+ (expressions.size() == 2) ? std::move(expressions[1]) : nullptr);
+ case KeyFieldname::minute:
+ return make_intrusive<ExpressionMinute>(
+ expCtx.get(),
+ std::move(expressions[0]),
+ (expressions.size() == 2) ? std::move(expressions[1]) : nullptr);
+ case KeyFieldname::millisecond:
+ return make_intrusive<ExpressionMillisecond>(
+ expCtx.get(),
+ std::move(expressions[0]),
+ (expressions.size() == 2) ? std::move(expressions[1]) : nullptr);
+ case KeyFieldname::month:
+ return make_intrusive<ExpressionMonth>(
+ expCtx.get(),
+ std::move(expressions[0]),
+ (expressions.size() == 2) ? std::move(expressions[1]) : nullptr);
+ case KeyFieldname::second:
+ return make_intrusive<ExpressionSecond>(
+ expCtx.get(),
+ std::move(expressions[0]),
+ (expressions.size() == 2) ? std::move(expressions[1]) : nullptr);
+ case KeyFieldname::week:
+ return make_intrusive<ExpressionWeek>(
+ expCtx.get(),
+ std::move(expressions[0]),
+ (expressions.size() == 2) ? std::move(expressions[1]) : nullptr);
+ case KeyFieldname::year:
+ return make_intrusive<ExpressionYear>(
+ expCtx.get(),
+ std::move(expressions[0]),
+ (expressions.size() == 2) ? std::move(expressions[1]) : nullptr);
default:
MONGO_UNREACHABLE;
}
diff --git a/src/mongo/db/cst/cst_pipeline_translation_test.cpp b/src/mongo/db/cst/cst_pipeline_translation_test.cpp
index 521aa93b73b..73ae02d8f35 100644
--- a/src/mongo/db/cst/cst_pipeline_translation_test.cpp
+++ b/src/mongo/db/cst/cst_pipeline_translation_test.cpp
@@ -1505,5 +1505,384 @@ TEST(CstPipelineTranslationTest, SinArrayTranslationTest) {
ASSERT_TRUE(ValueComparator().evaluate(Value(fromjson("{$sin: [{$const: 0.927}]}")) ==
expr->serialize(false)));
}
+
+TEST(CstPipelineTranslationTest, TranslatesDateToPartsExpression) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateToParts,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, CNode{AggregationPath{makeVector<std::string>("date")}}},
+ {KeyFieldname::timezoneArg, CNode{UserString{"America/New_York"}}},
+ {KeyFieldname::iso8601Arg, CNode{UserBoolean{false}}},
+ }}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(fromjson("{$dateToParts: {date: \"$date\", timezone: "
+ "{$const: \"America/New_York\"}, iso8601: {$const: false}}}")) ==
+ expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesDateFromPartsExpressionNonIso) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateFromParts,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::yearArg, CNode{AggregationPath{makeVector<std::string>("year")}}},
+ {KeyFieldname::monthArg, CNode{AggregationPath{makeVector<std::string>("month")}}},
+ {KeyFieldname::dayArg, CNode{AggregationPath{makeVector<std::string>("day")}}},
+ {KeyFieldname::hourArg, CNode{AggregationPath{makeVector<std::string>("hour")}}},
+ {KeyFieldname::minuteArg, CNode{AggregationPath{makeVector<std::string>("minute")}}},
+ {KeyFieldname::secondArg, CNode{AggregationPath{makeVector<std::string>("second")}}},
+ {KeyFieldname::millisecondArg,
+ CNode{AggregationPath{makeVector<std::string>("millisecond")}}},
+ {KeyFieldname::timezoneArg, CNode{UserString{"America/New_York"}}}}}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(fromjson("{$dateFromParts: {year: \"$year\", month: \"$month\", day: \"$day\", "
+ "hour: \"$hour\", minute: \"$minute\", second: \"$second\","
+ "millisecond: \"$millisecond\", timezone: "
+ "{$const: \"America/New_York\"}}}")) == expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesDateFromPartsExpressionIso) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateFromParts,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::isoWeekYearArg,
+ CNode{AggregationPath{makeVector<std::string>("isoWeekYear")}}},
+ {KeyFieldname::isoWeekArg, CNode{AggregationPath{makeVector<std::string>("isoWeek")}}},
+ {KeyFieldname::isoDayOfWeekArg,
+ CNode{AggregationPath{makeVector<std::string>("isoDayOfWeek")}}},
+ {KeyFieldname::hourArg, CNode{AggregationPath{makeVector<std::string>("hour")}}},
+ {KeyFieldname::minuteArg, CNode{AggregationPath{makeVector<std::string>("minute")}}},
+ {KeyFieldname::secondArg, CNode{AggregationPath{makeVector<std::string>("second")}}},
+ {KeyFieldname::millisecondArg,
+ CNode{AggregationPath{makeVector<std::string>("millisecond")}}},
+ {KeyFieldname::timezoneArg, CNode{UserString{"America/New_York"}}}}}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(fromjson("{$dateFromParts: {hour: \"$hour\", minute: \"$minute\","
+ "second: \"$second\", millisecond: \"$millisecond\","
+ "isoWeekYear: \"$isoWeekYear\", isoWeek: \"$isoWeek\","
+ "isoDayOfWeek: \"$isoDayOfWeek\", timezone: "
+ "{$const: \"America/New_York\"}}}")) == expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesDayOfMonthExpressionArgsDoc) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dayOfMonth,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, CNode{AggregationPath{makeVector<std::string>("date")}}},
+ {KeyFieldname::timezoneArg, CNode{UserString{"America/New_York"}}},
+ }}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(fromjson("{$dayOfMonth: {date: \"$date\", timezone: "
+ "{$const: \"America/New_York\"}}}")) == expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesDayOfMonthExpressionArgsExpr) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dayOfMonth, CNode{UserDate{Date_t::fromMillisSinceEpoch(12345678)}}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(BSON("$dayOfMonth" << BSON(
+ "date" << BSON("$const" << Date_t::fromMillisSinceEpoch(12345678))))) ==
+ expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesDayOfWeekExpressionArgsDoc) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dayOfWeek,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, CNode{AggregationPath{makeVector<std::string>("date")}}},
+ {KeyFieldname::timezoneArg, CNode{UserString{"America/New_York"}}},
+ }}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(fromjson("{$dayOfWeek: {date: \"$date\", timezone: "
+ "{$const: \"America/New_York\"}}}")) == expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesDayOfWeekExpressionArgsExpr) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dayOfWeek, CNode{UserDate{Date_t::fromMillisSinceEpoch(12345678)}}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(BSON("$dayOfWeek" << BSON("date" << BSON("$const" << Date_t::fromMillisSinceEpoch(
+ 12345678))))) == expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesDayOfYearExpressionArgsDoc) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dayOfYear,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, CNode{AggregationPath{makeVector<std::string>("date")}}},
+ {KeyFieldname::timezoneArg, CNode{UserString{"America/New_York"}}},
+ }}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(fromjson("{$dayOfYear: {date: \"$date\", timezone: "
+ "{$const: \"America/New_York\"}}}")) == expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesDayOfYearExpressionArgsExpr) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dayOfYear, CNode{UserDate{Date_t::fromMillisSinceEpoch(12345678)}}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(BSON("$dayOfYear" << BSON("date" << BSON("$const" << Date_t::fromMillisSinceEpoch(
+ 12345678))))) == expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesHourExpressionArgsDoc) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::hour,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, CNode{AggregationPath{makeVector<std::string>("date")}}},
+ {KeyFieldname::timezoneArg, CNode{UserString{"America/New_York"}}},
+ }}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(Value(fromjson("{$hour: {date: \"$date\", timezone: "
+ "{$const: \"America/New_York\"}}}")) ==
+ expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesHourExpressionArgsExpr) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::hour, CNode{UserDate{Date_t::fromMillisSinceEpoch(12345678)}}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(BSON("$hour" << BSON("date" << BSON("$const" << Date_t::fromMillisSinceEpoch(
+ 12345678))))) == expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesIsoDayOfWeekExpressionArgsDoc) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::isoDayOfWeek,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, CNode{AggregationPath{makeVector<std::string>("date")}}},
+ {KeyFieldname::timezoneArg, CNode{UserString{"America/New_York"}}},
+ }}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(fromjson("{$isoDayOfWeek: {date: \"$date\", timezone: "
+ "{$const: \"America/New_York\"}}}")) == expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesIsoDayOfWeekExpressionArgsExpr) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::isoDayOfWeek, CNode{UserDate{Date_t::fromMillisSinceEpoch(12345678)}}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(BSON("$isoDayOfWeek"
+ << BSON("date" << BSON("$const" << Date_t::fromMillisSinceEpoch(12345678))))) ==
+ expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesIsoWeekExpressionArgsDoc) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::isoWeek,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, CNode{AggregationPath{makeVector<std::string>("date")}}},
+ {KeyFieldname::timezoneArg, CNode{UserString{"America/New_York"}}},
+ }}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(Value(fromjson("{$isoWeek: {date: \"$date\", timezone: "
+ "{$const: \"America/New_York\"}}}")) ==
+ expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesIsoWeekExpressionArgsExpr) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::isoWeek, CNode{UserDate{Date_t::fromMillisSinceEpoch(12345678)}}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(BSON("$isoWeek" << BSON("date" << BSON("$const" << Date_t::fromMillisSinceEpoch(
+ 12345678))))) == expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesIsoWeekYearExpressionArgsDoc) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::isoWeekYear,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, CNode{AggregationPath{makeVector<std::string>("date")}}},
+ {KeyFieldname::timezoneArg, CNode{UserString{"America/New_York"}}},
+ }}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(fromjson("{$isoWeekYear: {date: \"$date\", timezone: "
+ "{$const: \"America/New_York\"}}}")) == expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesIsoWeekYearExpressionArgsExpr) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::isoWeekYear, CNode{UserDate{Date_t::fromMillisSinceEpoch(12345678)}}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(BSON("$isoWeekYear" << BSON(
+ "date" << BSON("$const" << Date_t::fromMillisSinceEpoch(12345678))))) ==
+ expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesMillisecondExpressionArgsDoc) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::millisecond,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, CNode{AggregationPath{makeVector<std::string>("date")}}},
+ {KeyFieldname::timezoneArg, CNode{UserString{"America/New_York"}}},
+ }}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(fromjson("{$millisecond: {date: \"$date\", timezone: "
+ "{$const: \"America/New_York\"}}}")) == expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesMillisecondExpressionArgsExpr) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::millisecond, CNode{UserDate{Date_t::fromMillisSinceEpoch(12345678)}}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(BSON("$millisecond" << BSON(
+ "date" << BSON("$const" << Date_t::fromMillisSinceEpoch(12345678))))) ==
+ expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesMinuteExpressionArgsDoc) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::minute,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, CNode{AggregationPath{makeVector<std::string>("date")}}},
+ {KeyFieldname::timezoneArg, CNode{UserString{"America/New_York"}}},
+ }}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(Value(fromjson("{$minute: {date: \"$date\", timezone: "
+ "{$const: \"America/New_York\"}}}")) ==
+ expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesMinuteExpressionArgsExpr) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::minute, CNode{UserDate{Date_t::fromMillisSinceEpoch(12345678)}}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(BSON("$minute" << BSON("date" << BSON("$const" << Date_t::fromMillisSinceEpoch(
+ 12345678))))) == expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesMonthExpressionArgsDoc) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::month,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, CNode{AggregationPath{makeVector<std::string>("date")}}},
+ {KeyFieldname::timezoneArg, CNode{UserString{"America/New_York"}}},
+ }}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(Value(fromjson("{$month: {date: \"$date\", timezone: "
+ "{$const: \"America/New_York\"}}}")) ==
+ expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesMonthExpressionArgsExpr) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::month, CNode{UserDate{Date_t::fromMillisSinceEpoch(12345678)}}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(BSON("$month" << BSON("date" << BSON("$const" << Date_t::fromMillisSinceEpoch(
+ 12345678))))) == expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesSecondExpressionArgsDoc) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::second,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, CNode{AggregationPath{makeVector<std::string>("date")}}},
+ {KeyFieldname::timezoneArg, CNode{UserString{"America/New_York"}}},
+ }}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(Value(fromjson("{$second: {date: \"$date\", timezone: "
+ "{$const: \"America/New_York\"}}}")) ==
+ expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesSecondExpressionArgsExpr) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::second, CNode{UserDate{Date_t::fromMillisSinceEpoch(12345678)}}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(BSON("$second" << BSON("date" << BSON("$const" << Date_t::fromMillisSinceEpoch(
+ 12345678))))) == expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesWeekExpressionArgsDoc) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::week,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, CNode{AggregationPath{makeVector<std::string>("date")}}},
+ {KeyFieldname::timezoneArg, CNode{UserString{"America/New_York"}}},
+ }}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(Value(fromjson("{$week: {date: \"$date\", timezone: "
+ "{$const: \"America/New_York\"}}}")) ==
+ expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesWeekExpressionArgsExpr) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::week, CNode{UserDate{Date_t::fromMillisSinceEpoch(12345678)}}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(BSON("$week" << BSON("date" << BSON("$const" << Date_t::fromMillisSinceEpoch(
+ 12345678))))) == expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesYearExpressionArgsDoc) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::year,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, CNode{AggregationPath{makeVector<std::string>("date")}}},
+ {KeyFieldname::timezoneArg, CNode{UserString{"America/New_York"}}},
+ }}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(Value(fromjson("{$year: {date: \"$date\", timezone: "
+ "{$const: \"America/New_York\"}}}")) ==
+ expr->serialize(false)))
+ << expr->serialize(false);
+}
+
+TEST(CstPipelineTranslationTest, TranslatesYearExpressionArgsExpr) {
+ const auto cst = CNode{CNode::ObjectChildren{
+ {KeyFieldname::year, CNode{UserDate{Date_t::fromMillisSinceEpoch(12345678)}}}}};
+ auto expr = cst_pipeline_translation::translateExpression(cst, getExpCtx());
+ ASSERT_TRUE(ValueComparator().evaluate(
+ Value(BSON("$year" << BSON("date" << BSON("$const" << Date_t::fromMillisSinceEpoch(
+ 12345678))))) == expr->serialize(false)))
+ << expr->serialize(false);
+}
} // namespace
} // namespace mongo
diff --git a/src/mongo/db/cst/grammar.yy b/src/mongo/db/cst/grammar.yy
index 26e9fe90a85..1d4cd14b20f 100644
--- a/src/mongo/db/cst/grammar.yy
+++ b/src/mongo/db/cst/grammar.yy
@@ -130,21 +130,33 @@
ARG_COLL "coll argument"
ARG_DATE "date argument"
ARG_DATE_STRING "dateString argument"
+ ARG_DAY "day argument"
+ ARG_FILTER "filter"
ARG_FIND "find argument"
ARG_FORMAT "format argument"
+ ARG_HOUR "hour argument"
ARG_INPUT "input argument"
+ ARG_ISO_8601 "ISO 8601 argument"
+ ARG_ISO_DAY_OF_WEEK "ISO day of week argument"
+ ARG_ISO_WEEK "ISO week argument"
+ ARG_ISO_WEEK_YEAR "ISO week year argument"
+ ARG_MILLISECOND "millisecond argument"
+ ARG_MINUTE "minute argument"
+ ARG_MONTH "month argument"
ARG_ON_ERROR "onError argument"
ARG_ON_NULL "onNull argument"
ARG_OPTIONS "options argument"
ARG_PIPELINE "pipeline argument"
ARG_REGEX "regex argument"
ARG_REPLACEMENT "replacement argument"
+ ARG_SECOND "second argument"
ARG_SIZE "size argument"
ARG_TIMEZONE "timezone argument"
ARG_TO "to argument"
ASIN
ASINH
ATAN
+ ARG_YEAR "year argument"
ATAN2
ATANH
BOOL_FALSE "false"
@@ -157,8 +169,13 @@
CONVERT
COS
COSH
+ DATE_FROM_PARTS
DATE_FROM_STRING
+ DATE_TO_PARTS
DATE_TO_STRING
+ DAY_OF_MONTH
+ DAY_OF_WEEK
+ DAY_OF_YEAR
DECIMAL_NEGATIVE_ONE "-1 (decimal)"
DECIMAL_ONE "1 (decimal)"
DECIMAL_ZERO "zero (decimal)"
@@ -177,6 +194,7 @@
GEO_NEAR_POINT "geoNearPoint"
GT
GTE
+ HOUR
ID
INDEX_OF_BYTES
INDEX_OF_CP
@@ -184,6 +202,9 @@
INT_NEGATIVE_ONE "-1 (int)"
INT_ONE "1 (int)"
INT_ZERO "zero (int)"
+ ISO_DAY_OF_WEEK
+ ISO_WEEK
+ ISO_WEEK_YEAR
LITERAL
LN
LOG
@@ -195,7 +216,10 @@
LTE
LTRIM
META
+ MILLISECOND
+ MINUTE
MOD
+ MONTH
MULTIPLY
NE
NOR
@@ -214,6 +238,7 @@
RTRIM
SEARCH_HIGHLIGHTS "searchHighlights"
SEARCH_SCORE "searchScore"
+ SECOND
SET_DIFFERENCE "setDifference"
SET_EQUALS "setEquals"
SET_INTERSECTION "setIntersection"
@@ -256,6 +281,8 @@
TRIM
TRUNC
TYPE
+ WEEK
+ YEAR
END_OF_FILE 0 "EOF"
;
@@ -317,11 +344,15 @@
%nterm <CNode> regexMatch regexArgs replaceOne replaceAll rtrim split strLenBytes strLenCP
%nterm <CNode> strcasecmp substr substrBytes substrCP toLower toUpper trim
%nterm <CNode> compExprs cmp eq gt gte lt lte ne
+%nterm <CNode> dateExps dateFromParts dateToParts dayOfMonth dayOfWeek dayOfYear hour
+%nterm <CNode> isoDayOfWeek isoWeek isoWeekYear millisecond minute month second week year
%nterm <CNode> typeExpression convert toBool toDate toDecimal toDouble toInt toLong
%nterm <CNode> toObjectId toString type
%nterm <CNode> abs ceil divide exponent floor ln log logten mod multiply pow round sqrt subtract trunc
%nterm <std::pair<CNode::Fieldname, CNode>> onErrorArg onNullArg
%nterm <std::pair<CNode::Fieldname, CNode>> formatArg timezoneArg charsArg optionsArg
+%nterm <std::pair<CNode::Fieldname, CNode>> hourArg minuteArg secondArg millisecondArg dayArg
+%nterm <std::pair<CNode::Fieldname, CNode>> isoWeekArg iso8601Arg monthArg isoDayOfWeekArg
%nterm <std::vector<CNode>> expressions values exprZeroToTwo
%nterm <CNode> setExpression allElementsTrue anyElementTrue setDifference setEquals
%nterm <CNode> setIntersection setIsSubset setUnion
@@ -329,7 +360,7 @@
%nterm <CNode> trig sin cos tan sinh cosh tanh asin acos atan asinh acosh atanh atan2
%nterm <CNode> degreesToRadians radiansToDegrees
%nterm <CNode> nonArrayExpression nonArrayCompoundExpression nonArrayNonObjCompoundExpression
-%nterm <CNode> expressionSingletonArray singleArgExpression
+%nterm <CNode> expressionSingletonArray singleArgExpression nonArrayNonObjExpression
// Match expressions.
%nterm <CNode> match predicates compoundMatchExprs predValue additionalExprs
%nterm <std::pair<CNode::Fieldname, CNode>> predicate logicalExpr operatorExpression notExpr
@@ -379,7 +410,7 @@ stageList:
// Special rule to hint to the lexer that the next set of tokens should be sorted. Note that the
// sort order is not lexicographical, but rather based on the enum generated from the %token list
// above.
-START_ORDERED_OBJECT: { lexer.sortObjTokens(); } START_OBJECT;
+START_ORDERED_OBJECT: START_OBJECT { lexer.sortObjTokens(); };
stage:
inhibitOptimization | unionWith | skip | limit | project | sample
@@ -858,6 +889,39 @@ arg:
| ARG_REPLACEMENT {
$$ = "replacement";
}
+ | ARG_HOUR {
+ $$ = UserFieldname{"hour"};
+ }
+ | ARG_YEAR {
+ $$ = UserFieldname{"year"};
+ }
+ | ARG_MINUTE {
+ $$ = UserFieldname{"minute"};
+ }
+ | ARG_SECOND {
+ $$ = UserFieldname{"second"};
+ }
+ | ARG_MILLISECOND {
+ $$ = UserFieldname{"millisecond"};
+ }
+ | ARG_DAY {
+ $$ = UserFieldname{"day"};
+ }
+ | ARG_ISO_DAY_OF_WEEK {
+ $$ = UserFieldname{"isoDayOfWeek"};
+ }
+ | ARG_ISO_WEEK {
+ $$ = UserFieldname{"isoWeek"};
+ }
+ | ARG_ISO_WEEK_YEAR {
+ $$ = UserFieldname{"isoWeekYear"};
+ }
+ | ARG_ISO_8601 {
+ $$ = UserFieldname{"iso8601"};
+ }
+ | ARG_MONTH {
+ $$ = UserFieldname{"month"};
+ }
;
aggExprAsUserFieldname:
@@ -986,6 +1050,51 @@ aggExprAsUserFieldname:
| CONCAT {
$$ = UserFieldname{"$concat"};
}
+ | DATE_FROM_PARTS {
+ $$ = UserFieldname{"$dateFromParts"};
+ }
+ | DATE_TO_PARTS {
+ $$ = UserFieldname{"$dateToParts"};
+ }
+ | DAY_OF_MONTH {
+ $$ = UserFieldname{"$dayOfMonth"};
+ }
+ | DAY_OF_WEEK {
+ $$ = UserFieldname{"$dayOfWeek"};
+ }
+ | DAY_OF_YEAR {
+ $$ = UserFieldname{"$dayOfYear"};
+ }
+ | HOUR {
+ $$ = UserFieldname{"$hour"};
+ }
+ | ISO_DAY_OF_WEEK {
+ $$ = UserFieldname{"$isoDayOfWeek"};
+ }
+ | ISO_WEEK {
+ $$ = UserFieldname{"$isoWeek"};
+ }
+ | ISO_WEEK_YEAR {
+ $$ = UserFieldname{"$isoWeekYear"};
+ }
+ | MILLISECOND {
+ $$ = UserFieldname{"$millisecond"};
+ }
+ | MINUTE {
+ $$ = UserFieldname{"$minute"};
+ }
+ | MONTH {
+ $$ = UserFieldname{"$month"};
+ }
+ | SECOND {
+ $$ = UserFieldname{"$second"};
+ }
+ | WEEK {
+ $$ = UserFieldname{"$week"};
+ }
+ | YEAR {
+ $$ = UserFieldname{"$year"};
+ }
| DATE_FROM_STRING {
$$ = UserFieldname{"$dateFromString"};
}
@@ -1371,13 +1480,17 @@ nonArrayExpression:
simpleValue | nonArrayCompoundExpression
;
+nonArrayNonObjExpression:
+ simpleValue | nonArrayNonObjCompoundExpression
+;
+
nonArrayCompoundExpression:
expressionObject | nonArrayNonObjCompoundExpression
;
nonArrayNonObjCompoundExpression:
arrayManipulation | maths | meta | boolExprs | literalEscapes | compExprs | typeExpression
- | stringExps | setExpression | trig
+ | stringExps | setExpression | trig | dateExps
;
// Helper rule for expressions which take exactly two expression arguments.
@@ -1396,7 +1509,6 @@ exprFixedThreeArg:
compoundNonObjectExpression:
expressionArray | nonArrayNonObjCompoundExpression
-;
arrayManipulation:
slice
@@ -1739,6 +1851,7 @@ timezoneArg:
}
;
+
dateFromString:
START_OBJECT DATE_FROM_STRING START_ORDERED_OBJECT ARG_DATE_STRING expression formatArg timezoneArg
onErrorArg onNullArg END_OBJECT END_OBJECT {
@@ -1757,6 +1870,296 @@ dateToString:
}
;
+dateExps:
+ dateFromParts | dateToParts | dayOfMonth | dayOfWeek | dayOfYear | hour | isoDayOfWeek | isoWeek | isoWeekYear |
+ millisecond | minute | month | second | week | year
+;
+
+hourArg:
+ %empty {
+ $$ = std::pair{KeyFieldname::hourArg, CNode{KeyValue::absentKey}};
+ }
+ | ARG_HOUR expression {
+ $$ = std::pair{KeyFieldname::hourArg, $expression};
+ }
+;
+
+minuteArg:
+ %empty {
+ $$ = std::pair{KeyFieldname::minuteArg, CNode{KeyValue::absentKey}};
+ }
+ | ARG_MINUTE expression {
+ $$ = std::pair{KeyFieldname::minuteArg, $expression};
+ }
+;
+
+secondArg:
+ %empty {
+ $$ = std::pair{KeyFieldname::secondArg, CNode{KeyValue::absentKey}};
+ }
+ | ARG_SECOND expression {
+ $$ = std::pair{KeyFieldname::secondArg, $expression};
+ }
+;
+
+millisecondArg:
+ %empty {
+ $$ = std::pair{KeyFieldname::millisecondArg, CNode{KeyValue::absentKey}};
+ }
+ | ARG_MILLISECOND expression {
+ $$ = std::pair{KeyFieldname::millisecondArg, $expression};
+ }
+;
+
+dayArg:
+ %empty {
+ $$ = std::pair{KeyFieldname::dayArg, CNode{KeyValue::absentKey}};
+ }
+ | ARG_DAY expression {
+ $$ = std::pair{KeyFieldname::dayArg, $expression};
+ }
+;
+
+isoDayOfWeekArg:
+ %empty {
+ $$ = std::pair{KeyFieldname::isoDayOfWeekArg, CNode{KeyValue::absentKey}};
+ }
+ | ARG_ISO_DAY_OF_WEEK expression {
+ $$ = std::pair{KeyFieldname::isoDayOfWeekArg, $expression};
+ }
+;
+
+isoWeekArg:
+ %empty {
+ $$ = std::pair{KeyFieldname::isoWeekArg, CNode{KeyValue::absentKey}};
+ }
+ | ARG_ISO_WEEK expression {
+ $$ = std::pair{KeyFieldname::isoWeekArg, $expression};
+ }
+;
+
+iso8601Arg:
+ %empty {
+ $$ = std::pair{KeyFieldname::iso8601Arg, CNode{KeyValue::falseKey}};
+ }
+ | ARG_ISO_8601 bool {
+ $$ = std::pair{KeyFieldname::iso8601Arg, $bool};
+ }
+;
+
+monthArg:
+ %empty {
+ $$ = std::pair{KeyFieldname::monthArg, CNode{KeyValue::absentKey}};
+ }
+ | ARG_MONTH expression {
+ $$ = std::pair{KeyFieldname::monthArg, $expression};
+ }
+;
+
+dateFromParts:
+ START_OBJECT DATE_FROM_PARTS START_ORDERED_OBJECT dayArg hourArg millisecondArg minuteArg monthArg secondArg timezoneArg ARG_YEAR expression
+ END_OBJECT END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::dateFromParts, CNode{CNode::ObjectChildren{
+ {KeyFieldname::yearArg, $expression},
+ $monthArg, $dayArg, $hourArg, $minuteArg, $secondArg, $millisecondArg, $timezoneArg}}}}};
+ }
+ | START_OBJECT DATE_FROM_PARTS START_ORDERED_OBJECT dayArg hourArg isoDayOfWeekArg isoWeekArg ARG_ISO_WEEK_YEAR expression
+ millisecondArg minuteArg monthArg secondArg timezoneArg END_OBJECT END_OBJECT {
+ $$ = CNode {CNode::ObjectChildren{{KeyFieldname::dateFromParts, CNode{CNode::ObjectChildren{
+ {KeyFieldname::isoWeekYearArg, $expression},
+ $isoWeekArg, $isoDayOfWeekArg, $hourArg, $minuteArg, $secondArg, $millisecondArg, $timezoneArg}}}}};
+ }
+;
+
+dateToParts:
+ START_OBJECT DATE_TO_PARTS START_ORDERED_OBJECT ARG_DATE expression iso8601Arg timezoneArg END_OBJECT END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::dateToParts, CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, $expression},
+ $timezoneArg, $iso8601Arg}}}}};
+ }
+;
+
+dayOfMonth:
+ START_OBJECT DAY_OF_MONTH nonArrayNonObjExpression END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::dayOfMonth, $nonArrayNonObjExpression}}};
+ }
+ | START_OBJECT DAY_OF_MONTH START_ORDERED_OBJECT ARG_DATE expression timezoneArg END_OBJECT END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::dayOfMonth, CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, $expression}, $timezoneArg}}}}};
+ }
+ | START_OBJECT DAY_OF_MONTH expressionSingletonArray END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::dayOfMonth, $expressionSingletonArray}}};
+ }
+;
+
+dayOfWeek:
+ START_OBJECT DAY_OF_WEEK nonArrayNonObjExpression END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::dayOfWeek, $nonArrayNonObjExpression}}};
+
+ }
+ | START_OBJECT DAY_OF_WEEK START_ORDERED_OBJECT ARG_DATE expression timezoneArg END_OBJECT END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::dayOfWeek, CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, $expression}, $timezoneArg}}}}};
+ }
+ | START_OBJECT DAY_OF_WEEK expressionSingletonArray END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::dayOfWeek, $expressionSingletonArray}}};
+ }
+;
+
+isoDayOfWeek:
+ START_OBJECT ISO_DAY_OF_WEEK nonArrayNonObjExpression END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::isoDayOfWeek, $nonArrayNonObjExpression}}};
+
+ }
+ | START_OBJECT ISO_DAY_OF_WEEK START_ORDERED_OBJECT ARG_DATE expression timezoneArg END_OBJECT END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::isoDayOfWeek, CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, $expression}, $timezoneArg}}}}};
+ }
+ | START_OBJECT ISO_DAY_OF_WEEK expressionSingletonArray END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::isoDayOfWeek, $expressionSingletonArray}}};
+ }
+;
+
+dayOfYear:
+ START_OBJECT DAY_OF_YEAR nonArrayNonObjExpression END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::dayOfYear, $nonArrayNonObjExpression}}};
+
+ }
+ | START_OBJECT DAY_OF_YEAR START_ORDERED_OBJECT ARG_DATE expression timezoneArg END_OBJECT END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::dayOfYear, CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, $expression}, $timezoneArg}}}}};
+ }
+ | START_OBJECT DAY_OF_YEAR expressionSingletonArray END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::dayOfYear, $expressionSingletonArray}}};
+ }
+;
+
+hour:
+ START_OBJECT HOUR nonArrayNonObjExpression END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::hour, $nonArrayNonObjExpression}}};
+
+ }
+ | START_OBJECT HOUR START_ORDERED_OBJECT ARG_DATE expression timezoneArg END_OBJECT END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::hour, CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, $expression}, $timezoneArg}}}}};
+ }
+ | START_OBJECT HOUR expressionSingletonArray END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::hour, $expressionSingletonArray}}};
+ }
+;
+
+month:
+ START_OBJECT MONTH nonArrayNonObjExpression END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::month, $nonArrayNonObjExpression}}};
+
+ }
+ | START_OBJECT MONTH START_ORDERED_OBJECT ARG_DATE expression timezoneArg END_OBJECT END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::month, CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, $expression}, $timezoneArg}}}}};
+ }
+ | START_OBJECT MONTH expressionSingletonArray END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::month, $expressionSingletonArray}}};
+ }
+;
+
+week:
+ START_OBJECT WEEK nonArrayNonObjExpression END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::week, $nonArrayNonObjExpression}}};
+
+ }
+ | START_OBJECT WEEK START_ORDERED_OBJECT ARG_DATE expression timezoneArg END_OBJECT END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::week, CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, $expression}, $timezoneArg}}}}};
+ }
+ | START_OBJECT WEEK expressionSingletonArray END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::week, $expressionSingletonArray}}};
+ }
+;
+
+isoWeek:
+ START_OBJECT ISO_WEEK nonArrayNonObjExpression END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::isoWeek, $nonArrayNonObjExpression}}};
+
+ }
+ | START_OBJECT ISO_WEEK START_ORDERED_OBJECT ARG_DATE expression timezoneArg END_OBJECT END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::isoWeek, CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, $expression}, $timezoneArg}}}}};
+ }
+ | START_OBJECT ISO_WEEK expressionSingletonArray END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::isoWeek, $expressionSingletonArray}}};
+ }
+;
+
+isoWeekYear:
+ START_OBJECT ISO_WEEK_YEAR nonArrayNonObjExpression END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::isoWeekYear, $nonArrayNonObjExpression}}};
+
+ }
+ | START_OBJECT ISO_WEEK_YEAR START_ORDERED_OBJECT ARG_DATE expression timezoneArg END_OBJECT END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::isoWeekYear, CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, $expression}, $timezoneArg}}}}};
+ }
+ | START_OBJECT ISO_WEEK_YEAR expressionSingletonArray END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::isoWeekYear, $expressionSingletonArray}}};
+ }
+;
+
+year:
+ START_OBJECT YEAR nonArrayNonObjExpression END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::year, $nonArrayNonObjExpression}}};
+
+ }
+ | START_OBJECT YEAR START_ORDERED_OBJECT ARG_DATE expression timezoneArg END_OBJECT END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::year, CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, $expression}, $timezoneArg}}}}};
+ }
+ | START_OBJECT YEAR expressionSingletonArray END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::year, $expressionSingletonArray}}};
+ }
+;
+
+second:
+ START_OBJECT SECOND nonArrayNonObjExpression END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::second, $nonArrayNonObjExpression}}};
+
+ }
+ | START_OBJECT SECOND START_ORDERED_OBJECT ARG_DATE expression timezoneArg END_OBJECT END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::second, CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, $expression}, $timezoneArg}}}}};
+ }
+ | START_OBJECT SECOND expressionSingletonArray END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::second, $expressionSingletonArray}}};
+ }
+;
+
+millisecond:
+ START_OBJECT MILLISECOND nonArrayNonObjExpression END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::millisecond, $nonArrayNonObjExpression}}};
+
+ }
+ | START_OBJECT MILLISECOND START_ORDERED_OBJECT ARG_DATE expression timezoneArg END_OBJECT END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::millisecond, CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, $expression}, $timezoneArg}}}}};
+ }
+ | START_OBJECT MILLISECOND expressionSingletonArray END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::millisecond, $expressionSingletonArray}}};
+ }
+;
+
+minute:
+ START_OBJECT MINUTE nonArrayNonObjExpression END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::minute, $nonArrayNonObjExpression}}};
+
+ }
+ | START_OBJECT MINUTE START_ORDERED_OBJECT ARG_DATE expression timezoneArg END_OBJECT END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::minute, CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, $expression}, $timezoneArg}}}}};
+ }
+ | START_OBJECT MINUTE expressionSingletonArray END_OBJECT {
+ $$ = CNode{CNode::ObjectChildren{{KeyFieldname::minute, $expressionSingletonArray}}};
+ }
+;
+
exprZeroToTwo:
%empty {
$$ = CNode::ArrayChildren{};
diff --git a/src/mongo/db/cst/key_fieldname.h b/src/mongo/db/cst/key_fieldname.h
index 1af55265749..de971a48b0c 100644
--- a/src/mongo/db/cst/key_fieldname.h
+++ b/src/mongo/db/cst/key_fieldname.h
@@ -57,10 +57,16 @@
ENUMIFY(cos) \
ENUMIFY(cosh) \
ENUMIFY(dateArg) \
+ ENUMIFY(dateFromParts) \
ENUMIFY(dateFromString) \
ENUMIFY(dateStringArg) \
+ ENUMIFY(dateToParts) \
ENUMIFY(dateToString) \
ENUMIFY(degreesToRadians) \
+ ENUMIFY(dayArg) \
+ ENUMIFY(dayOfMonth) \
+ ENUMIFY(dayOfWeek) \
+ ENUMIFY(dayOfYear) \
ENUMIFY(divide) \
ENUMIFY(eq) \
ENUMIFY(existsExpr) \
@@ -70,11 +76,20 @@
ENUMIFY(formatArg) \
ENUMIFY(gt) \
ENUMIFY(gte) \
+ ENUMIFY(hour) \
+ ENUMIFY(hourArg) \
ENUMIFY(id) \
ENUMIFY(indexOfBytes) \
ENUMIFY(indexOfCP) \
ENUMIFY(inhibitOptimization) \
ENUMIFY(inputArg) \
+ ENUMIFY(iso8601Arg) \
+ ENUMIFY(isoDayOfWeek) \
+ ENUMIFY(isoDayOfWeekArg) \
+ ENUMIFY(isoWeek) \
+ ENUMIFY(isoWeekArg) \
+ ENUMIFY(isoWeekYear) \
+ ENUMIFY(isoWeekYearArg) \
ENUMIFY(limit) \
ENUMIFY(literal) \
ENUMIFY(ln) \
@@ -85,7 +100,13 @@
ENUMIFY(ltrim) \
ENUMIFY(match) \
ENUMIFY(meta) \
+ ENUMIFY(millisecond) \
+ ENUMIFY(millisecondArg) \
+ ENUMIFY(minute) \
+ ENUMIFY(minuteArg) \
ENUMIFY(mod) \
+ ENUMIFY(month) \
+ ENUMIFY(monthArg) \
ENUMIFY(multiply) \
ENUMIFY(ne) \
ENUMIFY(norExpr) \
@@ -116,6 +137,8 @@
ENUMIFY(setUnion) \
ENUMIFY(sin) \
ENUMIFY(sinh) \
+ ENUMIFY(second) \
+ ENUMIFY(secondArg) \
ENUMIFY(sizeArg) \
ENUMIFY(skip) \
ENUMIFY(slice) \
@@ -145,7 +168,10 @@
ENUMIFY(trim) \
ENUMIFY(trunc) \
ENUMIFY(type) \
- ENUMIFY(unionWith)
+ ENUMIFY(unionWith) \
+ ENUMIFY(week) \
+ ENUMIFY(year) \
+ ENUMIFY(yearArg)
MAKE_PRINTABLE_ENUM(KeyFieldname, KEYFIELDNAMES);
MAKE_PRINTABLE_ENUM_STRING_ARRAY(key_fieldname, KeyFieldname, KEYFIELDNAMES);
diff --git a/src/mongo/db/cst/parser_gen.cpp b/src/mongo/db/cst/parser_gen.cpp
index 686f3a062b3..7f72509de65 100644
--- a/src/mongo/db/cst/parser_gen.cpp
+++ b/src/mongo/db/cst/parser_gen.cpp
@@ -328,6 +328,22 @@ ParserGen::stack_symbol_type::stack_symbol_type(YY_RVREF(stack_symbol_type) that
case symbol_kind::S_lt: // lt
case symbol_kind::S_lte: // lte
case symbol_kind::S_ne: // ne
+ case symbol_kind::S_dateExps: // dateExps
+ case symbol_kind::S_dateFromParts: // dateFromParts
+ case symbol_kind::S_dateToParts: // dateToParts
+ case symbol_kind::S_dayOfMonth: // dayOfMonth
+ case symbol_kind::S_dayOfWeek: // dayOfWeek
+ case symbol_kind::S_dayOfYear: // dayOfYear
+ case symbol_kind::S_hour: // hour
+ case symbol_kind::S_isoDayOfWeek: // isoDayOfWeek
+ case symbol_kind::S_isoWeek: // isoWeek
+ case symbol_kind::S_isoWeekYear: // isoWeekYear
+ case symbol_kind::S_millisecond: // millisecond
+ case symbol_kind::S_minute: // minute
+ case symbol_kind::S_month: // month
+ case symbol_kind::S_second: // second
+ case symbol_kind::S_week: // week
+ case symbol_kind::S_year: // year
case symbol_kind::S_typeExpression: // typeExpression
case symbol_kind::S_convert: // convert
case symbol_kind::S_toBool: // toBool
@@ -383,6 +399,7 @@ ParserGen::stack_symbol_type::stack_symbol_type(YY_RVREF(stack_symbol_type) that
case symbol_kind::S_nonArrayNonObjCompoundExpression: // nonArrayNonObjCompoundExpression
case symbol_kind::S_expressionSingletonArray: // expressionSingletonArray
case symbol_kind::S_singleArgExpression: // singleArgExpression
+ case symbol_kind::S_nonArrayNonObjExpression: // nonArrayNonObjExpression
case symbol_kind::S_match: // match
case symbol_kind::S_predicates: // predicates
case symbol_kind::S_compoundMatchExprs: // compoundMatchExprs
@@ -467,6 +484,15 @@ ParserGen::stack_symbol_type::stack_symbol_type(YY_RVREF(stack_symbol_type) that
case symbol_kind::S_timezoneArg: // timezoneArg
case symbol_kind::S_charsArg: // charsArg
case symbol_kind::S_optionsArg: // optionsArg
+ case symbol_kind::S_hourArg: // hourArg
+ case symbol_kind::S_minuteArg: // minuteArg
+ case symbol_kind::S_secondArg: // secondArg
+ case symbol_kind::S_millisecondArg: // millisecondArg
+ case symbol_kind::S_dayArg: // dayArg
+ case symbol_kind::S_isoWeekArg: // isoWeekArg
+ case symbol_kind::S_iso8601Arg: // iso8601Arg
+ case symbol_kind::S_monthArg: // monthArg
+ case symbol_kind::S_isoDayOfWeekArg: // isoDayOfWeekArg
case symbol_kind::S_predicate: // predicate
case symbol_kind::S_logicalExpr: // logicalExpr
case symbol_kind::S_operatorExpression: // operatorExpression
@@ -630,6 +656,22 @@ ParserGen::stack_symbol_type::stack_symbol_type(state_type s, YY_MOVE_REF(symbol
case symbol_kind::S_lt: // lt
case symbol_kind::S_lte: // lte
case symbol_kind::S_ne: // ne
+ case symbol_kind::S_dateExps: // dateExps
+ case symbol_kind::S_dateFromParts: // dateFromParts
+ case symbol_kind::S_dateToParts: // dateToParts
+ case symbol_kind::S_dayOfMonth: // dayOfMonth
+ case symbol_kind::S_dayOfWeek: // dayOfWeek
+ case symbol_kind::S_dayOfYear: // dayOfYear
+ case symbol_kind::S_hour: // hour
+ case symbol_kind::S_isoDayOfWeek: // isoDayOfWeek
+ case symbol_kind::S_isoWeek: // isoWeek
+ case symbol_kind::S_isoWeekYear: // isoWeekYear
+ case symbol_kind::S_millisecond: // millisecond
+ case symbol_kind::S_minute: // minute
+ case symbol_kind::S_month: // month
+ case symbol_kind::S_second: // second
+ case symbol_kind::S_week: // week
+ case symbol_kind::S_year: // year
case symbol_kind::S_typeExpression: // typeExpression
case symbol_kind::S_convert: // convert
case symbol_kind::S_toBool: // toBool
@@ -685,6 +727,7 @@ ParserGen::stack_symbol_type::stack_symbol_type(state_type s, YY_MOVE_REF(symbol
case symbol_kind::S_nonArrayNonObjCompoundExpression: // nonArrayNonObjCompoundExpression
case symbol_kind::S_expressionSingletonArray: // expressionSingletonArray
case symbol_kind::S_singleArgExpression: // singleArgExpression
+ case symbol_kind::S_nonArrayNonObjExpression: // nonArrayNonObjExpression
case symbol_kind::S_match: // match
case symbol_kind::S_predicates: // predicates
case symbol_kind::S_compoundMatchExprs: // compoundMatchExprs
@@ -769,6 +812,15 @@ ParserGen::stack_symbol_type::stack_symbol_type(state_type s, YY_MOVE_REF(symbol
case symbol_kind::S_timezoneArg: // timezoneArg
case symbol_kind::S_charsArg: // charsArg
case symbol_kind::S_optionsArg: // optionsArg
+ case symbol_kind::S_hourArg: // hourArg
+ case symbol_kind::S_minuteArg: // minuteArg
+ case symbol_kind::S_secondArg: // secondArg
+ case symbol_kind::S_millisecondArg: // millisecondArg
+ case symbol_kind::S_dayArg: // dayArg
+ case symbol_kind::S_isoWeekArg: // isoWeekArg
+ case symbol_kind::S_iso8601Arg: // iso8601Arg
+ case symbol_kind::S_monthArg: // monthArg
+ case symbol_kind::S_isoDayOfWeekArg: // isoDayOfWeekArg
case symbol_kind::S_predicate: // predicate
case symbol_kind::S_logicalExpr: // logicalExpr
case symbol_kind::S_operatorExpression: // operatorExpression
@@ -932,6 +984,22 @@ ParserGen::stack_symbol_type& ParserGen::stack_symbol_type::operator=(
case symbol_kind::S_lt: // lt
case symbol_kind::S_lte: // lte
case symbol_kind::S_ne: // ne
+ case symbol_kind::S_dateExps: // dateExps
+ case symbol_kind::S_dateFromParts: // dateFromParts
+ case symbol_kind::S_dateToParts: // dateToParts
+ case symbol_kind::S_dayOfMonth: // dayOfMonth
+ case symbol_kind::S_dayOfWeek: // dayOfWeek
+ case symbol_kind::S_dayOfYear: // dayOfYear
+ case symbol_kind::S_hour: // hour
+ case symbol_kind::S_isoDayOfWeek: // isoDayOfWeek
+ case symbol_kind::S_isoWeek: // isoWeek
+ case symbol_kind::S_isoWeekYear: // isoWeekYear
+ case symbol_kind::S_millisecond: // millisecond
+ case symbol_kind::S_minute: // minute
+ case symbol_kind::S_month: // month
+ case symbol_kind::S_second: // second
+ case symbol_kind::S_week: // week
+ case symbol_kind::S_year: // year
case symbol_kind::S_typeExpression: // typeExpression
case symbol_kind::S_convert: // convert
case symbol_kind::S_toBool: // toBool
@@ -987,6 +1055,7 @@ ParserGen::stack_symbol_type& ParserGen::stack_symbol_type::operator=(
case symbol_kind::S_nonArrayNonObjCompoundExpression: // nonArrayNonObjCompoundExpression
case symbol_kind::S_expressionSingletonArray: // expressionSingletonArray
case symbol_kind::S_singleArgExpression: // singleArgExpression
+ case symbol_kind::S_nonArrayNonObjExpression: // nonArrayNonObjExpression
case symbol_kind::S_match: // match
case symbol_kind::S_predicates: // predicates
case symbol_kind::S_compoundMatchExprs: // compoundMatchExprs
@@ -1071,6 +1140,15 @@ ParserGen::stack_symbol_type& ParserGen::stack_symbol_type::operator=(
case symbol_kind::S_timezoneArg: // timezoneArg
case symbol_kind::S_charsArg: // charsArg
case symbol_kind::S_optionsArg: // optionsArg
+ case symbol_kind::S_hourArg: // hourArg
+ case symbol_kind::S_minuteArg: // minuteArg
+ case symbol_kind::S_secondArg: // secondArg
+ case symbol_kind::S_millisecondArg: // millisecondArg
+ case symbol_kind::S_dayArg: // dayArg
+ case symbol_kind::S_isoWeekArg: // isoWeekArg
+ case symbol_kind::S_iso8601Arg: // iso8601Arg
+ case symbol_kind::S_monthArg: // monthArg
+ case symbol_kind::S_isoDayOfWeekArg: // isoDayOfWeekArg
case symbol_kind::S_predicate: // predicate
case symbol_kind::S_logicalExpr: // logicalExpr
case symbol_kind::S_operatorExpression: // operatorExpression
@@ -1232,6 +1310,22 @@ ParserGen::stack_symbol_type& ParserGen::stack_symbol_type::operator=(stack_symb
case symbol_kind::S_lt: // lt
case symbol_kind::S_lte: // lte
case symbol_kind::S_ne: // ne
+ case symbol_kind::S_dateExps: // dateExps
+ case symbol_kind::S_dateFromParts: // dateFromParts
+ case symbol_kind::S_dateToParts: // dateToParts
+ case symbol_kind::S_dayOfMonth: // dayOfMonth
+ case symbol_kind::S_dayOfWeek: // dayOfWeek
+ case symbol_kind::S_dayOfYear: // dayOfYear
+ case symbol_kind::S_hour: // hour
+ case symbol_kind::S_isoDayOfWeek: // isoDayOfWeek
+ case symbol_kind::S_isoWeek: // isoWeek
+ case symbol_kind::S_isoWeekYear: // isoWeekYear
+ case symbol_kind::S_millisecond: // millisecond
+ case symbol_kind::S_minute: // minute
+ case symbol_kind::S_month: // month
+ case symbol_kind::S_second: // second
+ case symbol_kind::S_week: // week
+ case symbol_kind::S_year: // year
case symbol_kind::S_typeExpression: // typeExpression
case symbol_kind::S_convert: // convert
case symbol_kind::S_toBool: // toBool
@@ -1287,6 +1381,7 @@ ParserGen::stack_symbol_type& ParserGen::stack_symbol_type::operator=(stack_symb
case symbol_kind::S_nonArrayNonObjCompoundExpression: // nonArrayNonObjCompoundExpression
case symbol_kind::S_expressionSingletonArray: // expressionSingletonArray
case symbol_kind::S_singleArgExpression: // singleArgExpression
+ case symbol_kind::S_nonArrayNonObjExpression: // nonArrayNonObjExpression
case symbol_kind::S_match: // match
case symbol_kind::S_predicates: // predicates
case symbol_kind::S_compoundMatchExprs: // compoundMatchExprs
@@ -1371,6 +1466,15 @@ ParserGen::stack_symbol_type& ParserGen::stack_symbol_type::operator=(stack_symb
case symbol_kind::S_timezoneArg: // timezoneArg
case symbol_kind::S_charsArg: // charsArg
case symbol_kind::S_optionsArg: // optionsArg
+ case symbol_kind::S_hourArg: // hourArg
+ case symbol_kind::S_minuteArg: // minuteArg
+ case symbol_kind::S_secondArg: // secondArg
+ case symbol_kind::S_millisecondArg: // millisecondArg
+ case symbol_kind::S_dayArg: // dayArg
+ case symbol_kind::S_isoWeekArg: // isoWeekArg
+ case symbol_kind::S_iso8601Arg: // iso8601Arg
+ case symbol_kind::S_monthArg: // monthArg
+ case symbol_kind::S_isoDayOfWeekArg: // isoDayOfWeekArg
case symbol_kind::S_predicate: // predicate
case symbol_kind::S_logicalExpr: // logicalExpr
case symbol_kind::S_operatorExpression: // operatorExpression
@@ -1744,6 +1848,22 @@ int ParserGen::parse() {
case symbol_kind::S_lt: // lt
case symbol_kind::S_lte: // lte
case symbol_kind::S_ne: // ne
+ case symbol_kind::S_dateExps: // dateExps
+ case symbol_kind::S_dateFromParts: // dateFromParts
+ case symbol_kind::S_dateToParts: // dateToParts
+ case symbol_kind::S_dayOfMonth: // dayOfMonth
+ case symbol_kind::S_dayOfWeek: // dayOfWeek
+ case symbol_kind::S_dayOfYear: // dayOfYear
+ case symbol_kind::S_hour: // hour
+ case symbol_kind::S_isoDayOfWeek: // isoDayOfWeek
+ case symbol_kind::S_isoWeek: // isoWeek
+ case symbol_kind::S_isoWeekYear: // isoWeekYear
+ case symbol_kind::S_millisecond: // millisecond
+ case symbol_kind::S_minute: // minute
+ case symbol_kind::S_month: // month
+ case symbol_kind::S_second: // second
+ case symbol_kind::S_week: // week
+ case symbol_kind::S_year: // year
case symbol_kind::S_typeExpression: // typeExpression
case symbol_kind::S_convert: // convert
case symbol_kind::S_toBool: // toBool
@@ -1800,6 +1920,7 @@ int ParserGen::parse() {
S_nonArrayNonObjCompoundExpression: // nonArrayNonObjCompoundExpression
case symbol_kind::S_expressionSingletonArray: // expressionSingletonArray
case symbol_kind::S_singleArgExpression: // singleArgExpression
+ case symbol_kind::S_nonArrayNonObjExpression: // nonArrayNonObjExpression
case symbol_kind::S_match: // match
case symbol_kind::S_predicates: // predicates
case symbol_kind::S_compoundMatchExprs: // compoundMatchExprs
@@ -1885,6 +2006,15 @@ int ParserGen::parse() {
case symbol_kind::S_timezoneArg: // timezoneArg
case symbol_kind::S_charsArg: // charsArg
case symbol_kind::S_optionsArg: // optionsArg
+ case symbol_kind::S_hourArg: // hourArg
+ case symbol_kind::S_minuteArg: // minuteArg
+ case symbol_kind::S_secondArg: // secondArg
+ case symbol_kind::S_millisecondArg: // millisecondArg
+ case symbol_kind::S_dayArg: // dayArg
+ case symbol_kind::S_isoWeekArg: // isoWeekArg
+ case symbol_kind::S_iso8601Arg: // iso8601Arg
+ case symbol_kind::S_monthArg: // monthArg
+ case symbol_kind::S_isoDayOfWeekArg: // isoDayOfWeekArg
case symbol_kind::S_predicate: // predicate
case symbol_kind::S_logicalExpr: // logicalExpr
case symbol_kind::S_operatorExpression: // operatorExpression
@@ -1936,111 +2066,111 @@ int ParserGen::parse() {
{
switch (yyn) {
case 2: // start: START_PIPELINE pipeline
-#line 354 "grammar.yy"
+#line 385 "grammar.yy"
{
*cst = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2008 "parser_gen.cpp"
+#line 2138 "parser_gen.cpp"
break;
case 3: // start: START_MATCH match
-#line 357 "grammar.yy"
+#line 388 "grammar.yy"
{
*cst = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2016 "parser_gen.cpp"
+#line 2146 "parser_gen.cpp"
break;
case 4: // start: START_SORT sortSpecs
-#line 360 "grammar.yy"
+#line 391 "grammar.yy"
{
*cst = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2024 "parser_gen.cpp"
+#line 2154 "parser_gen.cpp"
break;
case 5: // pipeline: "array" stageList "end of array"
-#line 367 "grammar.yy"
+#line 398 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[1].value.as<CNode>());
}
-#line 2032 "parser_gen.cpp"
+#line 2162 "parser_gen.cpp"
break;
case 6: // stageList: %empty
-#line 373 "grammar.yy"
+#line 404 "grammar.yy"
{
}
-#line 2038 "parser_gen.cpp"
+#line 2168 "parser_gen.cpp"
break;
case 7: // stageList: "object" stage "end of object" stageList
-#line 374 "grammar.yy"
+#line 405 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{CNode::ArrayChildren{YY_MOVE(yystack_[2].value.as<CNode>())}};
}
-#line 2046 "parser_gen.cpp"
+#line 2176 "parser_gen.cpp"
break;
- case 8: // $@1: %empty
-#line 382 "grammar.yy"
+ case 8: // START_ORDERED_OBJECT: "object"
+#line 413 "grammar.yy"
{
lexer.sortObjTokens();
}
-#line 2052 "parser_gen.cpp"
+#line 2182 "parser_gen.cpp"
break;
- case 10: // stage: inhibitOptimization
-#line 385 "grammar.yy"
+ case 9: // stage: inhibitOptimization
+#line 416 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2058 "parser_gen.cpp"
+#line 2188 "parser_gen.cpp"
break;
- case 11: // stage: unionWith
-#line 385 "grammar.yy"
+ case 10: // stage: unionWith
+#line 416 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2064 "parser_gen.cpp"
+#line 2194 "parser_gen.cpp"
break;
- case 12: // stage: skip
-#line 385 "grammar.yy"
+ case 11: // stage: skip
+#line 416 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2070 "parser_gen.cpp"
+#line 2200 "parser_gen.cpp"
break;
- case 13: // stage: limit
-#line 385 "grammar.yy"
+ case 12: // stage: limit
+#line 416 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2076 "parser_gen.cpp"
+#line 2206 "parser_gen.cpp"
break;
- case 14: // stage: project
-#line 385 "grammar.yy"
+ case 13: // stage: project
+#line 416 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2082 "parser_gen.cpp"
+#line 2212 "parser_gen.cpp"
break;
- case 15: // stage: sample
-#line 385 "grammar.yy"
+ case 14: // stage: sample
+#line 416 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2088 "parser_gen.cpp"
+#line 2218 "parser_gen.cpp"
break;
- case 16: // sample: STAGE_SAMPLE "object" "size argument" num "end of object"
-#line 388 "grammar.yy"
+ case 15: // sample: STAGE_SAMPLE "object" "size argument" num "end of object"
+#line 419 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{std::pair{
KeyFieldname::sample,
@@ -2048,22 +2178,22 @@ int ParserGen::parse() {
{KeyFieldname::sizeArg, YY_MOVE(yystack_[1].value.as<CNode>())},
}}}}};
}
-#line 2100 "parser_gen.cpp"
+#line 2230 "parser_gen.cpp"
break;
- case 17: // inhibitOptimization: STAGE_INHIBIT_OPTIMIZATION "object" "end of
+ case 16: // inhibitOptimization: STAGE_INHIBIT_OPTIMIZATION "object" "end of
// object"
-#line 398 "grammar.yy"
+#line 429 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
std::pair{KeyFieldname::inhibitOptimization, CNode::noopLeaf()}}};
}
-#line 2108 "parser_gen.cpp"
+#line 2238 "parser_gen.cpp"
break;
- case 18: // unionWith: STAGE_UNION_WITH START_ORDERED_OBJECT "coll argument"
+ case 17: // unionWith: STAGE_UNION_WITH START_ORDERED_OBJECT "coll argument"
// string "pipeline argument" double "end of object"
-#line 404 "grammar.yy"
+#line 435 "grammar.yy"
{
auto pipeline = YY_MOVE(yystack_[1].value.as<CNode>());
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{std::pair{
@@ -2072,61 +2202,61 @@ int ParserGen::parse() {
{KeyFieldname::collArg, YY_MOVE(yystack_[3].value.as<CNode>())},
{KeyFieldname::pipelineArg, std::move(pipeline)}}}}}};
}
-#line 2121 "parser_gen.cpp"
+#line 2251 "parser_gen.cpp"
break;
- case 19: // num: int
-#line 414 "grammar.yy"
+ case 18: // num: int
+#line 445 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2127 "parser_gen.cpp"
+#line 2257 "parser_gen.cpp"
break;
- case 20: // num: long
-#line 414 "grammar.yy"
+ case 19: // num: long
+#line 445 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2133 "parser_gen.cpp"
+#line 2263 "parser_gen.cpp"
break;
- case 21: // num: double
-#line 414 "grammar.yy"
+ case 20: // num: double
+#line 445 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2139 "parser_gen.cpp"
+#line 2269 "parser_gen.cpp"
break;
- case 22: // num: decimal
-#line 414 "grammar.yy"
+ case 21: // num: decimal
+#line 445 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2145 "parser_gen.cpp"
+#line 2275 "parser_gen.cpp"
break;
- case 23: // skip: STAGE_SKIP num
-#line 418 "grammar.yy"
+ case 22: // skip: STAGE_SKIP num
+#line 449 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
std::pair{KeyFieldname::skip, YY_MOVE(yystack_[0].value.as<CNode>())}}};
}
-#line 2153 "parser_gen.cpp"
+#line 2283 "parser_gen.cpp"
break;
- case 24: // limit: STAGE_LIMIT num
-#line 423 "grammar.yy"
+ case 23: // limit: STAGE_LIMIT num
+#line 454 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{std::pair{
KeyFieldname::limit, YY_MOVE(yystack_[0].value.as<CNode>())}}};
}
-#line 2161 "parser_gen.cpp"
+#line 2291 "parser_gen.cpp"
break;
- case 25: // project: STAGE_PROJECT "object" projectFields "end of object"
-#line 428 "grammar.yy"
+ case 24: // project: STAGE_PROJECT "object" projectFields "end of object"
+#line 459 "grammar.yy"
{
auto&& fields = YY_MOVE(yystack_[1].value.as<CNode>());
if (auto status =
@@ -2147,48 +2277,48 @@ int ParserGen::parse() {
// function.
error(yystack_[3].location, inclusion.getStatus().reason());
}
-#line 2182 "parser_gen.cpp"
+#line 2312 "parser_gen.cpp"
break;
- case 26: // projectFields: %empty
-#line 447 "grammar.yy"
+ case 25: // projectFields: %empty
+#line 478 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode::noopLeaf();
}
-#line 2190 "parser_gen.cpp"
+#line 2320 "parser_gen.cpp"
break;
- case 27: // projectFields: projectFields projectField
-#line 450 "grammar.yy"
+ case 26: // projectFields: projectFields projectField
+#line 481 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[1].value.as<CNode>());
yylhs.value.as<CNode>().objectChildren().emplace_back(
YY_MOVE(yystack_[0].value.as<std::pair<CNode::Fieldname, CNode>>()));
}
-#line 2199 "parser_gen.cpp"
+#line 2329 "parser_gen.cpp"
break;
- case 28: // projectField: ID topLevelProjection
-#line 457 "grammar.yy"
+ case 27: // projectField: ID topLevelProjection
+#line 488 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = {
KeyFieldname::id, YY_MOVE(yystack_[0].value.as<CNode>())};
}
-#line 2207 "parser_gen.cpp"
+#line 2337 "parser_gen.cpp"
break;
- case 29: // projectField: aggregationProjectionFieldname topLevelProjection
-#line 460 "grammar.yy"
+ case 28: // projectField: aggregationProjectionFieldname topLevelProjection
+#line 491 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = {
YY_MOVE(yystack_[1].value.as<CNode::Fieldname>()),
YY_MOVE(yystack_[0].value.as<CNode>())};
}
-#line 2215 "parser_gen.cpp"
+#line 2345 "parser_gen.cpp"
break;
- case 30: // topLevelProjection: projection
-#line 466 "grammar.yy"
+ case 29: // topLevelProjection: projection
+#line 497 "grammar.yy"
{
auto projection = YY_MOVE(yystack_[0].value.as<CNode>());
yylhs.value.as<CNode>() =
@@ -2205,287 +2335,287 @@ int ParserGen::parse() {
"object project field cannot contain both "
"inclusion and exclusion indicators");
}
-#line 2231 "parser_gen.cpp"
+#line 2361 "parser_gen.cpp"
break;
- case 31: // projection: string
-#line 480 "grammar.yy"
+ case 30: // projection: string
+#line 511 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2237 "parser_gen.cpp"
+#line 2367 "parser_gen.cpp"
break;
- case 32: // projection: binary
-#line 481 "grammar.yy"
+ case 31: // projection: binary
+#line 512 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2243 "parser_gen.cpp"
+#line 2373 "parser_gen.cpp"
break;
- case 33: // projection: undefined
-#line 482 "grammar.yy"
+ case 32: // projection: undefined
+#line 513 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2249 "parser_gen.cpp"
+#line 2379 "parser_gen.cpp"
break;
- case 34: // projection: objectId
-#line 483 "grammar.yy"
+ case 33: // projection: objectId
+#line 514 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2255 "parser_gen.cpp"
+#line 2385 "parser_gen.cpp"
break;
- case 35: // projection: date
-#line 484 "grammar.yy"
+ case 34: // projection: date
+#line 515 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2261 "parser_gen.cpp"
+#line 2391 "parser_gen.cpp"
break;
- case 36: // projection: null
-#line 485 "grammar.yy"
+ case 35: // projection: null
+#line 516 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2267 "parser_gen.cpp"
+#line 2397 "parser_gen.cpp"
break;
- case 37: // projection: regex
-#line 486 "grammar.yy"
+ case 36: // projection: regex
+#line 517 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2273 "parser_gen.cpp"
+#line 2403 "parser_gen.cpp"
break;
- case 38: // projection: dbPointer
-#line 487 "grammar.yy"
+ case 37: // projection: dbPointer
+#line 518 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2279 "parser_gen.cpp"
+#line 2409 "parser_gen.cpp"
break;
- case 39: // projection: javascript
-#line 488 "grammar.yy"
+ case 38: // projection: javascript
+#line 519 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2285 "parser_gen.cpp"
+#line 2415 "parser_gen.cpp"
break;
- case 40: // projection: symbol
-#line 489 "grammar.yy"
+ case 39: // projection: symbol
+#line 520 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2291 "parser_gen.cpp"
+#line 2421 "parser_gen.cpp"
break;
- case 41: // projection: javascriptWScope
-#line 490 "grammar.yy"
+ case 40: // projection: javascriptWScope
+#line 521 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2297 "parser_gen.cpp"
+#line 2427 "parser_gen.cpp"
break;
- case 42: // projection: "1 (int)"
-#line 491 "grammar.yy"
+ case 41: // projection: "1 (int)"
+#line 522 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{NonZeroKey{1}};
}
-#line 2305 "parser_gen.cpp"
+#line 2435 "parser_gen.cpp"
break;
- case 43: // projection: "-1 (int)"
-#line 494 "grammar.yy"
+ case 42: // projection: "-1 (int)"
+#line 525 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{NonZeroKey{-1}};
}
-#line 2313 "parser_gen.cpp"
+#line 2443 "parser_gen.cpp"
break;
- case 44: // projection: "arbitrary integer"
-#line 497 "grammar.yy"
+ case 43: // projection: "arbitrary integer"
+#line 528 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{NonZeroKey{YY_MOVE(yystack_[0].value.as<int>())}};
}
-#line 2321 "parser_gen.cpp"
+#line 2451 "parser_gen.cpp"
break;
- case 45: // projection: "zero (int)"
-#line 500 "grammar.yy"
+ case 44: // projection: "zero (int)"
+#line 531 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{KeyValue::intZeroKey};
}
-#line 2329 "parser_gen.cpp"
+#line 2459 "parser_gen.cpp"
break;
- case 46: // projection: "1 (long)"
-#line 503 "grammar.yy"
+ case 45: // projection: "1 (long)"
+#line 534 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{NonZeroKey{1ll}};
}
-#line 2337 "parser_gen.cpp"
+#line 2467 "parser_gen.cpp"
break;
- case 47: // projection: "-1 (long)"
-#line 506 "grammar.yy"
+ case 46: // projection: "-1 (long)"
+#line 537 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{NonZeroKey{-1ll}};
}
-#line 2345 "parser_gen.cpp"
+#line 2475 "parser_gen.cpp"
break;
- case 48: // projection: "arbitrary long"
-#line 509 "grammar.yy"
+ case 47: // projection: "arbitrary long"
+#line 540 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{NonZeroKey{YY_MOVE(yystack_[0].value.as<long long>())}};
}
-#line 2353 "parser_gen.cpp"
+#line 2483 "parser_gen.cpp"
break;
- case 49: // projection: "zero (long)"
-#line 512 "grammar.yy"
+ case 48: // projection: "zero (long)"
+#line 543 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{KeyValue::longZeroKey};
}
-#line 2361 "parser_gen.cpp"
+#line 2491 "parser_gen.cpp"
break;
- case 50: // projection: "1 (double)"
-#line 515 "grammar.yy"
+ case 49: // projection: "1 (double)"
+#line 546 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{NonZeroKey{1.0}};
}
-#line 2369 "parser_gen.cpp"
+#line 2499 "parser_gen.cpp"
break;
- case 51: // projection: "-1 (double)"
-#line 518 "grammar.yy"
+ case 50: // projection: "-1 (double)"
+#line 549 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{NonZeroKey{-1.0}};
}
-#line 2377 "parser_gen.cpp"
+#line 2507 "parser_gen.cpp"
break;
- case 52: // projection: "arbitrary double"
-#line 521 "grammar.yy"
+ case 51: // projection: "arbitrary double"
+#line 552 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{NonZeroKey{YY_MOVE(yystack_[0].value.as<double>())}};
}
-#line 2385 "parser_gen.cpp"
+#line 2515 "parser_gen.cpp"
break;
- case 53: // projection: "zero (double)"
-#line 524 "grammar.yy"
+ case 52: // projection: "zero (double)"
+#line 555 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{KeyValue::doubleZeroKey};
}
-#line 2393 "parser_gen.cpp"
+#line 2523 "parser_gen.cpp"
break;
- case 54: // projection: "1 (decimal)"
-#line 527 "grammar.yy"
+ case 53: // projection: "1 (decimal)"
+#line 558 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{NonZeroKey{Decimal128{1.0}}};
}
-#line 2401 "parser_gen.cpp"
+#line 2531 "parser_gen.cpp"
break;
- case 55: // projection: "-1 (decimal)"
-#line 530 "grammar.yy"
+ case 54: // projection: "-1 (decimal)"
+#line 561 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{NonZeroKey{Decimal128{-1.0}}};
}
-#line 2409 "parser_gen.cpp"
+#line 2539 "parser_gen.cpp"
break;
- case 56: // projection: "arbitrary decimal"
-#line 533 "grammar.yy"
+ case 55: // projection: "arbitrary decimal"
+#line 564 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{NonZeroKey{YY_MOVE(yystack_[0].value.as<Decimal128>())}};
}
-#line 2417 "parser_gen.cpp"
+#line 2547 "parser_gen.cpp"
break;
- case 57: // projection: "zero (decimal)"
-#line 536 "grammar.yy"
+ case 56: // projection: "zero (decimal)"
+#line 567 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{KeyValue::decimalZeroKey};
}
-#line 2425 "parser_gen.cpp"
+#line 2555 "parser_gen.cpp"
break;
- case 58: // projection: "true"
-#line 539 "grammar.yy"
+ case 57: // projection: "true"
+#line 570 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{KeyValue::trueKey};
}
-#line 2433 "parser_gen.cpp"
+#line 2563 "parser_gen.cpp"
break;
- case 59: // projection: "false"
-#line 542 "grammar.yy"
+ case 58: // projection: "false"
+#line 573 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{KeyValue::falseKey};
}
-#line 2441 "parser_gen.cpp"
+#line 2571 "parser_gen.cpp"
break;
- case 60: // projection: timestamp
-#line 545 "grammar.yy"
+ case 59: // projection: timestamp
+#line 576 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2447 "parser_gen.cpp"
+#line 2577 "parser_gen.cpp"
break;
- case 61: // projection: minKey
-#line 546 "grammar.yy"
+ case 60: // projection: minKey
+#line 577 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2453 "parser_gen.cpp"
+#line 2583 "parser_gen.cpp"
break;
- case 62: // projection: maxKey
-#line 547 "grammar.yy"
+ case 61: // projection: maxKey
+#line 578 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2459 "parser_gen.cpp"
+#line 2589 "parser_gen.cpp"
break;
- case 63: // projection: projectionObject
-#line 548 "grammar.yy"
+ case 62: // projection: projectionObject
+#line 579 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2465 "parser_gen.cpp"
+#line 2595 "parser_gen.cpp"
break;
- case 64: // projection: compoundNonObjectExpression
-#line 549 "grammar.yy"
+ case 63: // projection: compoundNonObjectExpression
+#line 580 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2471 "parser_gen.cpp"
+#line 2601 "parser_gen.cpp"
break;
- case 65: // aggregationProjectionFieldname: projectionFieldname
-#line 554 "grammar.yy"
+ case 64: // aggregationProjectionFieldname: projectionFieldname
+#line 585 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() =
YY_MOVE(yystack_[0].value.as<CNode::Fieldname>());
@@ -2495,11 +2625,11 @@ int ParserGen::parse() {
"positional projection forbidden in $project aggregation "
"pipeline stage");
}
-#line 2481 "parser_gen.cpp"
+#line 2611 "parser_gen.cpp"
break;
- case 66: // projectionFieldname: "fieldname"
-#line 562 "grammar.yy"
+ case 65: // projectionFieldname: "fieldname"
+#line 593 "grammar.yy"
{
auto components =
makeVector<std::string>(YY_MOVE(yystack_[0].value.as<std::string>()));
@@ -2517,20 +2647,20 @@ int ParserGen::parse() {
error(yystack_[0].location, positional.getStatus().reason());
}
}
-#line 2499 "parser_gen.cpp"
+#line 2629 "parser_gen.cpp"
break;
- case 67: // projectionFieldname: argAsProjectionPath
-#line 575 "grammar.yy"
+ case 66: // projectionFieldname: argAsProjectionPath
+#line 606 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() =
YY_MOVE(yystack_[0].value.as<CNode::Fieldname>());
}
-#line 2505 "parser_gen.cpp"
+#line 2635 "parser_gen.cpp"
break;
- case 68: // projectionFieldname: "fieldname containing dotted path"
-#line 576 "grammar.yy"
+ case 67: // projectionFieldname: "fieldname containing dotted path"
+#line 607 "grammar.yy"
{
auto components = YY_MOVE(yystack_[0].value.as<std::vector<std::string>>());
if (auto positional =
@@ -2547,227 +2677,227 @@ int ParserGen::parse() {
error(yystack_[0].location, positional.getStatus().reason());
}
}
-#line 2523 "parser_gen.cpp"
+#line 2653 "parser_gen.cpp"
break;
- case 69: // projectionObject: "object" projectionObjectFields "end of object"
-#line 593 "grammar.yy"
+ case 68: // projectionObject: "object" projectionObjectFields "end of object"
+#line 624 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[1].value.as<CNode>());
}
-#line 2531 "parser_gen.cpp"
+#line 2661 "parser_gen.cpp"
break;
- case 70: // projectionObjectFields: projectionObjectField
-#line 600 "grammar.yy"
+ case 69: // projectionObjectFields: projectionObjectField
+#line 631 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode::noopLeaf();
yylhs.value.as<CNode>().objectChildren().emplace_back(
YY_MOVE(yystack_[0].value.as<std::pair<CNode::Fieldname, CNode>>()));
}
-#line 2540 "parser_gen.cpp"
+#line 2670 "parser_gen.cpp"
break;
- case 71: // projectionObjectFields: projectionObjectFields
+ case 70: // projectionObjectFields: projectionObjectFields
// projectionObjectField
-#line 604 "grammar.yy"
+#line 635 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[1].value.as<CNode>());
yylhs.value.as<CNode>().objectChildren().emplace_back(
YY_MOVE(yystack_[0].value.as<std::pair<CNode::Fieldname, CNode>>()));
}
-#line 2549 "parser_gen.cpp"
+#line 2679 "parser_gen.cpp"
break;
- case 72: // projectionObjectField: idAsProjectionPath projection
-#line 612 "grammar.yy"
+ case 71: // projectionObjectField: idAsProjectionPath projection
+#line 643 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = {
YY_MOVE(yystack_[1].value.as<CNode::Fieldname>()),
YY_MOVE(yystack_[0].value.as<CNode>())};
}
-#line 2557 "parser_gen.cpp"
+#line 2687 "parser_gen.cpp"
break;
- case 73: // projectionObjectField: aggregationProjectionFieldname projection
-#line 615 "grammar.yy"
+ case 72: // projectionObjectField: aggregationProjectionFieldname projection
+#line 646 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = {
YY_MOVE(yystack_[1].value.as<CNode::Fieldname>()),
YY_MOVE(yystack_[0].value.as<CNode>())};
}
-#line 2565 "parser_gen.cpp"
+#line 2695 "parser_gen.cpp"
break;
- case 74: // match: "object" predicates "end of object"
-#line 621 "grammar.yy"
+ case 73: // match: "object" predicates "end of object"
+#line 652 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[1].value.as<CNode>());
}
-#line 2573 "parser_gen.cpp"
+#line 2703 "parser_gen.cpp"
break;
- case 75: // predicates: %empty
-#line 627 "grammar.yy"
+ case 74: // predicates: %empty
+#line 658 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode::noopLeaf();
}
-#line 2581 "parser_gen.cpp"
+#line 2711 "parser_gen.cpp"
break;
- case 76: // predicates: predicates predicate
-#line 630 "grammar.yy"
+ case 75: // predicates: predicates predicate
+#line 661 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[1].value.as<CNode>());
yylhs.value.as<CNode>().objectChildren().emplace_back(
YY_MOVE(yystack_[0].value.as<std::pair<CNode::Fieldname, CNode>>()));
}
-#line 2590 "parser_gen.cpp"
+#line 2720 "parser_gen.cpp"
break;
- case 77: // predicate: predFieldname predValue
-#line 636 "grammar.yy"
+ case 76: // predicate: predFieldname predValue
+#line 667 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = {
YY_MOVE(yystack_[1].value.as<CNode::Fieldname>()),
YY_MOVE(yystack_[0].value.as<CNode>())};
}
-#line 2598 "parser_gen.cpp"
+#line 2728 "parser_gen.cpp"
break;
- case 78: // predicate: logicalExpr
-#line 639 "grammar.yy"
+ case 77: // predicate: logicalExpr
+#line 670 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
YY_MOVE(yystack_[0].value.as<std::pair<CNode::Fieldname, CNode>>());
}
-#line 2604 "parser_gen.cpp"
+#line 2734 "parser_gen.cpp"
break;
- case 79: // predicate: commentExpr
-#line 640 "grammar.yy"
+ case 78: // predicate: commentExpr
+#line 671 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
YY_MOVE(yystack_[0].value.as<std::pair<CNode::Fieldname, CNode>>());
}
-#line 2610 "parser_gen.cpp"
+#line 2740 "parser_gen.cpp"
break;
- case 80: // predValue: simpleValue
-#line 647 "grammar.yy"
+ case 79: // predValue: simpleValue
+#line 678 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2616 "parser_gen.cpp"
+#line 2746 "parser_gen.cpp"
break;
- case 81: // predValue: "object" compoundMatchExprs "end of object"
-#line 648 "grammar.yy"
+ case 80: // predValue: "object" compoundMatchExprs "end of object"
+#line 679 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[1].value.as<CNode>());
}
-#line 2624 "parser_gen.cpp"
+#line 2754 "parser_gen.cpp"
break;
- case 82: // compoundMatchExprs: %empty
-#line 654 "grammar.yy"
+ case 81: // compoundMatchExprs: %empty
+#line 685 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode::noopLeaf();
}
-#line 2632 "parser_gen.cpp"
+#line 2762 "parser_gen.cpp"
break;
- case 83: // compoundMatchExprs: compoundMatchExprs operatorExpression
-#line 657 "grammar.yy"
+ case 82: // compoundMatchExprs: compoundMatchExprs operatorExpression
+#line 688 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[1].value.as<CNode>());
yylhs.value.as<CNode>().objectChildren().emplace_back(
YY_MOVE(yystack_[0].value.as<std::pair<CNode::Fieldname, CNode>>()));
}
-#line 2641 "parser_gen.cpp"
+#line 2771 "parser_gen.cpp"
break;
- case 84: // operatorExpression: notExpr
-#line 665 "grammar.yy"
+ case 83: // operatorExpression: notExpr
+#line 696 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
YY_MOVE(yystack_[0].value.as<std::pair<CNode::Fieldname, CNode>>());
}
-#line 2647 "parser_gen.cpp"
+#line 2777 "parser_gen.cpp"
break;
- case 85: // operatorExpression: existsExpr
-#line 665 "grammar.yy"
+ case 84: // operatorExpression: existsExpr
+#line 696 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
YY_MOVE(yystack_[0].value.as<std::pair<CNode::Fieldname, CNode>>());
}
-#line 2653 "parser_gen.cpp"
+#line 2783 "parser_gen.cpp"
break;
- case 86: // operatorExpression: typeExpr
-#line 665 "grammar.yy"
+ case 85: // operatorExpression: typeExpr
+#line 696 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
YY_MOVE(yystack_[0].value.as<std::pair<CNode::Fieldname, CNode>>());
}
-#line 2659 "parser_gen.cpp"
+#line 2789 "parser_gen.cpp"
break;
- case 87: // existsExpr: EXISTS value
-#line 669 "grammar.yy"
+ case 86: // existsExpr: EXISTS value
+#line 700 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = std::pair{
KeyFieldname::existsExpr, YY_MOVE(yystack_[0].value.as<CNode>())};
}
-#line 2667 "parser_gen.cpp"
+#line 2797 "parser_gen.cpp"
break;
- case 88: // typeArray: "array" typeValues "end of array"
-#line 675 "grammar.yy"
+ case 87: // typeArray: "array" typeValues "end of array"
+#line 706 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{YY_MOVE(yystack_[1].value.as<std::vector<CNode>>())};
}
-#line 2675 "parser_gen.cpp"
+#line 2805 "parser_gen.cpp"
break;
- case 89: // typeValues: %empty
-#line 681 "grammar.yy"
+ case 88: // typeValues: %empty
+#line 712 "grammar.yy"
{
}
-#line 2681 "parser_gen.cpp"
+#line 2811 "parser_gen.cpp"
break;
- case 90: // typeValues: typeValues typeValue
-#line 682 "grammar.yy"
+ case 89: // typeValues: typeValues typeValue
+#line 713 "grammar.yy"
{
yylhs.value.as<std::vector<CNode>>() =
YY_MOVE(yystack_[1].value.as<std::vector<CNode>>());
yylhs.value.as<std::vector<CNode>>().emplace_back(
YY_MOVE(yystack_[0].value.as<CNode>()));
}
-#line 2690 "parser_gen.cpp"
+#line 2820 "parser_gen.cpp"
break;
- case 91: // typeValue: num
-#line 689 "grammar.yy"
+ case 90: // typeValue: num
+#line 720 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2696 "parser_gen.cpp"
+#line 2826 "parser_gen.cpp"
break;
- case 92: // typeValue: string
-#line 689 "grammar.yy"
+ case 91: // typeValue: string
+#line 720 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 2702 "parser_gen.cpp"
+#line 2832 "parser_gen.cpp"
break;
- case 93: // typeExpr: TYPE typeValue
-#line 693 "grammar.yy"
+ case 92: // typeExpr: TYPE typeValue
+#line 724 "grammar.yy"
{
auto&& type = YY_MOVE(yystack_[0].value.as<CNode>());
if (auto status = c_node_validation::validateTypeOperatorArgument(type);
@@ -2780,11 +2910,11 @@ int ParserGen::parse() {
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
std::pair{KeyFieldname::type, std::move(type)};
}
-#line 2716 "parser_gen.cpp"
+#line 2846 "parser_gen.cpp"
break;
- case 94: // typeExpr: TYPE typeArray
-#line 702 "grammar.yy"
+ case 93: // typeExpr: TYPE typeArray
+#line 733 "grammar.yy"
{
auto&& types = YY_MOVE(yystack_[0].value.as<CNode>());
if (auto status = c_node_validation::validateTypeOperatorArgument(types);
@@ -2794,30 +2924,30 @@ int ParserGen::parse() {
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
std::pair{KeyFieldname::type, std::move(types)};
}
-#line 2728 "parser_gen.cpp"
+#line 2858 "parser_gen.cpp"
break;
- case 95: // commentExpr: COMMENT value
-#line 712 "grammar.yy"
+ case 94: // commentExpr: COMMENT value
+#line 743 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = std::pair{
KeyFieldname::commentExpr, YY_MOVE(yystack_[0].value.as<CNode>())};
}
-#line 2736 "parser_gen.cpp"
+#line 2866 "parser_gen.cpp"
break;
- case 96: // notExpr: NOT regex
-#line 718 "grammar.yy"
+ case 95: // notExpr: NOT regex
+#line 749 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = std::pair{
KeyFieldname::notExpr, YY_MOVE(yystack_[0].value.as<CNode>())};
}
-#line 2744 "parser_gen.cpp"
+#line 2874 "parser_gen.cpp"
break;
- case 97: // notExpr: NOT "object" compoundMatchExprs operatorExpression "end of
+ case 96: // notExpr: NOT "object" compoundMatchExprs operatorExpression "end of
// object"
-#line 723 "grammar.yy"
+#line 754 "grammar.yy"
{
auto&& exprs = YY_MOVE(yystack_[2].value.as<CNode>());
exprs.objectChildren().emplace_back(
@@ -2826,12 +2956,12 @@ int ParserGen::parse() {
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
std::pair{KeyFieldname::notExpr, std::move(exprs)};
}
-#line 2755 "parser_gen.cpp"
+#line 2885 "parser_gen.cpp"
break;
- case 98: // logicalExpr: logicalExprField "array" additionalExprs match "end of
+ case 97: // logicalExpr: logicalExprField "array" additionalExprs match "end of
// array"
-#line 733 "grammar.yy"
+#line 764 "grammar.yy"
{
auto&& children = YY_MOVE(yystack_[2].value.as<CNode>());
children.arrayChildren().emplace_back(
@@ -2839,147 +2969,147 @@ int ParserGen::parse() {
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = {
YY_MOVE(yystack_[4].value.as<CNode::Fieldname>()), std::move(children)};
}
-#line 2765 "parser_gen.cpp"
+#line 2895 "parser_gen.cpp"
break;
- case 99: // logicalExprField: AND
-#line 741 "grammar.yy"
+ case 98: // logicalExprField: AND
+#line 772 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = KeyFieldname::andExpr;
}
-#line 2771 "parser_gen.cpp"
+#line 2901 "parser_gen.cpp"
break;
- case 100: // logicalExprField: OR
-#line 742 "grammar.yy"
+ case 99: // logicalExprField: OR
+#line 773 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = KeyFieldname::orExpr;
}
-#line 2777 "parser_gen.cpp"
+#line 2907 "parser_gen.cpp"
break;
- case 101: // logicalExprField: NOR
-#line 743 "grammar.yy"
+ case 100: // logicalExprField: NOR
+#line 774 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = KeyFieldname::norExpr;
}
-#line 2783 "parser_gen.cpp"
+#line 2913 "parser_gen.cpp"
break;
- case 102: // additionalExprs: %empty
-#line 746 "grammar.yy"
+ case 101: // additionalExprs: %empty
+#line 777 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ArrayChildren{}};
}
-#line 2791 "parser_gen.cpp"
+#line 2921 "parser_gen.cpp"
break;
- case 103: // additionalExprs: additionalExprs match
-#line 749 "grammar.yy"
+ case 102: // additionalExprs: additionalExprs match
+#line 780 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[1].value.as<CNode>());
yylhs.value.as<CNode>().arrayChildren().emplace_back(
YY_MOVE(yystack_[0].value.as<CNode>()));
}
-#line 2800 "parser_gen.cpp"
+#line 2930 "parser_gen.cpp"
break;
- case 104: // predFieldname: idAsUserFieldname
-#line 756 "grammar.yy"
+ case 103: // predFieldname: idAsUserFieldname
+#line 787 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() =
YY_MOVE(yystack_[0].value.as<CNode::Fieldname>());
}
-#line 2806 "parser_gen.cpp"
+#line 2936 "parser_gen.cpp"
break;
- case 105: // predFieldname: argAsUserFieldname
-#line 756 "grammar.yy"
+ case 104: // predFieldname: argAsUserFieldname
+#line 787 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() =
YY_MOVE(yystack_[0].value.as<CNode::Fieldname>());
}
-#line 2812 "parser_gen.cpp"
+#line 2942 "parser_gen.cpp"
break;
- case 106: // predFieldname: invariableUserFieldname
-#line 756 "grammar.yy"
+ case 105: // predFieldname: invariableUserFieldname
+#line 787 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() =
YY_MOVE(yystack_[0].value.as<CNode::Fieldname>());
}
-#line 2818 "parser_gen.cpp"
+#line 2948 "parser_gen.cpp"
break;
- case 107: // invariableUserFieldname: "fieldname"
-#line 759 "grammar.yy"
+ case 106: // invariableUserFieldname: "fieldname"
+#line 790 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() =
UserFieldname{YY_MOVE(yystack_[0].value.as<std::string>())};
}
-#line 2826 "parser_gen.cpp"
+#line 2956 "parser_gen.cpp"
break;
- case 108: // stageAsUserFieldname: STAGE_INHIBIT_OPTIMIZATION
-#line 767 "grammar.yy"
+ case 107: // stageAsUserFieldname: STAGE_INHIBIT_OPTIMIZATION
+#line 798 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() =
UserFieldname{"$_internalInhibitOptimization"};
}
-#line 2834 "parser_gen.cpp"
+#line 2964 "parser_gen.cpp"
break;
- case 109: // stageAsUserFieldname: STAGE_UNION_WITH
-#line 770 "grammar.yy"
+ case 108: // stageAsUserFieldname: STAGE_UNION_WITH
+#line 801 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$unionWith"};
}
-#line 2842 "parser_gen.cpp"
+#line 2972 "parser_gen.cpp"
break;
- case 110: // stageAsUserFieldname: STAGE_SKIP
-#line 773 "grammar.yy"
+ case 109: // stageAsUserFieldname: STAGE_SKIP
+#line 804 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$skip"};
}
-#line 2850 "parser_gen.cpp"
+#line 2980 "parser_gen.cpp"
break;
- case 111: // stageAsUserFieldname: STAGE_LIMIT
-#line 776 "grammar.yy"
+ case 110: // stageAsUserFieldname: STAGE_LIMIT
+#line 807 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$limit"};
}
-#line 2858 "parser_gen.cpp"
+#line 2988 "parser_gen.cpp"
break;
- case 112: // stageAsUserFieldname: STAGE_PROJECT
-#line 779 "grammar.yy"
+ case 111: // stageAsUserFieldname: STAGE_PROJECT
+#line 810 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$project"};
}
-#line 2866 "parser_gen.cpp"
+#line 2996 "parser_gen.cpp"
break;
- case 113: // stageAsUserFieldname: STAGE_SAMPLE
-#line 782 "grammar.yy"
+ case 112: // stageAsUserFieldname: STAGE_SAMPLE
+#line 813 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$sample"};
}
-#line 2874 "parser_gen.cpp"
+#line 3004 "parser_gen.cpp"
break;
- case 114: // argAsUserFieldname: arg
-#line 788 "grammar.yy"
+ case 113: // argAsUserFieldname: arg
+#line 819 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() =
UserFieldname{YY_MOVE(yystack_[0].value.as<std::string>())};
}
-#line 2882 "parser_gen.cpp"
+#line 3012 "parser_gen.cpp"
break;
- case 115: // argAsProjectionPath: arg
-#line 794 "grammar.yy"
+ case 114: // argAsProjectionPath: arg
+#line 825 "grammar.yy"
{
auto components =
makeVector<std::string>(YY_MOVE(yystack_[0].value.as<std::string>()));
@@ -2997,892 +3127,1100 @@ int ParserGen::parse() {
error(yystack_[0].location, positional.getStatus().reason());
}
}
-#line 2900 "parser_gen.cpp"
+#line 3030 "parser_gen.cpp"
break;
- case 116: // arg: "coll argument"
-#line 813 "grammar.yy"
+ case 115: // arg: "coll argument"
+#line 844 "grammar.yy"
{
yylhs.value.as<std::string>() = "coll";
}
-#line 2908 "parser_gen.cpp"
+#line 3038 "parser_gen.cpp"
break;
- case 117: // arg: "pipeline argument"
-#line 816 "grammar.yy"
+ case 116: // arg: "pipeline argument"
+#line 847 "grammar.yy"
{
yylhs.value.as<std::string>() = "pipeline";
}
-#line 2916 "parser_gen.cpp"
+#line 3046 "parser_gen.cpp"
break;
- case 118: // arg: "size argument"
-#line 819 "grammar.yy"
+ case 117: // arg: "size argument"
+#line 850 "grammar.yy"
{
yylhs.value.as<std::string>() = "size";
}
-#line 2924 "parser_gen.cpp"
+#line 3054 "parser_gen.cpp"
break;
- case 119: // arg: "input argument"
-#line 822 "grammar.yy"
+ case 118: // arg: "input argument"
+#line 853 "grammar.yy"
{
yylhs.value.as<std::string>() = "input";
}
-#line 2932 "parser_gen.cpp"
+#line 3062 "parser_gen.cpp"
break;
- case 120: // arg: "to argument"
-#line 825 "grammar.yy"
+ case 119: // arg: "to argument"
+#line 856 "grammar.yy"
{
yylhs.value.as<std::string>() = "to";
}
-#line 2940 "parser_gen.cpp"
+#line 3070 "parser_gen.cpp"
break;
- case 121: // arg: "onError argument"
-#line 828 "grammar.yy"
+ case 120: // arg: "onError argument"
+#line 859 "grammar.yy"
{
yylhs.value.as<std::string>() = "onError";
}
-#line 2948 "parser_gen.cpp"
+#line 3078 "parser_gen.cpp"
break;
- case 122: // arg: "onNull argument"
-#line 831 "grammar.yy"
+ case 121: // arg: "onNull argument"
+#line 862 "grammar.yy"
{
yylhs.value.as<std::string>() = "onNull";
}
-#line 2956 "parser_gen.cpp"
+#line 3086 "parser_gen.cpp"
break;
- case 123: // arg: "dateString argument"
-#line 834 "grammar.yy"
+ case 122: // arg: "dateString argument"
+#line 865 "grammar.yy"
{
yylhs.value.as<std::string>() = "dateString";
}
-#line 2964 "parser_gen.cpp"
+#line 3094 "parser_gen.cpp"
break;
- case 124: // arg: "format argument"
-#line 837 "grammar.yy"
+ case 123: // arg: "format argument"
+#line 868 "grammar.yy"
{
yylhs.value.as<std::string>() = "format";
}
-#line 2972 "parser_gen.cpp"
+#line 3102 "parser_gen.cpp"
break;
- case 125: // arg: "timezone argument"
-#line 840 "grammar.yy"
+ case 124: // arg: "timezone argument"
+#line 871 "grammar.yy"
{
yylhs.value.as<std::string>() = "timezone";
}
-#line 2980 "parser_gen.cpp"
+#line 3110 "parser_gen.cpp"
break;
- case 126: // arg: "date argument"
-#line 843 "grammar.yy"
+ case 125: // arg: "date argument"
+#line 874 "grammar.yy"
{
yylhs.value.as<std::string>() = "date";
}
-#line 2988 "parser_gen.cpp"
+#line 3118 "parser_gen.cpp"
break;
- case 127: // arg: "chars argument"
-#line 846 "grammar.yy"
+ case 126: // arg: "chars argument"
+#line 877 "grammar.yy"
{
yylhs.value.as<std::string>() = "chars";
}
-#line 2996 "parser_gen.cpp"
+#line 3126 "parser_gen.cpp"
break;
- case 128: // arg: "regex argument"
-#line 849 "grammar.yy"
+ case 127: // arg: "regex argument"
+#line 880 "grammar.yy"
{
yylhs.value.as<std::string>() = "regex";
}
-#line 3004 "parser_gen.cpp"
+#line 3134 "parser_gen.cpp"
break;
- case 129: // arg: "options argument"
-#line 852 "grammar.yy"
+ case 128: // arg: "options argument"
+#line 883 "grammar.yy"
{
yylhs.value.as<std::string>() = "options";
}
-#line 3012 "parser_gen.cpp"
+#line 3142 "parser_gen.cpp"
break;
- case 130: // arg: "find argument"
-#line 855 "grammar.yy"
+ case 129: // arg: "find argument"
+#line 886 "grammar.yy"
{
yylhs.value.as<std::string>() = "find";
}
-#line 3020 "parser_gen.cpp"
+#line 3150 "parser_gen.cpp"
break;
- case 131: // arg: "replacement argument"
-#line 858 "grammar.yy"
+ case 130: // arg: "replacement argument"
+#line 889 "grammar.yy"
{
yylhs.value.as<std::string>() = "replacement";
}
-#line 3028 "parser_gen.cpp"
+#line 3158 "parser_gen.cpp"
break;
- case 132: // aggExprAsUserFieldname: ADD
-#line 866 "grammar.yy"
+ case 131: // arg: "hour argument"
+#line 892 "grammar.yy"
+ {
+ yylhs.value.as<std::string>() = UserFieldname{"hour"};
+ }
+#line 3166 "parser_gen.cpp"
+ break;
+
+ case 132: // arg: "year argument"
+#line 895 "grammar.yy"
+ {
+ yylhs.value.as<std::string>() = UserFieldname{"year"};
+ }
+#line 3174 "parser_gen.cpp"
+ break;
+
+ case 133: // arg: "minute argument"
+#line 898 "grammar.yy"
+ {
+ yylhs.value.as<std::string>() = UserFieldname{"minute"};
+ }
+#line 3182 "parser_gen.cpp"
+ break;
+
+ case 134: // arg: "second argument"
+#line 901 "grammar.yy"
+ {
+ yylhs.value.as<std::string>() = UserFieldname{"second"};
+ }
+#line 3190 "parser_gen.cpp"
+ break;
+
+ case 135: // arg: "millisecond argument"
+#line 904 "grammar.yy"
+ {
+ yylhs.value.as<std::string>() = UserFieldname{"millisecond"};
+ }
+#line 3198 "parser_gen.cpp"
+ break;
+
+ case 136: // arg: "day argument"
+#line 907 "grammar.yy"
+ {
+ yylhs.value.as<std::string>() = UserFieldname{"day"};
+ }
+#line 3206 "parser_gen.cpp"
+ break;
+
+ case 137: // arg: "ISO day of week argument"
+#line 910 "grammar.yy"
+ {
+ yylhs.value.as<std::string>() = UserFieldname{"isoDayOfWeek"};
+ }
+#line 3214 "parser_gen.cpp"
+ break;
+
+ case 138: // arg: "ISO week argument"
+#line 913 "grammar.yy"
+ {
+ yylhs.value.as<std::string>() = UserFieldname{"isoWeek"};
+ }
+#line 3222 "parser_gen.cpp"
+ break;
+
+ case 139: // arg: "ISO week year argument"
+#line 916 "grammar.yy"
+ {
+ yylhs.value.as<std::string>() = UserFieldname{"isoWeekYear"};
+ }
+#line 3230 "parser_gen.cpp"
+ break;
+
+ case 140: // arg: "ISO 8601 argument"
+#line 919 "grammar.yy"
+ {
+ yylhs.value.as<std::string>() = UserFieldname{"iso8601"};
+ }
+#line 3238 "parser_gen.cpp"
+ break;
+
+ case 141: // arg: "month argument"
+#line 922 "grammar.yy"
+ {
+ yylhs.value.as<std::string>() = UserFieldname{"month"};
+ }
+#line 3246 "parser_gen.cpp"
+ break;
+
+ case 142: // aggExprAsUserFieldname: ADD
+#line 930 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$add"};
}
-#line 3036 "parser_gen.cpp"
+#line 3254 "parser_gen.cpp"
break;
- case 133: // aggExprAsUserFieldname: ATAN2
-#line 869 "grammar.yy"
+ case 143: // aggExprAsUserFieldname: ATAN2
+#line 933 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$atan2"};
}
-#line 3044 "parser_gen.cpp"
+#line 3262 "parser_gen.cpp"
break;
- case 134: // aggExprAsUserFieldname: AND
-#line 872 "grammar.yy"
+ case 144: // aggExprAsUserFieldname: AND
+#line 936 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$and"};
}
-#line 3052 "parser_gen.cpp"
+#line 3270 "parser_gen.cpp"
break;
- case 135: // aggExprAsUserFieldname: CONST_EXPR
-#line 875 "grammar.yy"
+ case 145: // aggExprAsUserFieldname: CONST_EXPR
+#line 939 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$const"};
}
-#line 3060 "parser_gen.cpp"
+#line 3278 "parser_gen.cpp"
break;
- case 136: // aggExprAsUserFieldname: LITERAL
-#line 878 "grammar.yy"
+ case 146: // aggExprAsUserFieldname: LITERAL
+#line 942 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$literal"};
}
-#line 3068 "parser_gen.cpp"
+#line 3286 "parser_gen.cpp"
break;
- case 137: // aggExprAsUserFieldname: OR
-#line 881 "grammar.yy"
+ case 147: // aggExprAsUserFieldname: OR
+#line 945 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$or"};
}
-#line 3076 "parser_gen.cpp"
+#line 3294 "parser_gen.cpp"
break;
- case 138: // aggExprAsUserFieldname: NOT
-#line 884 "grammar.yy"
+ case 148: // aggExprAsUserFieldname: NOT
+#line 948 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$not"};
}
-#line 3084 "parser_gen.cpp"
+#line 3302 "parser_gen.cpp"
break;
- case 139: // aggExprAsUserFieldname: CMP
-#line 887 "grammar.yy"
+ case 149: // aggExprAsUserFieldname: CMP
+#line 951 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$cmp"};
}
-#line 3092 "parser_gen.cpp"
+#line 3310 "parser_gen.cpp"
break;
- case 140: // aggExprAsUserFieldname: EQ
-#line 890 "grammar.yy"
+ case 150: // aggExprAsUserFieldname: EQ
+#line 954 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$eq"};
}
-#line 3100 "parser_gen.cpp"
+#line 3318 "parser_gen.cpp"
break;
- case 141: // aggExprAsUserFieldname: GT
-#line 893 "grammar.yy"
+ case 151: // aggExprAsUserFieldname: GT
+#line 957 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$gt"};
}
-#line 3108 "parser_gen.cpp"
+#line 3326 "parser_gen.cpp"
break;
- case 142: // aggExprAsUserFieldname: GTE
-#line 896 "grammar.yy"
+ case 152: // aggExprAsUserFieldname: GTE
+#line 960 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$gte"};
}
-#line 3116 "parser_gen.cpp"
+#line 3334 "parser_gen.cpp"
break;
- case 143: // aggExprAsUserFieldname: LT
-#line 899 "grammar.yy"
+ case 153: // aggExprAsUserFieldname: LT
+#line 963 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$lt"};
}
-#line 3124 "parser_gen.cpp"
+#line 3342 "parser_gen.cpp"
break;
- case 144: // aggExprAsUserFieldname: LTE
-#line 902 "grammar.yy"
+ case 154: // aggExprAsUserFieldname: LTE
+#line 966 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$lte"};
}
-#line 3132 "parser_gen.cpp"
+#line 3350 "parser_gen.cpp"
break;
- case 145: // aggExprAsUserFieldname: NE
-#line 905 "grammar.yy"
+ case 155: // aggExprAsUserFieldname: NE
+#line 969 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$ne"};
}
-#line 3140 "parser_gen.cpp"
+#line 3358 "parser_gen.cpp"
break;
- case 146: // aggExprAsUserFieldname: CONVERT
-#line 908 "grammar.yy"
+ case 156: // aggExprAsUserFieldname: CONVERT
+#line 972 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$convert"};
}
-#line 3148 "parser_gen.cpp"
+#line 3366 "parser_gen.cpp"
break;
- case 147: // aggExprAsUserFieldname: TO_BOOL
-#line 911 "grammar.yy"
+ case 157: // aggExprAsUserFieldname: TO_BOOL
+#line 975 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$toBool"};
}
-#line 3156 "parser_gen.cpp"
+#line 3374 "parser_gen.cpp"
break;
- case 148: // aggExprAsUserFieldname: TO_DATE
-#line 914 "grammar.yy"
+ case 158: // aggExprAsUserFieldname: TO_DATE
+#line 978 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$toDate"};
}
-#line 3164 "parser_gen.cpp"
+#line 3382 "parser_gen.cpp"
break;
- case 149: // aggExprAsUserFieldname: TO_DECIMAL
-#line 917 "grammar.yy"
+ case 159: // aggExprAsUserFieldname: TO_DECIMAL
+#line 981 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$toDecimal"};
}
-#line 3172 "parser_gen.cpp"
+#line 3390 "parser_gen.cpp"
break;
- case 150: // aggExprAsUserFieldname: TO_DOUBLE
-#line 920 "grammar.yy"
+ case 160: // aggExprAsUserFieldname: TO_DOUBLE
+#line 984 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$toDouble"};
}
-#line 3180 "parser_gen.cpp"
+#line 3398 "parser_gen.cpp"
break;
- case 151: // aggExprAsUserFieldname: TO_INT
-#line 923 "grammar.yy"
+ case 161: // aggExprAsUserFieldname: TO_INT
+#line 987 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$toInt"};
}
-#line 3188 "parser_gen.cpp"
+#line 3406 "parser_gen.cpp"
break;
- case 152: // aggExprAsUserFieldname: TO_LONG
-#line 926 "grammar.yy"
+ case 162: // aggExprAsUserFieldname: TO_LONG
+#line 990 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$toLong"};
}
-#line 3196 "parser_gen.cpp"
+#line 3414 "parser_gen.cpp"
break;
- case 153: // aggExprAsUserFieldname: TO_OBJECT_ID
-#line 929 "grammar.yy"
+ case 163: // aggExprAsUserFieldname: TO_OBJECT_ID
+#line 993 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$toObjectId"};
}
-#line 3204 "parser_gen.cpp"
+#line 3422 "parser_gen.cpp"
break;
- case 154: // aggExprAsUserFieldname: TO_STRING
-#line 932 "grammar.yy"
+ case 164: // aggExprAsUserFieldname: TO_STRING
+#line 996 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$toString"};
}
-#line 3212 "parser_gen.cpp"
+#line 3430 "parser_gen.cpp"
break;
- case 155: // aggExprAsUserFieldname: TYPE
-#line 935 "grammar.yy"
+ case 165: // aggExprAsUserFieldname: TYPE
+#line 999 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$type"};
}
-#line 3220 "parser_gen.cpp"
+#line 3438 "parser_gen.cpp"
break;
- case 156: // aggExprAsUserFieldname: ABS
-#line 938 "grammar.yy"
+ case 166: // aggExprAsUserFieldname: ABS
+#line 1002 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$abs"};
}
-#line 3228 "parser_gen.cpp"
+#line 3446 "parser_gen.cpp"
break;
- case 157: // aggExprAsUserFieldname: CEIL
-#line 941 "grammar.yy"
+ case 167: // aggExprAsUserFieldname: CEIL
+#line 1005 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$ceil"};
}
-#line 3236 "parser_gen.cpp"
+#line 3454 "parser_gen.cpp"
break;
- case 158: // aggExprAsUserFieldname: DIVIDE
-#line 944 "grammar.yy"
+ case 168: // aggExprAsUserFieldname: DIVIDE
+#line 1008 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$divide"};
}
-#line 3244 "parser_gen.cpp"
+#line 3462 "parser_gen.cpp"
break;
- case 159: // aggExprAsUserFieldname: EXPONENT
-#line 947 "grammar.yy"
+ case 169: // aggExprAsUserFieldname: EXPONENT
+#line 1011 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$exp"};
}
-#line 3252 "parser_gen.cpp"
+#line 3470 "parser_gen.cpp"
break;
- case 160: // aggExprAsUserFieldname: FLOOR
-#line 950 "grammar.yy"
+ case 170: // aggExprAsUserFieldname: FLOOR
+#line 1014 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$floor"};
}
-#line 3260 "parser_gen.cpp"
+#line 3478 "parser_gen.cpp"
break;
- case 161: // aggExprAsUserFieldname: LN
-#line 953 "grammar.yy"
+ case 171: // aggExprAsUserFieldname: LN
+#line 1017 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$ln"};
}
-#line 3268 "parser_gen.cpp"
+#line 3486 "parser_gen.cpp"
break;
- case 162: // aggExprAsUserFieldname: LOG
-#line 956 "grammar.yy"
+ case 172: // aggExprAsUserFieldname: LOG
+#line 1020 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$log"};
}
-#line 3276 "parser_gen.cpp"
+#line 3494 "parser_gen.cpp"
break;
- case 163: // aggExprAsUserFieldname: LOGTEN
-#line 959 "grammar.yy"
+ case 173: // aggExprAsUserFieldname: LOGTEN
+#line 1023 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$log10"};
}
-#line 3284 "parser_gen.cpp"
+#line 3502 "parser_gen.cpp"
break;
- case 164: // aggExprAsUserFieldname: MOD
-#line 962 "grammar.yy"
+ case 174: // aggExprAsUserFieldname: MOD
+#line 1026 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$mod"};
}
-#line 3292 "parser_gen.cpp"
+#line 3510 "parser_gen.cpp"
break;
- case 165: // aggExprAsUserFieldname: MULTIPLY
-#line 965 "grammar.yy"
+ case 175: // aggExprAsUserFieldname: MULTIPLY
+#line 1029 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$multiply"};
}
-#line 3300 "parser_gen.cpp"
+#line 3518 "parser_gen.cpp"
break;
- case 166: // aggExprAsUserFieldname: POW
-#line 968 "grammar.yy"
+ case 176: // aggExprAsUserFieldname: POW
+#line 1032 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$pow"};
}
-#line 3308 "parser_gen.cpp"
+#line 3526 "parser_gen.cpp"
break;
- case 167: // aggExprAsUserFieldname: ROUND
-#line 971 "grammar.yy"
+ case 177: // aggExprAsUserFieldname: ROUND
+#line 1035 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$round"};
}
-#line 3316 "parser_gen.cpp"
+#line 3534 "parser_gen.cpp"
break;
- case 168: // aggExprAsUserFieldname: "slice"
-#line 974 "grammar.yy"
+ case 178: // aggExprAsUserFieldname: "slice"
+#line 1038 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$slice"};
}
-#line 3324 "parser_gen.cpp"
+#line 3542 "parser_gen.cpp"
break;
- case 169: // aggExprAsUserFieldname: SQRT
-#line 977 "grammar.yy"
+ case 179: // aggExprAsUserFieldname: SQRT
+#line 1041 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$sqrt"};
}
-#line 3332 "parser_gen.cpp"
+#line 3550 "parser_gen.cpp"
break;
- case 170: // aggExprAsUserFieldname: SUBTRACT
-#line 980 "grammar.yy"
+ case 180: // aggExprAsUserFieldname: SUBTRACT
+#line 1044 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$subtract"};
}
-#line 3340 "parser_gen.cpp"
+#line 3558 "parser_gen.cpp"
break;
- case 171: // aggExprAsUserFieldname: TRUNC
-#line 983 "grammar.yy"
+ case 181: // aggExprAsUserFieldname: TRUNC
+#line 1047 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$trunc"};
}
-#line 3348 "parser_gen.cpp"
+#line 3566 "parser_gen.cpp"
break;
- case 172: // aggExprAsUserFieldname: CONCAT
-#line 986 "grammar.yy"
+ case 182: // aggExprAsUserFieldname: CONCAT
+#line 1050 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$concat"};
}
-#line 3356 "parser_gen.cpp"
+#line 3574 "parser_gen.cpp"
break;
- case 173: // aggExprAsUserFieldname: DATE_FROM_STRING
-#line 989 "grammar.yy"
+ case 183: // aggExprAsUserFieldname: DATE_FROM_PARTS
+#line 1053 "grammar.yy"
+ {
+ yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$dateFromParts"};
+ }
+#line 3582 "parser_gen.cpp"
+ break;
+
+ case 184: // aggExprAsUserFieldname: DATE_TO_PARTS
+#line 1056 "grammar.yy"
+ {
+ yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$dateToParts"};
+ }
+#line 3590 "parser_gen.cpp"
+ break;
+
+ case 185: // aggExprAsUserFieldname: DAY_OF_MONTH
+#line 1059 "grammar.yy"
+ {
+ yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$dayOfMonth"};
+ }
+#line 3598 "parser_gen.cpp"
+ break;
+
+ case 186: // aggExprAsUserFieldname: DAY_OF_WEEK
+#line 1062 "grammar.yy"
+ {
+ yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$dayOfWeek"};
+ }
+#line 3606 "parser_gen.cpp"
+ break;
+
+ case 187: // aggExprAsUserFieldname: DAY_OF_YEAR
+#line 1065 "grammar.yy"
+ {
+ yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$dayOfYear"};
+ }
+#line 3614 "parser_gen.cpp"
+ break;
+
+ case 188: // aggExprAsUserFieldname: HOUR
+#line 1068 "grammar.yy"
+ {
+ yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$hour"};
+ }
+#line 3622 "parser_gen.cpp"
+ break;
+
+ case 189: // aggExprAsUserFieldname: ISO_DAY_OF_WEEK
+#line 1071 "grammar.yy"
+ {
+ yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$isoDayOfWeek"};
+ }
+#line 3630 "parser_gen.cpp"
+ break;
+
+ case 190: // aggExprAsUserFieldname: ISO_WEEK
+#line 1074 "grammar.yy"
+ {
+ yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$isoWeek"};
+ }
+#line 3638 "parser_gen.cpp"
+ break;
+
+ case 191: // aggExprAsUserFieldname: ISO_WEEK_YEAR
+#line 1077 "grammar.yy"
+ {
+ yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$isoWeekYear"};
+ }
+#line 3646 "parser_gen.cpp"
+ break;
+
+ case 192: // aggExprAsUserFieldname: MILLISECOND
+#line 1080 "grammar.yy"
+ {
+ yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$millisecond"};
+ }
+#line 3654 "parser_gen.cpp"
+ break;
+
+ case 193: // aggExprAsUserFieldname: MINUTE
+#line 1083 "grammar.yy"
+ {
+ yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$minute"};
+ }
+#line 3662 "parser_gen.cpp"
+ break;
+
+ case 194: // aggExprAsUserFieldname: MONTH
+#line 1086 "grammar.yy"
+ {
+ yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$month"};
+ }
+#line 3670 "parser_gen.cpp"
+ break;
+
+ case 195: // aggExprAsUserFieldname: SECOND
+#line 1089 "grammar.yy"
+ {
+ yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$second"};
+ }
+#line 3678 "parser_gen.cpp"
+ break;
+
+ case 196: // aggExprAsUserFieldname: WEEK
+#line 1092 "grammar.yy"
+ {
+ yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$week"};
+ }
+#line 3686 "parser_gen.cpp"
+ break;
+
+ case 197: // aggExprAsUserFieldname: YEAR
+#line 1095 "grammar.yy"
+ {
+ yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$year"};
+ }
+#line 3694 "parser_gen.cpp"
+ break;
+
+ case 198: // aggExprAsUserFieldname: DATE_FROM_STRING
+#line 1098 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$dateFromString"};
}
-#line 3364 "parser_gen.cpp"
+#line 3702 "parser_gen.cpp"
break;
- case 174: // aggExprAsUserFieldname: DATE_TO_STRING
-#line 992 "grammar.yy"
+ case 199: // aggExprAsUserFieldname: DATE_TO_STRING
+#line 1101 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$dateToString"};
}
-#line 3372 "parser_gen.cpp"
+#line 3710 "parser_gen.cpp"
break;
- case 175: // aggExprAsUserFieldname: INDEX_OF_BYTES
-#line 995 "grammar.yy"
+ case 200: // aggExprAsUserFieldname: INDEX_OF_BYTES
+#line 1104 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$indexOfBytes"};
}
-#line 3380 "parser_gen.cpp"
+#line 3718 "parser_gen.cpp"
break;
- case 176: // aggExprAsUserFieldname: INDEX_OF_CP
-#line 998 "grammar.yy"
+ case 201: // aggExprAsUserFieldname: INDEX_OF_CP
+#line 1107 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$indexOfCP"};
}
-#line 3388 "parser_gen.cpp"
+#line 3726 "parser_gen.cpp"
break;
- case 177: // aggExprAsUserFieldname: LTRIM
-#line 1001 "grammar.yy"
+ case 202: // aggExprAsUserFieldname: LTRIM
+#line 1110 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$ltrim"};
}
-#line 3396 "parser_gen.cpp"
+#line 3734 "parser_gen.cpp"
break;
- case 178: // aggExprAsUserFieldname: META
-#line 1004 "grammar.yy"
+ case 203: // aggExprAsUserFieldname: META
+#line 1113 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$meta"};
}
-#line 3404 "parser_gen.cpp"
+#line 3742 "parser_gen.cpp"
break;
- case 179: // aggExprAsUserFieldname: REGEX_FIND
-#line 1007 "grammar.yy"
+ case 204: // aggExprAsUserFieldname: REGEX_FIND
+#line 1116 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$regexFind"};
}
-#line 3412 "parser_gen.cpp"
+#line 3750 "parser_gen.cpp"
break;
- case 180: // aggExprAsUserFieldname: REGEX_FIND_ALL
-#line 1010 "grammar.yy"
+ case 205: // aggExprAsUserFieldname: REGEX_FIND_ALL
+#line 1119 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$regexFindAll"};
}
-#line 3420 "parser_gen.cpp"
+#line 3758 "parser_gen.cpp"
break;
- case 181: // aggExprAsUserFieldname: REGEX_MATCH
-#line 1013 "grammar.yy"
+ case 206: // aggExprAsUserFieldname: REGEX_MATCH
+#line 1122 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$regexMatch"};
}
-#line 3428 "parser_gen.cpp"
+#line 3766 "parser_gen.cpp"
break;
- case 182: // aggExprAsUserFieldname: REPLACE_ONE
-#line 1016 "grammar.yy"
+ case 207: // aggExprAsUserFieldname: REPLACE_ONE
+#line 1125 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$replaceOne"};
}
-#line 3436 "parser_gen.cpp"
+#line 3774 "parser_gen.cpp"
break;
- case 183: // aggExprAsUserFieldname: REPLACE_ALL
-#line 1019 "grammar.yy"
+ case 208: // aggExprAsUserFieldname: REPLACE_ALL
+#line 1128 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$replaceAll"};
}
-#line 3444 "parser_gen.cpp"
+#line 3782 "parser_gen.cpp"
break;
- case 184: // aggExprAsUserFieldname: RTRIM
-#line 1022 "grammar.yy"
+ case 209: // aggExprAsUserFieldname: RTRIM
+#line 1131 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$rtrim"};
}
-#line 3452 "parser_gen.cpp"
+#line 3790 "parser_gen.cpp"
break;
- case 185: // aggExprAsUserFieldname: SPLIT
-#line 1025 "grammar.yy"
+ case 210: // aggExprAsUserFieldname: SPLIT
+#line 1134 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$split"};
}
-#line 3460 "parser_gen.cpp"
+#line 3798 "parser_gen.cpp"
break;
- case 186: // aggExprAsUserFieldname: STR_LEN_BYTES
-#line 1028 "grammar.yy"
+ case 211: // aggExprAsUserFieldname: STR_LEN_BYTES
+#line 1137 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$strLenBytes"};
}
-#line 3468 "parser_gen.cpp"
+#line 3806 "parser_gen.cpp"
break;
- case 187: // aggExprAsUserFieldname: STR_LEN_CP
-#line 1031 "grammar.yy"
+ case 212: // aggExprAsUserFieldname: STR_LEN_CP
+#line 1140 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$strLenCP"};
}
-#line 3476 "parser_gen.cpp"
+#line 3814 "parser_gen.cpp"
break;
- case 188: // aggExprAsUserFieldname: STR_CASE_CMP
-#line 1034 "grammar.yy"
+ case 213: // aggExprAsUserFieldname: STR_CASE_CMP
+#line 1143 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$strcasecmp"};
}
-#line 3484 "parser_gen.cpp"
+#line 3822 "parser_gen.cpp"
break;
- case 189: // aggExprAsUserFieldname: SUBSTR
-#line 1037 "grammar.yy"
+ case 214: // aggExprAsUserFieldname: SUBSTR
+#line 1146 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$substr"};
}
-#line 3492 "parser_gen.cpp"
+#line 3830 "parser_gen.cpp"
break;
- case 190: // aggExprAsUserFieldname: SUBSTR_BYTES
-#line 1040 "grammar.yy"
+ case 215: // aggExprAsUserFieldname: SUBSTR_BYTES
+#line 1149 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$substrBytes"};
}
-#line 3500 "parser_gen.cpp"
+#line 3838 "parser_gen.cpp"
break;
- case 191: // aggExprAsUserFieldname: SUBSTR_CP
-#line 1043 "grammar.yy"
+ case 216: // aggExprAsUserFieldname: SUBSTR_CP
+#line 1152 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$substrCP"};
}
-#line 3508 "parser_gen.cpp"
+#line 3846 "parser_gen.cpp"
break;
- case 192: // aggExprAsUserFieldname: TO_LOWER
-#line 1046 "grammar.yy"
+ case 217: // aggExprAsUserFieldname: TO_LOWER
+#line 1155 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$toLower"};
}
-#line 3516 "parser_gen.cpp"
+#line 3854 "parser_gen.cpp"
break;
- case 193: // aggExprAsUserFieldname: TRIM
-#line 1049 "grammar.yy"
+ case 218: // aggExprAsUserFieldname: TRIM
+#line 1158 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$trim"};
}
-#line 3524 "parser_gen.cpp"
+#line 3862 "parser_gen.cpp"
break;
- case 194: // aggExprAsUserFieldname: TO_UPPER
-#line 1052 "grammar.yy"
+ case 219: // aggExprAsUserFieldname: TO_UPPER
+#line 1161 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$toUpper"};
}
-#line 3532 "parser_gen.cpp"
+#line 3870 "parser_gen.cpp"
break;
- case 195: // aggExprAsUserFieldname: "allElementsTrue"
-#line 1055 "grammar.yy"
+ case 220: // aggExprAsUserFieldname: "allElementsTrue"
+#line 1164 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$allElementsTrue"};
}
-#line 3540 "parser_gen.cpp"
+#line 3878 "parser_gen.cpp"
break;
- case 196: // aggExprAsUserFieldname: "anyElementTrue"
-#line 1058 "grammar.yy"
+ case 221: // aggExprAsUserFieldname: "anyElementTrue"
+#line 1167 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$anyElementTrue"};
}
-#line 3548 "parser_gen.cpp"
+#line 3886 "parser_gen.cpp"
break;
- case 197: // aggExprAsUserFieldname: "setDifference"
-#line 1061 "grammar.yy"
+ case 222: // aggExprAsUserFieldname: "setDifference"
+#line 1170 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$setDifference"};
}
-#line 3556 "parser_gen.cpp"
+#line 3894 "parser_gen.cpp"
break;
- case 198: // aggExprAsUserFieldname: "setEquals"
-#line 1064 "grammar.yy"
+ case 223: // aggExprAsUserFieldname: "setEquals"
+#line 1173 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$setEquals"};
}
-#line 3564 "parser_gen.cpp"
+#line 3902 "parser_gen.cpp"
break;
- case 199: // aggExprAsUserFieldname: "setIntersection"
-#line 1067 "grammar.yy"
+ case 224: // aggExprAsUserFieldname: "setIntersection"
+#line 1176 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$setIntersection"};
}
-#line 3572 "parser_gen.cpp"
+#line 3910 "parser_gen.cpp"
break;
- case 200: // aggExprAsUserFieldname: "setIsSubset"
-#line 1070 "grammar.yy"
+ case 225: // aggExprAsUserFieldname: "setIsSubset"
+#line 1179 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$setIsSubset"};
}
-#line 3580 "parser_gen.cpp"
+#line 3918 "parser_gen.cpp"
break;
- case 201: // aggExprAsUserFieldname: "setUnion"
-#line 1073 "grammar.yy"
+ case 226: // aggExprAsUserFieldname: "setUnion"
+#line 1182 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$setUnion"};
}
-#line 3588 "parser_gen.cpp"
+#line 3926 "parser_gen.cpp"
break;
- case 202: // aggExprAsUserFieldname: SIN
-#line 1076 "grammar.yy"
+ case 227: // aggExprAsUserFieldname: SIN
+#line 1185 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$sin"};
}
-#line 3596 "parser_gen.cpp"
+#line 3934 "parser_gen.cpp"
break;
- case 203: // aggExprAsUserFieldname: COS
-#line 1079 "grammar.yy"
+ case 228: // aggExprAsUserFieldname: COS
+#line 1188 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$cos"};
}
-#line 3604 "parser_gen.cpp"
+#line 3942 "parser_gen.cpp"
break;
- case 204: // aggExprAsUserFieldname: TAN
-#line 1082 "grammar.yy"
+ case 229: // aggExprAsUserFieldname: TAN
+#line 1191 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$tan"};
}
-#line 3612 "parser_gen.cpp"
+#line 3950 "parser_gen.cpp"
break;
- case 205: // aggExprAsUserFieldname: SINH
-#line 1085 "grammar.yy"
+ case 230: // aggExprAsUserFieldname: SINH
+#line 1194 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$sinh"};
}
-#line 3620 "parser_gen.cpp"
+#line 3958 "parser_gen.cpp"
break;
- case 206: // aggExprAsUserFieldname: COSH
-#line 1088 "grammar.yy"
+ case 231: // aggExprAsUserFieldname: COSH
+#line 1197 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$cosh"};
}
-#line 3628 "parser_gen.cpp"
+#line 3966 "parser_gen.cpp"
break;
- case 207: // aggExprAsUserFieldname: TANH
-#line 1091 "grammar.yy"
+ case 232: // aggExprAsUserFieldname: TANH
+#line 1200 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$tanh"};
}
-#line 3636 "parser_gen.cpp"
+#line 3974 "parser_gen.cpp"
break;
- case 208: // aggExprAsUserFieldname: ASIN
-#line 1094 "grammar.yy"
+ case 233: // aggExprAsUserFieldname: ASIN
+#line 1203 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$asin"};
}
-#line 3644 "parser_gen.cpp"
+#line 3982 "parser_gen.cpp"
break;
- case 209: // aggExprAsUserFieldname: ACOS
-#line 1097 "grammar.yy"
+ case 234: // aggExprAsUserFieldname: ACOS
+#line 1206 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$acos"};
}
-#line 3652 "parser_gen.cpp"
+#line 3990 "parser_gen.cpp"
break;
- case 210: // aggExprAsUserFieldname: ATAN
-#line 1100 "grammar.yy"
+ case 235: // aggExprAsUserFieldname: ATAN
+#line 1209 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$atan"};
}
-#line 3660 "parser_gen.cpp"
+#line 3998 "parser_gen.cpp"
break;
- case 211: // aggExprAsUserFieldname: ASINH
-#line 1103 "grammar.yy"
+ case 236: // aggExprAsUserFieldname: ASINH
+#line 1212 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$asinh"};
}
-#line 3668 "parser_gen.cpp"
+#line 4006 "parser_gen.cpp"
break;
- case 212: // aggExprAsUserFieldname: ACOSH
-#line 1106 "grammar.yy"
+ case 237: // aggExprAsUserFieldname: ACOSH
+#line 1215 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$acosh"};
}
-#line 3676 "parser_gen.cpp"
+#line 4014 "parser_gen.cpp"
break;
- case 213: // aggExprAsUserFieldname: ATANH
-#line 1109 "grammar.yy"
+ case 238: // aggExprAsUserFieldname: ATANH
+#line 1218 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$atanh"};
}
-#line 3684 "parser_gen.cpp"
+#line 4022 "parser_gen.cpp"
break;
- case 214: // aggExprAsUserFieldname: DEGREES_TO_RADIANS
-#line 1112 "grammar.yy"
+ case 239: // aggExprAsUserFieldname: DEGREES_TO_RADIANS
+#line 1221 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$degreesToRadians"};
}
-#line 3692 "parser_gen.cpp"
+#line 4030 "parser_gen.cpp"
break;
- case 215: // aggExprAsUserFieldname: RADIANS_TO_DEGREES
-#line 1115 "grammar.yy"
+ case 240: // aggExprAsUserFieldname: RADIANS_TO_DEGREES
+#line 1224 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"$radiansToDegrees"};
}
-#line 3700 "parser_gen.cpp"
+#line 4038 "parser_gen.cpp"
break;
- case 216: // string: "string"
-#line 1122 "grammar.yy"
+ case 241: // string: "string"
+#line 1231 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{UserString{YY_MOVE(yystack_[0].value.as<std::string>())}};
}
-#line 3708 "parser_gen.cpp"
+#line 4046 "parser_gen.cpp"
break;
- case 217: // string: "geoNearDistance"
-#line 1127 "grammar.yy"
+ case 242: // string: "geoNearDistance"
+#line 1236 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserString{"geoNearDistance"}};
}
-#line 3716 "parser_gen.cpp"
+#line 4054 "parser_gen.cpp"
break;
- case 218: // string: "geoNearPoint"
-#line 1130 "grammar.yy"
+ case 243: // string: "geoNearPoint"
+#line 1239 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserString{"geoNearPoint"}};
}
-#line 3724 "parser_gen.cpp"
+#line 4062 "parser_gen.cpp"
break;
- case 219: // string: "indexKey"
-#line 1133 "grammar.yy"
+ case 244: // string: "indexKey"
+#line 1242 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserString{"indexKey"}};
}
-#line 3732 "parser_gen.cpp"
+#line 4070 "parser_gen.cpp"
break;
- case 220: // string: "randVal"
-#line 1136 "grammar.yy"
+ case 245: // string: "randVal"
+#line 1245 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserString{"randVal"}};
}
-#line 3740 "parser_gen.cpp"
+#line 4078 "parser_gen.cpp"
break;
- case 221: // string: "recordId"
-#line 1139 "grammar.yy"
+ case 246: // string: "recordId"
+#line 1248 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserString{"recordId"}};
}
-#line 3748 "parser_gen.cpp"
+#line 4086 "parser_gen.cpp"
break;
- case 222: // string: "searchHighlights"
-#line 1142 "grammar.yy"
+ case 247: // string: "searchHighlights"
+#line 1251 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserString{"searchHighlights"}};
}
-#line 3756 "parser_gen.cpp"
+#line 4094 "parser_gen.cpp"
break;
- case 223: // string: "searchScore"
-#line 1145 "grammar.yy"
+ case 248: // string: "searchScore"
+#line 1254 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserString{"searchScore"}};
}
-#line 3764 "parser_gen.cpp"
+#line 4102 "parser_gen.cpp"
break;
- case 224: // string: "sortKey"
-#line 1148 "grammar.yy"
+ case 249: // string: "sortKey"
+#line 1257 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserString{"sortKey"}};
}
-#line 3772 "parser_gen.cpp"
+#line 4110 "parser_gen.cpp"
break;
- case 225: // string: "textScore"
-#line 1151 "grammar.yy"
+ case 250: // string: "textScore"
+#line 1260 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserString{"textScore"}};
}
-#line 3780 "parser_gen.cpp"
+#line 4118 "parser_gen.cpp"
break;
- case 226: // aggregationFieldPath: "$-prefixed string"
-#line 1157 "grammar.yy"
+ case 251: // aggregationFieldPath: "$-prefixed string"
+#line 1266 "grammar.yy"
{
auto str = YY_MOVE(yystack_[0].value.as<std::string>());
auto components = std::vector<std::string>{};
@@ -3893,11 +4231,11 @@ int ParserGen::parse() {
error(yystack_[0].location, status.reason());
yylhs.value.as<CNode>() = CNode{AggregationPath{std::move(components)}};
}
-#line 3796 "parser_gen.cpp"
+#line 4134 "parser_gen.cpp"
break;
- case 227: // variable: "$$-prefixed string"
-#line 1171 "grammar.yy"
+ case 252: // variable: "$$-prefixed string"
+#line 1280 "grammar.yy"
{
auto str = YY_MOVE(yystack_[0].value.as<std::string>());
auto components = std::vector<std::string>{};
@@ -3911,1228 +4249,1252 @@ int ParserGen::parse() {
yylhs.value.as<CNode>() =
CNode{AggregationVariablePath{std::move(components)}};
}
-#line 3812 "parser_gen.cpp"
+#line 4150 "parser_gen.cpp"
break;
- case 228: // binary: "BinData"
-#line 1185 "grammar.yy"
+ case 253: // binary: "BinData"
+#line 1294 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{UserBinary{YY_MOVE(yystack_[0].value.as<BSONBinData>())}};
}
-#line 3820 "parser_gen.cpp"
+#line 4158 "parser_gen.cpp"
break;
- case 229: // undefined: "undefined"
-#line 1191 "grammar.yy"
+ case 254: // undefined: "undefined"
+#line 1300 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserUndefined{}};
}
-#line 3828 "parser_gen.cpp"
+#line 4166 "parser_gen.cpp"
break;
- case 230: // objectId: "ObjectID"
-#line 1197 "grammar.yy"
+ case 255: // objectId: "ObjectID"
+#line 1306 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserObjectId{}};
}
-#line 3836 "parser_gen.cpp"
+#line 4174 "parser_gen.cpp"
break;
- case 231: // date: "Date"
-#line 1203 "grammar.yy"
+ case 256: // date: "Date"
+#line 1312 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{UserDate{YY_MOVE(yystack_[0].value.as<Date_t>())}};
}
-#line 3844 "parser_gen.cpp"
+#line 4182 "parser_gen.cpp"
break;
- case 232: // null: "null"
-#line 1209 "grammar.yy"
+ case 257: // null: "null"
+#line 1318 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserNull{}};
}
-#line 3852 "parser_gen.cpp"
+#line 4190 "parser_gen.cpp"
break;
- case 233: // regex: "regex"
-#line 1215 "grammar.yy"
+ case 258: // regex: "regex"
+#line 1324 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{UserRegex{YY_MOVE(yystack_[0].value.as<BSONRegEx>())}};
}
-#line 3860 "parser_gen.cpp"
+#line 4198 "parser_gen.cpp"
break;
- case 234: // dbPointer: "dbPointer"
-#line 1221 "grammar.yy"
+ case 259: // dbPointer: "dbPointer"
+#line 1330 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{UserDBPointer{YY_MOVE(yystack_[0].value.as<BSONDBRef>())}};
}
-#line 3868 "parser_gen.cpp"
+#line 4206 "parser_gen.cpp"
break;
- case 235: // javascript: "Code"
-#line 1227 "grammar.yy"
+ case 260: // javascript: "Code"
+#line 1336 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{UserJavascript{YY_MOVE(yystack_[0].value.as<BSONCode>())}};
}
-#line 3876 "parser_gen.cpp"
+#line 4214 "parser_gen.cpp"
break;
- case 236: // symbol: "Symbol"
-#line 1233 "grammar.yy"
+ case 261: // symbol: "Symbol"
+#line 1342 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{UserSymbol{YY_MOVE(yystack_[0].value.as<BSONSymbol>())}};
}
-#line 3884 "parser_gen.cpp"
+#line 4222 "parser_gen.cpp"
break;
- case 237: // javascriptWScope: "CodeWScope"
-#line 1239 "grammar.yy"
+ case 262: // javascriptWScope: "CodeWScope"
+#line 1348 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserJavascriptWithScope{
YY_MOVE(yystack_[0].value.as<BSONCodeWScope>())}};
}
-#line 3892 "parser_gen.cpp"
+#line 4230 "parser_gen.cpp"
break;
- case 238: // timestamp: "Timestamp"
-#line 1245 "grammar.yy"
+ case 263: // timestamp: "Timestamp"
+#line 1354 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{UserTimestamp{YY_MOVE(yystack_[0].value.as<Timestamp>())}};
}
-#line 3900 "parser_gen.cpp"
+#line 4238 "parser_gen.cpp"
break;
- case 239: // minKey: "minKey"
-#line 1251 "grammar.yy"
+ case 264: // minKey: "minKey"
+#line 1360 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{UserMinKey{YY_MOVE(yystack_[0].value.as<UserMinKey>())}};
}
-#line 3908 "parser_gen.cpp"
+#line 4246 "parser_gen.cpp"
break;
- case 240: // maxKey: "maxKey"
-#line 1257 "grammar.yy"
+ case 265: // maxKey: "maxKey"
+#line 1366 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{UserMaxKey{YY_MOVE(yystack_[0].value.as<UserMaxKey>())}};
}
-#line 3916 "parser_gen.cpp"
+#line 4254 "parser_gen.cpp"
break;
- case 241: // int: "arbitrary integer"
-#line 1263 "grammar.yy"
+ case 266: // int: "arbitrary integer"
+#line 1372 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{UserInt{YY_MOVE(yystack_[0].value.as<int>())}};
}
-#line 3924 "parser_gen.cpp"
+#line 4262 "parser_gen.cpp"
break;
- case 242: // int: "zero (int)"
-#line 1266 "grammar.yy"
+ case 267: // int: "zero (int)"
+#line 1375 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserInt{0}};
}
-#line 3932 "parser_gen.cpp"
+#line 4270 "parser_gen.cpp"
break;
- case 243: // int: "1 (int)"
-#line 1269 "grammar.yy"
+ case 268: // int: "1 (int)"
+#line 1378 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserInt{1}};
}
-#line 3940 "parser_gen.cpp"
+#line 4278 "parser_gen.cpp"
break;
- case 244: // int: "-1 (int)"
-#line 1272 "grammar.yy"
+ case 269: // int: "-1 (int)"
+#line 1381 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserInt{-1}};
}
-#line 3948 "parser_gen.cpp"
+#line 4286 "parser_gen.cpp"
break;
- case 245: // long: "arbitrary long"
-#line 1278 "grammar.yy"
+ case 270: // long: "arbitrary long"
+#line 1387 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{UserLong{YY_MOVE(yystack_[0].value.as<long long>())}};
}
-#line 3956 "parser_gen.cpp"
+#line 4294 "parser_gen.cpp"
break;
- case 246: // long: "zero (long)"
-#line 1281 "grammar.yy"
+ case 271: // long: "zero (long)"
+#line 1390 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserLong{0ll}};
}
-#line 3964 "parser_gen.cpp"
+#line 4302 "parser_gen.cpp"
break;
- case 247: // long: "1 (long)"
-#line 1284 "grammar.yy"
+ case 272: // long: "1 (long)"
+#line 1393 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserLong{1ll}};
}
-#line 3972 "parser_gen.cpp"
+#line 4310 "parser_gen.cpp"
break;
- case 248: // long: "-1 (long)"
-#line 1287 "grammar.yy"
+ case 273: // long: "-1 (long)"
+#line 1396 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserLong{-1ll}};
}
-#line 3980 "parser_gen.cpp"
+#line 4318 "parser_gen.cpp"
break;
- case 249: // double: "arbitrary double"
-#line 1293 "grammar.yy"
+ case 274: // double: "arbitrary double"
+#line 1402 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{UserDouble{YY_MOVE(yystack_[0].value.as<double>())}};
}
-#line 3988 "parser_gen.cpp"
+#line 4326 "parser_gen.cpp"
break;
- case 250: // double: "zero (double)"
-#line 1296 "grammar.yy"
+ case 275: // double: "zero (double)"
+#line 1405 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserDouble{0.0}};
}
-#line 3996 "parser_gen.cpp"
+#line 4334 "parser_gen.cpp"
break;
- case 251: // double: "1 (double)"
-#line 1299 "grammar.yy"
+ case 276: // double: "1 (double)"
+#line 1408 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserDouble{1.0}};
}
-#line 4004 "parser_gen.cpp"
+#line 4342 "parser_gen.cpp"
break;
- case 252: // double: "-1 (double)"
-#line 1302 "grammar.yy"
+ case 277: // double: "-1 (double)"
+#line 1411 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserDouble{-1.0}};
}
-#line 4012 "parser_gen.cpp"
+#line 4350 "parser_gen.cpp"
break;
- case 253: // decimal: "arbitrary decimal"
-#line 1308 "grammar.yy"
+ case 278: // decimal: "arbitrary decimal"
+#line 1417 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{UserDecimal{YY_MOVE(yystack_[0].value.as<Decimal128>())}};
}
-#line 4020 "parser_gen.cpp"
+#line 4358 "parser_gen.cpp"
break;
- case 254: // decimal: "zero (decimal)"
-#line 1311 "grammar.yy"
+ case 279: // decimal: "zero (decimal)"
+#line 1420 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserDecimal{0.0}};
}
-#line 4028 "parser_gen.cpp"
+#line 4366 "parser_gen.cpp"
break;
- case 255: // decimal: "1 (decimal)"
-#line 1314 "grammar.yy"
+ case 280: // decimal: "1 (decimal)"
+#line 1423 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserDecimal{1.0}};
}
-#line 4036 "parser_gen.cpp"
+#line 4374 "parser_gen.cpp"
break;
- case 256: // decimal: "-1 (decimal)"
-#line 1317 "grammar.yy"
+ case 281: // decimal: "-1 (decimal)"
+#line 1426 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserDecimal{-1.0}};
}
-#line 4044 "parser_gen.cpp"
+#line 4382 "parser_gen.cpp"
break;
- case 257: // bool: "true"
-#line 1323 "grammar.yy"
+ case 282: // bool: "true"
+#line 1432 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserBoolean{true}};
}
-#line 4052 "parser_gen.cpp"
+#line 4390 "parser_gen.cpp"
break;
- case 258: // bool: "false"
-#line 1326 "grammar.yy"
+ case 283: // bool: "false"
+#line 1435 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{UserBoolean{false}};
}
-#line 4060 "parser_gen.cpp"
+#line 4398 "parser_gen.cpp"
break;
- case 259: // simpleValue: string
-#line 1332 "grammar.yy"
+ case 284: // simpleValue: string
+#line 1441 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4066 "parser_gen.cpp"
+#line 4404 "parser_gen.cpp"
break;
- case 260: // simpleValue: aggregationFieldPath
-#line 1333 "grammar.yy"
+ case 285: // simpleValue: aggregationFieldPath
+#line 1442 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4072 "parser_gen.cpp"
+#line 4410 "parser_gen.cpp"
break;
- case 261: // simpleValue: variable
-#line 1334 "grammar.yy"
+ case 286: // simpleValue: variable
+#line 1443 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4078 "parser_gen.cpp"
+#line 4416 "parser_gen.cpp"
break;
- case 262: // simpleValue: binary
-#line 1335 "grammar.yy"
+ case 287: // simpleValue: binary
+#line 1444 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4084 "parser_gen.cpp"
+#line 4422 "parser_gen.cpp"
break;
- case 263: // simpleValue: undefined
-#line 1336 "grammar.yy"
+ case 288: // simpleValue: undefined
+#line 1445 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4090 "parser_gen.cpp"
+#line 4428 "parser_gen.cpp"
break;
- case 264: // simpleValue: objectId
-#line 1337 "grammar.yy"
+ case 289: // simpleValue: objectId
+#line 1446 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4096 "parser_gen.cpp"
+#line 4434 "parser_gen.cpp"
break;
- case 265: // simpleValue: date
-#line 1338 "grammar.yy"
+ case 290: // simpleValue: date
+#line 1447 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4102 "parser_gen.cpp"
+#line 4440 "parser_gen.cpp"
break;
- case 266: // simpleValue: null
-#line 1339 "grammar.yy"
+ case 291: // simpleValue: null
+#line 1448 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4108 "parser_gen.cpp"
+#line 4446 "parser_gen.cpp"
break;
- case 267: // simpleValue: regex
-#line 1340 "grammar.yy"
+ case 292: // simpleValue: regex
+#line 1449 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4114 "parser_gen.cpp"
+#line 4452 "parser_gen.cpp"
break;
- case 268: // simpleValue: dbPointer
-#line 1341 "grammar.yy"
+ case 293: // simpleValue: dbPointer
+#line 1450 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4120 "parser_gen.cpp"
+#line 4458 "parser_gen.cpp"
break;
- case 269: // simpleValue: javascript
-#line 1342 "grammar.yy"
+ case 294: // simpleValue: javascript
+#line 1451 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4126 "parser_gen.cpp"
+#line 4464 "parser_gen.cpp"
break;
- case 270: // simpleValue: symbol
-#line 1343 "grammar.yy"
+ case 295: // simpleValue: symbol
+#line 1452 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4132 "parser_gen.cpp"
+#line 4470 "parser_gen.cpp"
break;
- case 271: // simpleValue: javascriptWScope
-#line 1344 "grammar.yy"
+ case 296: // simpleValue: javascriptWScope
+#line 1453 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4138 "parser_gen.cpp"
+#line 4476 "parser_gen.cpp"
break;
- case 272: // simpleValue: int
-#line 1345 "grammar.yy"
+ case 297: // simpleValue: int
+#line 1454 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4144 "parser_gen.cpp"
+#line 4482 "parser_gen.cpp"
break;
- case 273: // simpleValue: long
-#line 1346 "grammar.yy"
+ case 298: // simpleValue: long
+#line 1455 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4150 "parser_gen.cpp"
+#line 4488 "parser_gen.cpp"
break;
- case 274: // simpleValue: double
-#line 1347 "grammar.yy"
+ case 299: // simpleValue: double
+#line 1456 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4156 "parser_gen.cpp"
+#line 4494 "parser_gen.cpp"
break;
- case 275: // simpleValue: decimal
-#line 1348 "grammar.yy"
+ case 300: // simpleValue: decimal
+#line 1457 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4162 "parser_gen.cpp"
+#line 4500 "parser_gen.cpp"
break;
- case 276: // simpleValue: bool
-#line 1349 "grammar.yy"
+ case 301: // simpleValue: bool
+#line 1458 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4168 "parser_gen.cpp"
+#line 4506 "parser_gen.cpp"
break;
- case 277: // simpleValue: timestamp
-#line 1350 "grammar.yy"
+ case 302: // simpleValue: timestamp
+#line 1459 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4174 "parser_gen.cpp"
+#line 4512 "parser_gen.cpp"
break;
- case 278: // simpleValue: minKey
-#line 1351 "grammar.yy"
+ case 303: // simpleValue: minKey
+#line 1460 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4180 "parser_gen.cpp"
+#line 4518 "parser_gen.cpp"
break;
- case 279: // simpleValue: maxKey
-#line 1352 "grammar.yy"
+ case 304: // simpleValue: maxKey
+#line 1461 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4186 "parser_gen.cpp"
+#line 4524 "parser_gen.cpp"
break;
- case 280: // expressions: %empty
-#line 1359 "grammar.yy"
+ case 305: // expressions: %empty
+#line 1468 "grammar.yy"
{
}
-#line 4192 "parser_gen.cpp"
+#line 4530 "parser_gen.cpp"
break;
- case 281: // expressions: expressions expression
-#line 1360 "grammar.yy"
+ case 306: // expressions: expressions expression
+#line 1469 "grammar.yy"
{
yylhs.value.as<std::vector<CNode>>() =
YY_MOVE(yystack_[1].value.as<std::vector<CNode>>());
yylhs.value.as<std::vector<CNode>>().emplace_back(
YY_MOVE(yystack_[0].value.as<CNode>()));
}
-#line 4201 "parser_gen.cpp"
+#line 4539 "parser_gen.cpp"
break;
- case 282: // expression: simpleValue
-#line 1367 "grammar.yy"
+ case 307: // expression: simpleValue
+#line 1476 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4207 "parser_gen.cpp"
+#line 4545 "parser_gen.cpp"
break;
- case 283: // expression: expressionObject
-#line 1367 "grammar.yy"
+ case 308: // expression: expressionObject
+#line 1476 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4213 "parser_gen.cpp"
+#line 4551 "parser_gen.cpp"
break;
- case 284: // expression: expressionArray
-#line 1367 "grammar.yy"
+ case 309: // expression: expressionArray
+#line 1476 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4219 "parser_gen.cpp"
+#line 4557 "parser_gen.cpp"
break;
- case 285: // expression: nonArrayNonObjCompoundExpression
-#line 1367 "grammar.yy"
+ case 310: // expression: nonArrayNonObjCompoundExpression
+#line 1476 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4225 "parser_gen.cpp"
+#line 4563 "parser_gen.cpp"
break;
- case 286: // nonArrayExpression: simpleValue
-#line 1371 "grammar.yy"
+ case 311: // nonArrayExpression: simpleValue
+#line 1480 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4231 "parser_gen.cpp"
+#line 4569 "parser_gen.cpp"
break;
- case 287: // nonArrayExpression: nonArrayCompoundExpression
-#line 1371 "grammar.yy"
+ case 312: // nonArrayExpression: nonArrayCompoundExpression
+#line 1480 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4237 "parser_gen.cpp"
+#line 4575 "parser_gen.cpp"
break;
- case 288: // nonArrayCompoundExpression: expressionObject
-#line 1375 "grammar.yy"
+ case 313: // nonArrayNonObjExpression: simpleValue
+#line 1484 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4243 "parser_gen.cpp"
+#line 4581 "parser_gen.cpp"
break;
- case 289: // nonArrayCompoundExpression: nonArrayNonObjCompoundExpression
-#line 1375 "grammar.yy"
+ case 314: // nonArrayNonObjExpression: nonArrayNonObjCompoundExpression
+#line 1484 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
+ }
+#line 4587 "parser_gen.cpp"
+ break;
+
+ case 315: // nonArrayCompoundExpression: expressionObject
+#line 1488 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
+ }
+#line 4593 "parser_gen.cpp"
+ break;
+
+ case 316: // nonArrayCompoundExpression: nonArrayNonObjCompoundExpression
+#line 1488 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4249 "parser_gen.cpp"
+#line 4599 "parser_gen.cpp"
break;
- case 290: // nonArrayNonObjCompoundExpression: arrayManipulation
-#line 1379 "grammar.yy"
+ case 317: // nonArrayNonObjCompoundExpression: arrayManipulation
+#line 1492 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4255 "parser_gen.cpp"
+#line 4605 "parser_gen.cpp"
break;
- case 291: // nonArrayNonObjCompoundExpression: maths
-#line 1379 "grammar.yy"
+ case 318: // nonArrayNonObjCompoundExpression: maths
+#line 1492 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4261 "parser_gen.cpp"
+#line 4611 "parser_gen.cpp"
break;
- case 292: // nonArrayNonObjCompoundExpression: meta
-#line 1379 "grammar.yy"
+ case 319: // nonArrayNonObjCompoundExpression: meta
+#line 1492 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4267 "parser_gen.cpp"
+#line 4617 "parser_gen.cpp"
break;
- case 293: // nonArrayNonObjCompoundExpression: boolExprs
-#line 1379 "grammar.yy"
+ case 320: // nonArrayNonObjCompoundExpression: boolExprs
+#line 1492 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4273 "parser_gen.cpp"
+#line 4623 "parser_gen.cpp"
break;
- case 294: // nonArrayNonObjCompoundExpression: literalEscapes
-#line 1379 "grammar.yy"
+ case 321: // nonArrayNonObjCompoundExpression: literalEscapes
+#line 1492 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4279 "parser_gen.cpp"
+#line 4629 "parser_gen.cpp"
break;
- case 295: // nonArrayNonObjCompoundExpression: compExprs
-#line 1379 "grammar.yy"
+ case 322: // nonArrayNonObjCompoundExpression: compExprs
+#line 1492 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4285 "parser_gen.cpp"
+#line 4635 "parser_gen.cpp"
break;
- case 296: // nonArrayNonObjCompoundExpression: typeExpression
-#line 1379 "grammar.yy"
+ case 323: // nonArrayNonObjCompoundExpression: typeExpression
+#line 1492 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4291 "parser_gen.cpp"
+#line 4641 "parser_gen.cpp"
break;
- case 297: // nonArrayNonObjCompoundExpression: stringExps
-#line 1380 "grammar.yy"
+ case 324: // nonArrayNonObjCompoundExpression: stringExps
+#line 1493 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4297 "parser_gen.cpp"
+#line 4647 "parser_gen.cpp"
break;
- case 298: // nonArrayNonObjCompoundExpression: setExpression
-#line 1380 "grammar.yy"
+ case 325: // nonArrayNonObjCompoundExpression: setExpression
+#line 1493 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4303 "parser_gen.cpp"
+#line 4653 "parser_gen.cpp"
break;
- case 299: // nonArrayNonObjCompoundExpression: trig
-#line 1380 "grammar.yy"
+ case 326: // nonArrayNonObjCompoundExpression: trig
+#line 1493 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4309 "parser_gen.cpp"
+#line 4659 "parser_gen.cpp"
break;
- case 300: // exprFixedTwoArg: "array" expression expression "end of array"
-#line 1385 "grammar.yy"
+ case 327: // nonArrayNonObjCompoundExpression: dateExps
+#line 1493 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
+ }
+#line 4665 "parser_gen.cpp"
+ break;
+
+ case 328: // exprFixedTwoArg: "array" expression expression "end of array"
+#line 1498 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{CNode::ArrayChildren{YY_MOVE(yystack_[2].value.as<CNode>()),
YY_MOVE(yystack_[1].value.as<CNode>())}};
}
-#line 4317 "parser_gen.cpp"
+#line 4673 "parser_gen.cpp"
break;
- case 301: // exprFixedThreeArg: "array" expression expression expression "end
+ case 329: // exprFixedThreeArg: "array" expression expression expression "end
// of array"
-#line 1392 "grammar.yy"
+#line 1505 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{CNode::ArrayChildren{YY_MOVE(yystack_[3].value.as<CNode>()),
YY_MOVE(yystack_[2].value.as<CNode>()),
YY_MOVE(yystack_[1].value.as<CNode>())}};
}
-#line 4325 "parser_gen.cpp"
+#line 4681 "parser_gen.cpp"
break;
- case 302: // compoundNonObjectExpression: expressionArray
-#line 1398 "grammar.yy"
+ case 330: // compoundNonObjectExpression: expressionArray
+#line 1511 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4331 "parser_gen.cpp"
+#line 4687 "parser_gen.cpp"
break;
- case 303: // compoundNonObjectExpression: nonArrayNonObjCompoundExpression
-#line 1398 "grammar.yy"
+ case 331: // compoundNonObjectExpression: nonArrayNonObjCompoundExpression
+#line 1511 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4337 "parser_gen.cpp"
+#line 4693 "parser_gen.cpp"
break;
- case 304: // arrayManipulation: slice
-#line 1402 "grammar.yy"
+ case 332: // arrayManipulation: slice
+#line 1514 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4343 "parser_gen.cpp"
+#line 4699 "parser_gen.cpp"
break;
- case 305: // slice: "object" "slice" exprFixedTwoArg "end of object"
-#line 1406 "grammar.yy"
+ case 333: // slice: "object" "slice" exprFixedTwoArg "end of object"
+#line 1518 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::slice, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4352 "parser_gen.cpp"
+#line 4708 "parser_gen.cpp"
break;
- case 306: // slice: "object" "slice" exprFixedThreeArg "end of object"
-#line 1410 "grammar.yy"
+ case 334: // slice: "object" "slice" exprFixedThreeArg "end of object"
+#line 1522 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::slice, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4361 "parser_gen.cpp"
+#line 4717 "parser_gen.cpp"
break;
- case 307: // expressionArray: "array" expressions "end of array"
-#line 1419 "grammar.yy"
+ case 335: // expressionArray: "array" expressions "end of array"
+#line 1531 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{YY_MOVE(yystack_[1].value.as<std::vector<CNode>>())};
}
-#line 4369 "parser_gen.cpp"
+#line 4725 "parser_gen.cpp"
break;
- case 308: // expressionSingletonArray: "array" expression "end of array"
-#line 1426 "grammar.yy"
+ case 336: // expressionSingletonArray: "array" expression "end of array"
+#line 1538 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{CNode::ArrayChildren{YY_MOVE(yystack_[1].value.as<CNode>())}};
}
-#line 4377 "parser_gen.cpp"
+#line 4733 "parser_gen.cpp"
break;
- case 309: // singleArgExpression: nonArrayExpression
-#line 1431 "grammar.yy"
+ case 337: // singleArgExpression: nonArrayExpression
+#line 1543 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4383 "parser_gen.cpp"
+#line 4739 "parser_gen.cpp"
break;
- case 310: // singleArgExpression: expressionSingletonArray
-#line 1431 "grammar.yy"
+ case 338: // singleArgExpression: expressionSingletonArray
+#line 1543 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4389 "parser_gen.cpp"
+#line 4745 "parser_gen.cpp"
break;
- case 311: // expressionObject: "object" expressionFields "end of object"
-#line 1436 "grammar.yy"
+ case 339: // expressionObject: "object" expressionFields "end of object"
+#line 1548 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[1].value.as<CNode>());
}
-#line 4397 "parser_gen.cpp"
+#line 4753 "parser_gen.cpp"
break;
- case 312: // expressionFields: %empty
-#line 1442 "grammar.yy"
+ case 340: // expressionFields: %empty
+#line 1554 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode::noopLeaf();
}
-#line 4405 "parser_gen.cpp"
+#line 4761 "parser_gen.cpp"
break;
- case 313: // expressionFields: expressionFields expressionField
-#line 1445 "grammar.yy"
+ case 341: // expressionFields: expressionFields expressionField
+#line 1557 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[1].value.as<CNode>());
yylhs.value.as<CNode>().objectChildren().emplace_back(
YY_MOVE(yystack_[0].value.as<std::pair<CNode::Fieldname, CNode>>()));
}
-#line 4414 "parser_gen.cpp"
+#line 4770 "parser_gen.cpp"
break;
- case 314: // expressionField: expressionFieldname expression
-#line 1452 "grammar.yy"
+ case 342: // expressionField: expressionFieldname expression
+#line 1564 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = {
YY_MOVE(yystack_[1].value.as<CNode::Fieldname>()),
YY_MOVE(yystack_[0].value.as<CNode>())};
}
-#line 4422 "parser_gen.cpp"
+#line 4778 "parser_gen.cpp"
break;
- case 315: // expressionFieldname: invariableUserFieldname
-#line 1459 "grammar.yy"
+ case 343: // expressionFieldname: invariableUserFieldname
+#line 1571 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() =
YY_MOVE(yystack_[0].value.as<CNode::Fieldname>());
}
-#line 4428 "parser_gen.cpp"
+#line 4784 "parser_gen.cpp"
break;
- case 316: // expressionFieldname: stageAsUserFieldname
-#line 1459 "grammar.yy"
+ case 344: // expressionFieldname: stageAsUserFieldname
+#line 1571 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() =
YY_MOVE(yystack_[0].value.as<CNode::Fieldname>());
}
-#line 4434 "parser_gen.cpp"
+#line 4790 "parser_gen.cpp"
break;
- case 317: // expressionFieldname: argAsUserFieldname
-#line 1459 "grammar.yy"
+ case 345: // expressionFieldname: argAsUserFieldname
+#line 1571 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() =
YY_MOVE(yystack_[0].value.as<CNode::Fieldname>());
}
-#line 4440 "parser_gen.cpp"
+#line 4796 "parser_gen.cpp"
break;
- case 318: // expressionFieldname: idAsUserFieldname
-#line 1459 "grammar.yy"
+ case 346: // expressionFieldname: idAsUserFieldname
+#line 1571 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() =
YY_MOVE(yystack_[0].value.as<CNode::Fieldname>());
}
-#line 4446 "parser_gen.cpp"
+#line 4802 "parser_gen.cpp"
break;
- case 319: // idAsUserFieldname: ID
-#line 1463 "grammar.yy"
+ case 347: // idAsUserFieldname: ID
+#line 1575 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() = UserFieldname{"_id"};
}
-#line 4454 "parser_gen.cpp"
+#line 4810 "parser_gen.cpp"
break;
- case 320: // idAsProjectionPath: ID
-#line 1469 "grammar.yy"
+ case 348: // idAsProjectionPath: ID
+#line 1581 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() =
ProjectionPath{makeVector<std::string>("_id")};
}
-#line 4462 "parser_gen.cpp"
+#line 4818 "parser_gen.cpp"
break;
- case 321: // maths: add
-#line 1475 "grammar.yy"
+ case 349: // maths: add
+#line 1587 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4468 "parser_gen.cpp"
+#line 4824 "parser_gen.cpp"
break;
- case 322: // maths: abs
-#line 1475 "grammar.yy"
+ case 350: // maths: abs
+#line 1587 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4474 "parser_gen.cpp"
+#line 4830 "parser_gen.cpp"
break;
- case 323: // maths: ceil
-#line 1475 "grammar.yy"
+ case 351: // maths: ceil
+#line 1587 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4480 "parser_gen.cpp"
+#line 4836 "parser_gen.cpp"
break;
- case 324: // maths: divide
-#line 1475 "grammar.yy"
+ case 352: // maths: divide
+#line 1587 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4486 "parser_gen.cpp"
+#line 4842 "parser_gen.cpp"
break;
- case 325: // maths: exponent
-#line 1475 "grammar.yy"
+ case 353: // maths: exponent
+#line 1587 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4492 "parser_gen.cpp"
+#line 4848 "parser_gen.cpp"
break;
- case 326: // maths: floor
-#line 1475 "grammar.yy"
+ case 354: // maths: floor
+#line 1587 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4498 "parser_gen.cpp"
+#line 4854 "parser_gen.cpp"
break;
- case 327: // maths: ln
-#line 1475 "grammar.yy"
+ case 355: // maths: ln
+#line 1587 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4504 "parser_gen.cpp"
+#line 4860 "parser_gen.cpp"
break;
- case 328: // maths: log
-#line 1475 "grammar.yy"
+ case 356: // maths: log
+#line 1587 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4510 "parser_gen.cpp"
+#line 4866 "parser_gen.cpp"
break;
- case 329: // maths: logten
-#line 1475 "grammar.yy"
+ case 357: // maths: logten
+#line 1587 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4516 "parser_gen.cpp"
+#line 4872 "parser_gen.cpp"
break;
- case 330: // maths: mod
-#line 1475 "grammar.yy"
+ case 358: // maths: mod
+#line 1587 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4522 "parser_gen.cpp"
+#line 4878 "parser_gen.cpp"
break;
- case 331: // maths: multiply
-#line 1475 "grammar.yy"
+ case 359: // maths: multiply
+#line 1587 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4528 "parser_gen.cpp"
+#line 4884 "parser_gen.cpp"
break;
- case 332: // maths: pow
-#line 1475 "grammar.yy"
+ case 360: // maths: pow
+#line 1587 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4534 "parser_gen.cpp"
+#line 4890 "parser_gen.cpp"
break;
- case 333: // maths: round
-#line 1476 "grammar.yy"
+ case 361: // maths: round
+#line 1588 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4540 "parser_gen.cpp"
+#line 4896 "parser_gen.cpp"
break;
- case 334: // maths: sqrt
-#line 1476 "grammar.yy"
+ case 362: // maths: sqrt
+#line 1588 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4546 "parser_gen.cpp"
+#line 4902 "parser_gen.cpp"
break;
- case 335: // maths: subtract
-#line 1476 "grammar.yy"
+ case 363: // maths: subtract
+#line 1588 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4552 "parser_gen.cpp"
+#line 4908 "parser_gen.cpp"
break;
- case 336: // maths: trunc
-#line 1476 "grammar.yy"
+ case 364: // maths: trunc
+#line 1588 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4558 "parser_gen.cpp"
+#line 4914 "parser_gen.cpp"
break;
- case 337: // meta: "object" META "geoNearDistance" "end of object"
-#line 1480 "grammar.yy"
+ case 365: // meta: "object" META "geoNearDistance" "end of object"
+#line 1592 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::meta, CNode{KeyValue::geoNearDistance}}}};
}
-#line 4566 "parser_gen.cpp"
+#line 4922 "parser_gen.cpp"
break;
- case 338: // meta: "object" META "geoNearPoint" "end of object"
-#line 1483 "grammar.yy"
+ case 366: // meta: "object" META "geoNearPoint" "end of object"
+#line 1595 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::meta, CNode{KeyValue::geoNearPoint}}}};
}
-#line 4574 "parser_gen.cpp"
+#line 4930 "parser_gen.cpp"
break;
- case 339: // meta: "object" META "indexKey" "end of object"
-#line 1486 "grammar.yy"
+ case 367: // meta: "object" META "indexKey" "end of object"
+#line 1598 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{
CNode::ObjectChildren{{KeyFieldname::meta, CNode{KeyValue::indexKey}}}};
}
-#line 4582 "parser_gen.cpp"
+#line 4938 "parser_gen.cpp"
break;
- case 340: // meta: "object" META "randVal" "end of object"
-#line 1489 "grammar.yy"
+ case 368: // meta: "object" META "randVal" "end of object"
+#line 1601 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{
CNode::ObjectChildren{{KeyFieldname::meta, CNode{KeyValue::randVal}}}};
}
-#line 4590 "parser_gen.cpp"
+#line 4946 "parser_gen.cpp"
break;
- case 341: // meta: "object" META "recordId" "end of object"
-#line 1492 "grammar.yy"
+ case 369: // meta: "object" META "recordId" "end of object"
+#line 1604 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{
CNode::ObjectChildren{{KeyFieldname::meta, CNode{KeyValue::recordId}}}};
}
-#line 4598 "parser_gen.cpp"
+#line 4954 "parser_gen.cpp"
break;
- case 342: // meta: "object" META "searchHighlights" "end of object"
-#line 1495 "grammar.yy"
+ case 370: // meta: "object" META "searchHighlights" "end of object"
+#line 1607 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::meta, CNode{KeyValue::searchHighlights}}}};
}
-#line 4606 "parser_gen.cpp"
+#line 4962 "parser_gen.cpp"
break;
- case 343: // meta: "object" META "searchScore" "end of object"
-#line 1498 "grammar.yy"
+ case 371: // meta: "object" META "searchScore" "end of object"
+#line 1610 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::meta, CNode{KeyValue::searchScore}}}};
}
-#line 4614 "parser_gen.cpp"
+#line 4970 "parser_gen.cpp"
break;
- case 344: // meta: "object" META "sortKey" "end of object"
-#line 1501 "grammar.yy"
+ case 372: // meta: "object" META "sortKey" "end of object"
+#line 1613 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{
CNode::ObjectChildren{{KeyFieldname::meta, CNode{KeyValue::sortKey}}}};
}
-#line 4622 "parser_gen.cpp"
+#line 4978 "parser_gen.cpp"
break;
- case 345: // meta: "object" META "textScore" "end of object"
-#line 1504 "grammar.yy"
+ case 373: // meta: "object" META "textScore" "end of object"
+#line 1616 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::meta, CNode{KeyValue::textScore}}}};
}
-#line 4630 "parser_gen.cpp"
+#line 4986 "parser_gen.cpp"
break;
- case 346: // trig: sin
-#line 1509 "grammar.yy"
+ case 374: // trig: sin
+#line 1621 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4636 "parser_gen.cpp"
+#line 4992 "parser_gen.cpp"
break;
- case 347: // trig: cos
-#line 1509 "grammar.yy"
+ case 375: // trig: cos
+#line 1621 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4642 "parser_gen.cpp"
+#line 4998 "parser_gen.cpp"
break;
- case 348: // trig: tan
-#line 1509 "grammar.yy"
+ case 376: // trig: tan
+#line 1621 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4648 "parser_gen.cpp"
+#line 5004 "parser_gen.cpp"
break;
- case 349: // trig: sinh
-#line 1509 "grammar.yy"
+ case 377: // trig: sinh
+#line 1621 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4654 "parser_gen.cpp"
+#line 5010 "parser_gen.cpp"
break;
- case 350: // trig: cosh
-#line 1509 "grammar.yy"
+ case 378: // trig: cosh
+#line 1621 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4660 "parser_gen.cpp"
+#line 5016 "parser_gen.cpp"
break;
- case 351: // trig: tanh
-#line 1509 "grammar.yy"
+ case 379: // trig: tanh
+#line 1621 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4666 "parser_gen.cpp"
+#line 5022 "parser_gen.cpp"
break;
- case 352: // trig: asin
-#line 1509 "grammar.yy"
+ case 380: // trig: asin
+#line 1621 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4672 "parser_gen.cpp"
+#line 5028 "parser_gen.cpp"
break;
- case 353: // trig: acos
-#line 1509 "grammar.yy"
+ case 381: // trig: acos
+#line 1621 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4678 "parser_gen.cpp"
+#line 5034 "parser_gen.cpp"
break;
- case 354: // trig: atan
-#line 1509 "grammar.yy"
+ case 382: // trig: atan
+#line 1621 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4684 "parser_gen.cpp"
+#line 5040 "parser_gen.cpp"
break;
- case 355: // trig: atan2
-#line 1509 "grammar.yy"
+ case 383: // trig: atan2
+#line 1621 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4690 "parser_gen.cpp"
+#line 5046 "parser_gen.cpp"
break;
- case 356: // trig: asinh
-#line 1509 "grammar.yy"
+ case 384: // trig: asinh
+#line 1621 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4696 "parser_gen.cpp"
+#line 5052 "parser_gen.cpp"
break;
- case 357: // trig: acosh
-#line 1509 "grammar.yy"
+ case 385: // trig: acosh
+#line 1621 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4702 "parser_gen.cpp"
+#line 5058 "parser_gen.cpp"
break;
- case 358: // trig: atanh
-#line 1509 "grammar.yy"
+ case 386: // trig: atanh
+#line 1621 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4708 "parser_gen.cpp"
+#line 5064 "parser_gen.cpp"
break;
- case 359: // trig: degreesToRadians
-#line 1510 "grammar.yy"
+ case 387: // trig: degreesToRadians
+#line 1622 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4714 "parser_gen.cpp"
+#line 5070 "parser_gen.cpp"
break;
- case 360: // trig: radiansToDegrees
-#line 1510 "grammar.yy"
+ case 388: // trig: radiansToDegrees
+#line 1622 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4720 "parser_gen.cpp"
+#line 5076 "parser_gen.cpp"
break;
- case 361: // add: "object" ADD expressionArray "end of object"
-#line 1514 "grammar.yy"
+ case 389: // add: "object" ADD expressionArray "end of object"
+#line 1626 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::add, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4729 "parser_gen.cpp"
+#line 5085 "parser_gen.cpp"
break;
- case 362: // atan2: "object" ATAN2 exprFixedTwoArg "end of object"
-#line 1521 "grammar.yy"
+ case 390: // atan2: "object" ATAN2 exprFixedTwoArg "end of object"
+#line 1633 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::atan2, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4738 "parser_gen.cpp"
+#line 5094 "parser_gen.cpp"
break;
- case 363: // abs: "object" ABS expression "end of object"
-#line 1527 "grammar.yy"
+ case 391: // abs: "object" ABS expression "end of object"
+#line 1639 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::abs, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4746 "parser_gen.cpp"
+#line 5102 "parser_gen.cpp"
break;
- case 364: // ceil: "object" CEIL expression "end of object"
-#line 1532 "grammar.yy"
+ case 392: // ceil: "object" CEIL expression "end of object"
+#line 1644 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::ceil, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4754 "parser_gen.cpp"
+#line 5110 "parser_gen.cpp"
break;
- case 365: // divide: "object" DIVIDE "array" expression expression "end of
+ case 393: // divide: "object" DIVIDE "array" expression expression "end of
// array" "end of object"
-#line 1537 "grammar.yy"
+#line 1649 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::divide,
CNode{CNode::ArrayChildren{YY_MOVE(yystack_[3].value.as<CNode>()),
YY_MOVE(yystack_[2].value.as<CNode>())}}}}};
}
-#line 4763 "parser_gen.cpp"
+#line 5119 "parser_gen.cpp"
break;
- case 366: // exponent: "object" EXPONENT expression "end of object"
-#line 1543 "grammar.yy"
+ case 394: // exponent: "object" EXPONENT expression "end of object"
+#line 1655 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::exponent, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4771 "parser_gen.cpp"
+#line 5127 "parser_gen.cpp"
break;
- case 367: // floor: "object" FLOOR expression "end of object"
-#line 1548 "grammar.yy"
+ case 395: // floor: "object" FLOOR expression "end of object"
+#line 1660 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::floor, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4779 "parser_gen.cpp"
+#line 5135 "parser_gen.cpp"
break;
- case 368: // ln: "object" LN expression "end of object"
-#line 1553 "grammar.yy"
+ case 396: // ln: "object" LN expression "end of object"
+#line 1665 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::ln, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4787 "parser_gen.cpp"
+#line 5143 "parser_gen.cpp"
break;
- case 369: // log: "object" LOG "array" expression expression "end of array"
+ case 397: // log: "object" LOG "array" expression expression "end of array"
// "end of object"
-#line 1558 "grammar.yy"
+#line 1670 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::log,
CNode{CNode::ArrayChildren{YY_MOVE(yystack_[3].value.as<CNode>()),
YY_MOVE(yystack_[2].value.as<CNode>())}}}}};
}
-#line 4796 "parser_gen.cpp"
+#line 5152 "parser_gen.cpp"
break;
- case 370: // logten: "object" LOGTEN expression "end of object"
-#line 1564 "grammar.yy"
+ case 398: // logten: "object" LOGTEN expression "end of object"
+#line 1676 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::logten, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4804 "parser_gen.cpp"
+#line 5160 "parser_gen.cpp"
break;
- case 371: // mod: "object" MOD "array" expression expression "end of array"
+ case 399: // mod: "object" MOD "array" expression expression "end of array"
// "end of object"
-#line 1569 "grammar.yy"
+#line 1681 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::mod,
CNode{CNode::ArrayChildren{YY_MOVE(yystack_[3].value.as<CNode>()),
YY_MOVE(yystack_[2].value.as<CNode>())}}}}};
}
-#line 4813 "parser_gen.cpp"
+#line 5169 "parser_gen.cpp"
break;
- case 372: // multiply: "object" MULTIPLY "array" expression expression
+ case 400: // multiply: "object" MULTIPLY "array" expression expression
// expressions "end of array" "end of object"
-#line 1575 "grammar.yy"
+#line 1687 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::multiply,
@@ -5143,428 +5505,428 @@ int ParserGen::parse() {
yylhs.value.as<CNode>().objectChildren()[0].second.arrayChildren();
array.insert(array.end(), others.begin(), others.end());
}
-#line 4825 "parser_gen.cpp"
+#line 5181 "parser_gen.cpp"
break;
- case 373: // pow: "object" POW "array" expression expression "end of array"
+ case 401: // pow: "object" POW "array" expression expression "end of array"
// "end of object"
-#line 1584 "grammar.yy"
+#line 1696 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::pow,
CNode{CNode::ArrayChildren{YY_MOVE(yystack_[3].value.as<CNode>()),
YY_MOVE(yystack_[2].value.as<CNode>())}}}}};
}
-#line 4834 "parser_gen.cpp"
+#line 5190 "parser_gen.cpp"
break;
- case 374: // round: "object" ROUND "array" expression expression "end of array"
+ case 402: // round: "object" ROUND "array" expression expression "end of array"
// "end of object"
-#line 1590 "grammar.yy"
+#line 1702 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::round,
CNode{CNode::ArrayChildren{YY_MOVE(yystack_[3].value.as<CNode>()),
YY_MOVE(yystack_[2].value.as<CNode>())}}}}};
}
-#line 4843 "parser_gen.cpp"
+#line 5199 "parser_gen.cpp"
break;
- case 375: // sqrt: "object" SQRT expression "end of object"
-#line 1596 "grammar.yy"
+ case 403: // sqrt: "object" SQRT expression "end of object"
+#line 1708 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::sqrt, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4851 "parser_gen.cpp"
+#line 5207 "parser_gen.cpp"
break;
- case 376: // subtract: "object" SUBTRACT "array" expression expression "end of
+ case 404: // subtract: "object" SUBTRACT "array" expression expression "end of
// array" "end of object"
-#line 1601 "grammar.yy"
+#line 1713 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::subtract,
CNode{CNode::ArrayChildren{YY_MOVE(yystack_[3].value.as<CNode>()),
YY_MOVE(yystack_[2].value.as<CNode>())}}}}};
}
-#line 4860 "parser_gen.cpp"
+#line 5216 "parser_gen.cpp"
break;
- case 377: // trunc: "object" TRUNC "array" expression expression "end of array"
+ case 405: // trunc: "object" TRUNC "array" expression expression "end of array"
// "end of object"
-#line 1607 "grammar.yy"
+#line 1719 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::trunc,
CNode{CNode::ArrayChildren{YY_MOVE(yystack_[3].value.as<CNode>()),
YY_MOVE(yystack_[2].value.as<CNode>())}}}}};
}
-#line 4869 "parser_gen.cpp"
+#line 5225 "parser_gen.cpp"
break;
- case 378: // sin: "object" SIN singleArgExpression "end of object"
-#line 1613 "grammar.yy"
+ case 406: // sin: "object" SIN singleArgExpression "end of object"
+#line 1725 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::sin, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4877 "parser_gen.cpp"
+#line 5233 "parser_gen.cpp"
break;
- case 379: // cos: "object" COS singleArgExpression "end of object"
-#line 1618 "grammar.yy"
+ case 407: // cos: "object" COS singleArgExpression "end of object"
+#line 1730 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::cos, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4885 "parser_gen.cpp"
+#line 5241 "parser_gen.cpp"
break;
- case 380: // tan: "object" TAN singleArgExpression "end of object"
-#line 1623 "grammar.yy"
+ case 408: // tan: "object" TAN singleArgExpression "end of object"
+#line 1735 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::tan, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4893 "parser_gen.cpp"
+#line 5249 "parser_gen.cpp"
break;
- case 381: // sinh: "object" SINH singleArgExpression "end of object"
-#line 1628 "grammar.yy"
+ case 409: // sinh: "object" SINH singleArgExpression "end of object"
+#line 1740 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::sinh, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4901 "parser_gen.cpp"
+#line 5257 "parser_gen.cpp"
break;
- case 382: // cosh: "object" COSH singleArgExpression "end of object"
-#line 1633 "grammar.yy"
+ case 410: // cosh: "object" COSH singleArgExpression "end of object"
+#line 1745 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::cosh, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4909 "parser_gen.cpp"
+#line 5265 "parser_gen.cpp"
break;
- case 383: // tanh: "object" TANH singleArgExpression "end of object"
-#line 1638 "grammar.yy"
+ case 411: // tanh: "object" TANH singleArgExpression "end of object"
+#line 1750 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::tanh, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4917 "parser_gen.cpp"
+#line 5273 "parser_gen.cpp"
break;
- case 384: // asin: "object" ASIN singleArgExpression "end of object"
-#line 1643 "grammar.yy"
+ case 412: // asin: "object" ASIN singleArgExpression "end of object"
+#line 1755 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::asin, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4925 "parser_gen.cpp"
+#line 5281 "parser_gen.cpp"
break;
- case 385: // acos: "object" ACOS singleArgExpression "end of object"
-#line 1648 "grammar.yy"
+ case 413: // acos: "object" ACOS singleArgExpression "end of object"
+#line 1760 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::acos, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4933 "parser_gen.cpp"
+#line 5289 "parser_gen.cpp"
break;
- case 386: // atan: "object" ATAN singleArgExpression "end of object"
-#line 1653 "grammar.yy"
+ case 414: // atan: "object" ATAN singleArgExpression "end of object"
+#line 1765 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::atan, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4941 "parser_gen.cpp"
+#line 5297 "parser_gen.cpp"
break;
- case 387: // asinh: "object" ASINH singleArgExpression "end of object"
-#line 1658 "grammar.yy"
+ case 415: // asinh: "object" ASINH singleArgExpression "end of object"
+#line 1770 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::asinh, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4949 "parser_gen.cpp"
+#line 5305 "parser_gen.cpp"
break;
- case 388: // acosh: "object" ACOSH singleArgExpression "end of object"
-#line 1663 "grammar.yy"
+ case 416: // acosh: "object" ACOSH singleArgExpression "end of object"
+#line 1775 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::acosh, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4957 "parser_gen.cpp"
+#line 5313 "parser_gen.cpp"
break;
- case 389: // atanh: "object" ATANH singleArgExpression "end of object"
-#line 1668 "grammar.yy"
+ case 417: // atanh: "object" ATANH singleArgExpression "end of object"
+#line 1780 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::atanh, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4965 "parser_gen.cpp"
+#line 5321 "parser_gen.cpp"
break;
- case 390: // degreesToRadians: "object" DEGREES_TO_RADIANS singleArgExpression
+ case 418: // degreesToRadians: "object" DEGREES_TO_RADIANS singleArgExpression
// "end of object"
-#line 1673 "grammar.yy"
+#line 1785 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{CNode::ObjectChildren{{KeyFieldname::degreesToRadians,
YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4973 "parser_gen.cpp"
+#line 5329 "parser_gen.cpp"
break;
- case 391: // radiansToDegrees: "object" RADIANS_TO_DEGREES singleArgExpression
+ case 419: // radiansToDegrees: "object" RADIANS_TO_DEGREES singleArgExpression
// "end of object"
-#line 1678 "grammar.yy"
+#line 1790 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{CNode::ObjectChildren{{KeyFieldname::radiansToDegrees,
YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 4981 "parser_gen.cpp"
+#line 5337 "parser_gen.cpp"
break;
- case 392: // boolExprs: and
-#line 1684 "grammar.yy"
+ case 420: // boolExprs: and
+#line 1796 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4987 "parser_gen.cpp"
+#line 5343 "parser_gen.cpp"
break;
- case 393: // boolExprs: or
-#line 1684 "grammar.yy"
+ case 421: // boolExprs: or
+#line 1796 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4993 "parser_gen.cpp"
+#line 5349 "parser_gen.cpp"
break;
- case 394: // boolExprs: not
-#line 1684 "grammar.yy"
+ case 422: // boolExprs: not
+#line 1796 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 4999 "parser_gen.cpp"
+#line 5355 "parser_gen.cpp"
break;
- case 395: // and: "object" AND expressionArray "end of object"
-#line 1688 "grammar.yy"
+ case 423: // and: "object" AND expressionArray "end of object"
+#line 1800 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::andExpr, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 5008 "parser_gen.cpp"
+#line 5364 "parser_gen.cpp"
break;
- case 396: // or: "object" OR expressionArray "end of object"
-#line 1695 "grammar.yy"
+ case 424: // or: "object" OR expressionArray "end of object"
+#line 1807 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::orExpr, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 5017 "parser_gen.cpp"
+#line 5373 "parser_gen.cpp"
break;
- case 397: // not: "object" NOT "array" expression "end of array" "end of
+ case 425: // not: "object" NOT "array" expression "end of array" "end of
// object"
-#line 1702 "grammar.yy"
+#line 1814 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::notExpr,
CNode{CNode::ArrayChildren{YY_MOVE(yystack_[2].value.as<CNode>())}}}}};
}
-#line 5026 "parser_gen.cpp"
+#line 5382 "parser_gen.cpp"
break;
- case 398: // stringExps: concat
-#line 1709 "grammar.yy"
+ case 426: // stringExps: concat
+#line 1821 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5032 "parser_gen.cpp"
+#line 5388 "parser_gen.cpp"
break;
- case 399: // stringExps: dateFromString
-#line 1709 "grammar.yy"
+ case 427: // stringExps: dateFromString
+#line 1821 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5038 "parser_gen.cpp"
+#line 5394 "parser_gen.cpp"
break;
- case 400: // stringExps: dateToString
-#line 1709 "grammar.yy"
+ case 428: // stringExps: dateToString
+#line 1821 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5044 "parser_gen.cpp"
+#line 5400 "parser_gen.cpp"
break;
- case 401: // stringExps: indexOfBytes
-#line 1709 "grammar.yy"
+ case 429: // stringExps: indexOfBytes
+#line 1821 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5050 "parser_gen.cpp"
+#line 5406 "parser_gen.cpp"
break;
- case 402: // stringExps: indexOfCP
-#line 1709 "grammar.yy"
+ case 430: // stringExps: indexOfCP
+#line 1821 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5056 "parser_gen.cpp"
+#line 5412 "parser_gen.cpp"
break;
- case 403: // stringExps: ltrim
-#line 1709 "grammar.yy"
+ case 431: // stringExps: ltrim
+#line 1821 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5062 "parser_gen.cpp"
+#line 5418 "parser_gen.cpp"
break;
- case 404: // stringExps: regexFind
-#line 1709 "grammar.yy"
+ case 432: // stringExps: regexFind
+#line 1821 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5068 "parser_gen.cpp"
+#line 5424 "parser_gen.cpp"
break;
- case 405: // stringExps: regexFindAll
-#line 1710 "grammar.yy"
+ case 433: // stringExps: regexFindAll
+#line 1822 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5074 "parser_gen.cpp"
+#line 5430 "parser_gen.cpp"
break;
- case 406: // stringExps: regexMatch
-#line 1710 "grammar.yy"
+ case 434: // stringExps: regexMatch
+#line 1822 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5080 "parser_gen.cpp"
+#line 5436 "parser_gen.cpp"
break;
- case 407: // stringExps: replaceOne
-#line 1710 "grammar.yy"
+ case 435: // stringExps: replaceOne
+#line 1822 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5086 "parser_gen.cpp"
+#line 5442 "parser_gen.cpp"
break;
- case 408: // stringExps: replaceAll
-#line 1710 "grammar.yy"
+ case 436: // stringExps: replaceAll
+#line 1822 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5092 "parser_gen.cpp"
+#line 5448 "parser_gen.cpp"
break;
- case 409: // stringExps: rtrim
-#line 1710 "grammar.yy"
+ case 437: // stringExps: rtrim
+#line 1822 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5098 "parser_gen.cpp"
+#line 5454 "parser_gen.cpp"
break;
- case 410: // stringExps: split
-#line 1710 "grammar.yy"
+ case 438: // stringExps: split
+#line 1822 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5104 "parser_gen.cpp"
+#line 5460 "parser_gen.cpp"
break;
- case 411: // stringExps: strLenBytes
-#line 1710 "grammar.yy"
+ case 439: // stringExps: strLenBytes
+#line 1822 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5110 "parser_gen.cpp"
+#line 5466 "parser_gen.cpp"
break;
- case 412: // stringExps: strLenCP
-#line 1710 "grammar.yy"
+ case 440: // stringExps: strLenCP
+#line 1822 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5116 "parser_gen.cpp"
+#line 5472 "parser_gen.cpp"
break;
- case 413: // stringExps: strcasecmp
-#line 1711 "grammar.yy"
+ case 441: // stringExps: strcasecmp
+#line 1823 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5122 "parser_gen.cpp"
+#line 5478 "parser_gen.cpp"
break;
- case 414: // stringExps: substr
-#line 1711 "grammar.yy"
+ case 442: // stringExps: substr
+#line 1823 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5128 "parser_gen.cpp"
+#line 5484 "parser_gen.cpp"
break;
- case 415: // stringExps: substrBytes
-#line 1711 "grammar.yy"
+ case 443: // stringExps: substrBytes
+#line 1823 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5134 "parser_gen.cpp"
+#line 5490 "parser_gen.cpp"
break;
- case 416: // stringExps: substrCP
-#line 1711 "grammar.yy"
+ case 444: // stringExps: substrCP
+#line 1823 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5140 "parser_gen.cpp"
+#line 5496 "parser_gen.cpp"
break;
- case 417: // stringExps: toLower
-#line 1711 "grammar.yy"
+ case 445: // stringExps: toLower
+#line 1823 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5146 "parser_gen.cpp"
+#line 5502 "parser_gen.cpp"
break;
- case 418: // stringExps: trim
-#line 1711 "grammar.yy"
+ case 446: // stringExps: trim
+#line 1823 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5152 "parser_gen.cpp"
+#line 5508 "parser_gen.cpp"
break;
- case 419: // stringExps: toUpper
-#line 1711 "grammar.yy"
+ case 447: // stringExps: toUpper
+#line 1823 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5158 "parser_gen.cpp"
+#line 5514 "parser_gen.cpp"
break;
- case 420: // concat: "object" CONCAT "array" expressions "end of array" "end of
+ case 448: // concat: "object" CONCAT "array" expressions "end of array" "end of
// object"
-#line 1715 "grammar.yy"
+#line 1827 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::concat, CNode{CNode::ArrayChildren{}}}}};
@@ -5573,49 +5935,49 @@ int ParserGen::parse() {
yylhs.value.as<CNode>().objectChildren()[0].second.arrayChildren();
array.insert(array.end(), others.begin(), others.end());
}
-#line 5170 "parser_gen.cpp"
+#line 5526 "parser_gen.cpp"
break;
- case 421: // formatArg: %empty
-#line 1725 "grammar.yy"
+ case 449: // formatArg: %empty
+#line 1837 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
std::pair{KeyFieldname::formatArg, CNode{KeyValue::absentKey}};
}
-#line 5178 "parser_gen.cpp"
+#line 5534 "parser_gen.cpp"
break;
- case 422: // formatArg: "format argument" expression
-#line 1728 "grammar.yy"
+ case 450: // formatArg: "format argument" expression
+#line 1840 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = std::pair{
KeyFieldname::formatArg, YY_MOVE(yystack_[0].value.as<CNode>())};
}
-#line 5186 "parser_gen.cpp"
+#line 5542 "parser_gen.cpp"
break;
- case 423: // timezoneArg: %empty
-#line 1734 "grammar.yy"
+ case 451: // timezoneArg: %empty
+#line 1846 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
std::pair{KeyFieldname::timezoneArg, CNode{KeyValue::absentKey}};
}
-#line 5194 "parser_gen.cpp"
+#line 5550 "parser_gen.cpp"
break;
- case 424: // timezoneArg: "timezone argument" expression
-#line 1737 "grammar.yy"
+ case 452: // timezoneArg: "timezone argument" expression
+#line 1849 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = std::pair{
KeyFieldname::timezoneArg, YY_MOVE(yystack_[0].value.as<CNode>())};
}
-#line 5202 "parser_gen.cpp"
+#line 5558 "parser_gen.cpp"
break;
- case 425: // dateFromString: "object" DATE_FROM_STRING START_ORDERED_OBJECT
+ case 453: // dateFromString: "object" DATE_FROM_STRING START_ORDERED_OBJECT
// "dateString argument" expression formatArg timezoneArg onErrorArg
// onNullArg "end of object" "end of object"
-#line 1744 "grammar.yy"
+#line 1857 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::dateFromString,
@@ -5631,13 +5993,13 @@ int ParserGen::parse() {
YY_MOVE(yystack_[2]
.value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
}
-#line 5212 "parser_gen.cpp"
+#line 5568 "parser_gen.cpp"
break;
- case 426: // dateToString: "object" DATE_TO_STRING START_ORDERED_OBJECT "date
+ case 454: // dateToString: "object" DATE_TO_STRING START_ORDERED_OBJECT "date
// argument" expression formatArg timezoneArg onNullArg "end of
// object" "end of object"
-#line 1753 "grammar.yy"
+#line 1866 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::dateToString,
@@ -5650,39 +6012,837 @@ int ParserGen::parse() {
YY_MOVE(yystack_[2]
.value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
}
-#line 5222 "parser_gen.cpp"
+#line 5578 "parser_gen.cpp"
+ break;
+
+ case 455: // dateExps: dateFromParts
+#line 1874 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
+ }
+#line 5584 "parser_gen.cpp"
+ break;
+
+ case 456: // dateExps: dateToParts
+#line 1874 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
+ }
+#line 5590 "parser_gen.cpp"
break;
- case 427: // exprZeroToTwo: %empty
-#line 1761 "grammar.yy"
+ case 457: // dateExps: dayOfMonth
+#line 1874 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
+ }
+#line 5596 "parser_gen.cpp"
+ break;
+
+ case 458: // dateExps: dayOfWeek
+#line 1874 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
+ }
+#line 5602 "parser_gen.cpp"
+ break;
+
+ case 459: // dateExps: dayOfYear
+#line 1874 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
+ }
+#line 5608 "parser_gen.cpp"
+ break;
+
+ case 460: // dateExps: hour
+#line 1874 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
+ }
+#line 5614 "parser_gen.cpp"
+ break;
+
+ case 461: // dateExps: isoDayOfWeek
+#line 1874 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
+ }
+#line 5620 "parser_gen.cpp"
+ break;
+
+ case 462: // dateExps: isoWeek
+#line 1874 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
+ }
+#line 5626 "parser_gen.cpp"
+ break;
+
+ case 463: // dateExps: isoWeekYear
+#line 1874 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
+ }
+#line 5632 "parser_gen.cpp"
+ break;
+
+ case 464: // dateExps: millisecond
+#line 1875 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
+ }
+#line 5638 "parser_gen.cpp"
+ break;
+
+ case 465: // dateExps: minute
+#line 1875 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
+ }
+#line 5644 "parser_gen.cpp"
+ break;
+
+ case 466: // dateExps: month
+#line 1875 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
+ }
+#line 5650 "parser_gen.cpp"
+ break;
+
+ case 467: // dateExps: second
+#line 1875 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
+ }
+#line 5656 "parser_gen.cpp"
+ break;
+
+ case 468: // dateExps: week
+#line 1875 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
+ }
+#line 5662 "parser_gen.cpp"
+ break;
+
+ case 469: // dateExps: year
+#line 1875 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
+ }
+#line 5668 "parser_gen.cpp"
+ break;
+
+ case 470: // hourArg: %empty
+#line 1879 "grammar.yy"
+ {
+ yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
+ std::pair{KeyFieldname::hourArg, CNode{KeyValue::absentKey}};
+ }
+#line 5676 "parser_gen.cpp"
+ break;
+
+ case 471: // hourArg: "hour argument" expression
+#line 1882 "grammar.yy"
+ {
+ yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = std::pair{
+ KeyFieldname::hourArg, YY_MOVE(yystack_[0].value.as<CNode>())};
+ }
+#line 5684 "parser_gen.cpp"
+ break;
+
+ case 472: // minuteArg: %empty
+#line 1888 "grammar.yy"
+ {
+ yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
+ std::pair{KeyFieldname::minuteArg, CNode{KeyValue::absentKey}};
+ }
+#line 5692 "parser_gen.cpp"
+ break;
+
+ case 473: // minuteArg: "minute argument" expression
+#line 1891 "grammar.yy"
+ {
+ yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = std::pair{
+ KeyFieldname::minuteArg, YY_MOVE(yystack_[0].value.as<CNode>())};
+ }
+#line 5700 "parser_gen.cpp"
+ break;
+
+ case 474: // secondArg: %empty
+#line 1897 "grammar.yy"
+ {
+ yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
+ std::pair{KeyFieldname::secondArg, CNode{KeyValue::absentKey}};
+ }
+#line 5708 "parser_gen.cpp"
+ break;
+
+ case 475: // secondArg: "second argument" expression
+#line 1900 "grammar.yy"
+ {
+ yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = std::pair{
+ KeyFieldname::secondArg, YY_MOVE(yystack_[0].value.as<CNode>())};
+ }
+#line 5716 "parser_gen.cpp"
+ break;
+
+ case 476: // millisecondArg: %empty
+#line 1906 "grammar.yy"
+ {
+ yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
+ std::pair{KeyFieldname::millisecondArg, CNode{KeyValue::absentKey}};
+ }
+#line 5724 "parser_gen.cpp"
+ break;
+
+ case 477: // millisecondArg: "millisecond argument" expression
+#line 1909 "grammar.yy"
+ {
+ yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = std::pair{
+ KeyFieldname::millisecondArg, YY_MOVE(yystack_[0].value.as<CNode>())};
+ }
+#line 5732 "parser_gen.cpp"
+ break;
+
+ case 478: // dayArg: %empty
+#line 1915 "grammar.yy"
+ {
+ yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
+ std::pair{KeyFieldname::dayArg, CNode{KeyValue::absentKey}};
+ }
+#line 5740 "parser_gen.cpp"
+ break;
+
+ case 479: // dayArg: "day argument" expression
+#line 1918 "grammar.yy"
+ {
+ yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
+ std::pair{KeyFieldname::dayArg, YY_MOVE(yystack_[0].value.as<CNode>())};
+ }
+#line 5748 "parser_gen.cpp"
+ break;
+
+ case 480: // isoDayOfWeekArg: %empty
+#line 1924 "grammar.yy"
+ {
+ yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
+ std::pair{KeyFieldname::isoDayOfWeekArg, CNode{KeyValue::absentKey}};
+ }
+#line 5756 "parser_gen.cpp"
+ break;
+
+ case 481: // isoDayOfWeekArg: "ISO day of week argument" expression
+#line 1927 "grammar.yy"
+ {
+ yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = std::pair{
+ KeyFieldname::isoDayOfWeekArg, YY_MOVE(yystack_[0].value.as<CNode>())};
+ }
+#line 5764 "parser_gen.cpp"
+ break;
+
+ case 482: // isoWeekArg: %empty
+#line 1933 "grammar.yy"
+ {
+ yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
+ std::pair{KeyFieldname::isoWeekArg, CNode{KeyValue::absentKey}};
+ }
+#line 5772 "parser_gen.cpp"
+ break;
+
+ case 483: // isoWeekArg: "ISO week argument" expression
+#line 1936 "grammar.yy"
+ {
+ yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = std::pair{
+ KeyFieldname::isoWeekArg, YY_MOVE(yystack_[0].value.as<CNode>())};
+ }
+#line 5780 "parser_gen.cpp"
+ break;
+
+ case 484: // iso8601Arg: %empty
+#line 1942 "grammar.yy"
+ {
+ yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
+ std::pair{KeyFieldname::iso8601Arg, CNode{KeyValue::falseKey}};
+ }
+#line 5788 "parser_gen.cpp"
+ break;
+
+ case 485: // iso8601Arg: "ISO 8601 argument" bool
+#line 1945 "grammar.yy"
+ {
+ yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = std::pair{
+ KeyFieldname::iso8601Arg, YY_MOVE(yystack_[0].value.as<CNode>())};
+ }
+#line 5796 "parser_gen.cpp"
+ break;
+
+ case 486: // monthArg: %empty
+#line 1951 "grammar.yy"
+ {
+ yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
+ std::pair{KeyFieldname::monthArg, CNode{KeyValue::absentKey}};
+ }
+#line 5804 "parser_gen.cpp"
+ break;
+
+ case 487: // monthArg: "month argument" expression
+#line 1954 "grammar.yy"
+ {
+ yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = std::pair{
+ KeyFieldname::monthArg, YY_MOVE(yystack_[0].value.as<CNode>())};
+ }
+#line 5812 "parser_gen.cpp"
+ break;
+
+ case 488: // dateFromParts: "object" DATE_FROM_PARTS START_ORDERED_OBJECT
+ // dayArg hourArg millisecondArg minuteArg monthArg secondArg
+ // timezoneArg "year argument" expression "end of object" "end of
+ // object"
+#line 1961 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateFromParts,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::yearArg, YY_MOVE(yystack_[2].value.as<CNode>())},
+ YY_MOVE(
+ yystack_[6].value.as<std::pair<CNode::Fieldname, CNode>>()),
+ YY_MOVE(
+ yystack_[10].value.as<std::pair<CNode::Fieldname, CNode>>()),
+ YY_MOVE(
+ yystack_[9].value.as<std::pair<CNode::Fieldname, CNode>>()),
+ YY_MOVE(
+ yystack_[7].value.as<std::pair<CNode::Fieldname, CNode>>()),
+ YY_MOVE(
+ yystack_[5].value.as<std::pair<CNode::Fieldname, CNode>>()),
+ YY_MOVE(
+ yystack_[8].value.as<std::pair<CNode::Fieldname, CNode>>()),
+ YY_MOVE(yystack_[4]
+ .value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
+ }
+#line 5822 "parser_gen.cpp"
+ break;
+
+ case 489: // dateFromParts: "object" DATE_FROM_PARTS START_ORDERED_OBJECT
+ // dayArg hourArg isoDayOfWeekArg isoWeekArg "ISO week year argument"
+ // expression millisecondArg minuteArg monthArg secondArg timezoneArg
+ // "end of object" "end of object"
+#line 1967 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateFromParts,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::isoWeekYearArg,
+ YY_MOVE(yystack_[7].value.as<CNode>())},
+ YY_MOVE(
+ yystack_[9].value.as<std::pair<CNode::Fieldname, CNode>>()),
+ YY_MOVE(
+ yystack_[10].value.as<std::pair<CNode::Fieldname, CNode>>()),
+ YY_MOVE(
+ yystack_[11].value.as<std::pair<CNode::Fieldname, CNode>>()),
+ YY_MOVE(
+ yystack_[5].value.as<std::pair<CNode::Fieldname, CNode>>()),
+ YY_MOVE(
+ yystack_[3].value.as<std::pair<CNode::Fieldname, CNode>>()),
+ YY_MOVE(
+ yystack_[6].value.as<std::pair<CNode::Fieldname, CNode>>()),
+ YY_MOVE(yystack_[2]
+ .value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
+ }
+#line 5832 "parser_gen.cpp"
+ break;
+
+ case 490: // dateToParts: "object" DATE_TO_PARTS START_ORDERED_OBJECT "date
+ // argument" expression iso8601Arg timezoneArg "end of object" "end
+ // of object"
+#line 1975 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateToParts,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, YY_MOVE(yystack_[4].value.as<CNode>())},
+ YY_MOVE(
+ yystack_[2].value.as<std::pair<CNode::Fieldname, CNode>>()),
+ YY_MOVE(yystack_[3]
+ .value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
+ }
+#line 5842 "parser_gen.cpp"
+ break;
+
+ case 491: // dayOfMonth: "object" DAY_OF_MONTH nonArrayNonObjExpression "end of
+ // object"
+#line 1983 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dayOfMonth, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+ }
+#line 5850 "parser_gen.cpp"
+ break;
+
+ case 492: // dayOfMonth: "object" DAY_OF_MONTH START_ORDERED_OBJECT "date
+ // argument" expression timezoneArg "end of object" "end of object"
+#line 1986 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dayOfMonth,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, YY_MOVE(yystack_[3].value.as<CNode>())},
+ YY_MOVE(yystack_[2]
+ .value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
+ }
+#line 5859 "parser_gen.cpp"
+ break;
+
+ case 493: // dayOfMonth: "object" DAY_OF_MONTH expressionSingletonArray "end of
+ // object"
+#line 1990 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dayOfMonth, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+ }
+#line 5867 "parser_gen.cpp"
+ break;
+
+ case 494: // dayOfWeek: "object" DAY_OF_WEEK nonArrayNonObjExpression "end of
+ // object"
+#line 1996 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dayOfWeek, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+
+ }
+#line 5876 "parser_gen.cpp"
+ break;
+
+ case 495: // dayOfWeek: "object" DAY_OF_WEEK START_ORDERED_OBJECT "date
+ // argument" expression timezoneArg "end of object" "end of object"
+#line 2000 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dayOfWeek,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, YY_MOVE(yystack_[3].value.as<CNode>())},
+ YY_MOVE(yystack_[2]
+ .value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
+ }
+#line 5885 "parser_gen.cpp"
+ break;
+
+ case 496: // dayOfWeek: "object" DAY_OF_WEEK expressionSingletonArray "end of
+ // object"
+#line 2004 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dayOfWeek, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+ }
+#line 5893 "parser_gen.cpp"
+ break;
+
+ case 497: // isoDayOfWeek: "object" ISO_DAY_OF_WEEK nonArrayNonObjExpression
+ // "end of object"
+#line 2010 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::isoDayOfWeek, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+
+ }
+#line 5902 "parser_gen.cpp"
+ break;
+
+ case 498: // isoDayOfWeek: "object" ISO_DAY_OF_WEEK START_ORDERED_OBJECT "date
+ // argument" expression timezoneArg "end of object" "end of object"
+#line 2014 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::isoDayOfWeek,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, YY_MOVE(yystack_[3].value.as<CNode>())},
+ YY_MOVE(yystack_[2]
+ .value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
+ }
+#line 5911 "parser_gen.cpp"
+ break;
+
+ case 499: // isoDayOfWeek: "object" ISO_DAY_OF_WEEK expressionSingletonArray
+ // "end of object"
+#line 2018 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::isoDayOfWeek, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+ }
+#line 5919 "parser_gen.cpp"
+ break;
+
+ case 500: // dayOfYear: "object" DAY_OF_YEAR nonArrayNonObjExpression "end of
+ // object"
+#line 2024 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dayOfYear, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+
+ }
+#line 5928 "parser_gen.cpp"
+ break;
+
+ case 501: // dayOfYear: "object" DAY_OF_YEAR START_ORDERED_OBJECT "date
+ // argument" expression timezoneArg "end of object" "end of object"
+#line 2028 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dayOfYear,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, YY_MOVE(yystack_[3].value.as<CNode>())},
+ YY_MOVE(yystack_[2]
+ .value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
+ }
+#line 5937 "parser_gen.cpp"
+ break;
+
+ case 502: // dayOfYear: "object" DAY_OF_YEAR expressionSingletonArray "end of
+ // object"
+#line 2032 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::dayOfYear, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+ }
+#line 5945 "parser_gen.cpp"
+ break;
+
+ case 503: // hour: "object" HOUR nonArrayNonObjExpression "end of object"
+#line 2038 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::hour, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+
+ }
+#line 5954 "parser_gen.cpp"
+ break;
+
+ case 504: // hour: "object" HOUR START_ORDERED_OBJECT "date argument"
+ // expression timezoneArg "end of object" "end of object"
+#line 2042 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::hour,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, YY_MOVE(yystack_[3].value.as<CNode>())},
+ YY_MOVE(yystack_[2]
+ .value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
+ }
+#line 5963 "parser_gen.cpp"
+ break;
+
+ case 505: // hour: "object" HOUR expressionSingletonArray "end of object"
+#line 2046 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::hour, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+ }
+#line 5971 "parser_gen.cpp"
+ break;
+
+ case 506: // month: "object" MONTH nonArrayNonObjExpression "end of object"
+#line 2052 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::month, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+
+ }
+#line 5980 "parser_gen.cpp"
+ break;
+
+ case 507: // month: "object" MONTH START_ORDERED_OBJECT "date argument"
+ // expression timezoneArg "end of object" "end of object"
+#line 2056 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::month,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, YY_MOVE(yystack_[3].value.as<CNode>())},
+ YY_MOVE(yystack_[2]
+ .value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
+ }
+#line 5989 "parser_gen.cpp"
+ break;
+
+ case 508: // month: "object" MONTH expressionSingletonArray "end of object"
+#line 2060 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::month, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+ }
+#line 5997 "parser_gen.cpp"
+ break;
+
+ case 509: // week: "object" WEEK nonArrayNonObjExpression "end of object"
+#line 2066 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::week, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+
+ }
+#line 6006 "parser_gen.cpp"
+ break;
+
+ case 510: // week: "object" WEEK START_ORDERED_OBJECT "date argument"
+ // expression timezoneArg "end of object" "end of object"
+#line 2070 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::week,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, YY_MOVE(yystack_[3].value.as<CNode>())},
+ YY_MOVE(yystack_[2]
+ .value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
+ }
+#line 6015 "parser_gen.cpp"
+ break;
+
+ case 511: // week: "object" WEEK expressionSingletonArray "end of object"
+#line 2074 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::week, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+ }
+#line 6023 "parser_gen.cpp"
+ break;
+
+ case 512: // isoWeek: "object" ISO_WEEK nonArrayNonObjExpression "end of
+ // object"
+#line 2080 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::isoWeek, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+
+ }
+#line 6032 "parser_gen.cpp"
+ break;
+
+ case 513: // isoWeek: "object" ISO_WEEK START_ORDERED_OBJECT "date argument"
+ // expression timezoneArg "end of object" "end of object"
+#line 2084 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::isoWeek,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, YY_MOVE(yystack_[3].value.as<CNode>())},
+ YY_MOVE(yystack_[2]
+ .value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
+ }
+#line 6041 "parser_gen.cpp"
+ break;
+
+ case 514: // isoWeek: "object" ISO_WEEK expressionSingletonArray "end of
+ // object"
+#line 2088 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::isoWeek, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+ }
+#line 6049 "parser_gen.cpp"
+ break;
+
+ case 515: // isoWeekYear: "object" ISO_WEEK_YEAR nonArrayNonObjExpression "end
+ // of object"
+#line 2094 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::isoWeekYear, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+
+ }
+#line 6058 "parser_gen.cpp"
+ break;
+
+ case 516: // isoWeekYear: "object" ISO_WEEK_YEAR START_ORDERED_OBJECT "date
+ // argument" expression timezoneArg "end of object" "end of object"
+#line 2098 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::isoWeekYear,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, YY_MOVE(yystack_[3].value.as<CNode>())},
+ YY_MOVE(yystack_[2]
+ .value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
+ }
+#line 6067 "parser_gen.cpp"
+ break;
+
+ case 517: // isoWeekYear: "object" ISO_WEEK_YEAR expressionSingletonArray "end
+ // of object"
+#line 2102 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::isoWeekYear, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+ }
+#line 6075 "parser_gen.cpp"
+ break;
+
+ case 518: // year: "object" YEAR nonArrayNonObjExpression "end of object"
+#line 2108 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::year, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+
+ }
+#line 6084 "parser_gen.cpp"
+ break;
+
+ case 519: // year: "object" YEAR START_ORDERED_OBJECT "date argument"
+ // expression timezoneArg "end of object" "end of object"
+#line 2112 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::year,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, YY_MOVE(yystack_[3].value.as<CNode>())},
+ YY_MOVE(yystack_[2]
+ .value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
+ }
+#line 6093 "parser_gen.cpp"
+ break;
+
+ case 520: // year: "object" YEAR expressionSingletonArray "end of object"
+#line 2116 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::year, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+ }
+#line 6101 "parser_gen.cpp"
+ break;
+
+ case 521: // second: "object" SECOND nonArrayNonObjExpression "end of object"
+#line 2122 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::second, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+
+ }
+#line 6110 "parser_gen.cpp"
+ break;
+
+ case 522: // second: "object" SECOND START_ORDERED_OBJECT "date argument"
+ // expression timezoneArg "end of object" "end of object"
+#line 2126 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::second,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, YY_MOVE(yystack_[3].value.as<CNode>())},
+ YY_MOVE(yystack_[2]
+ .value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
+ }
+#line 6119 "parser_gen.cpp"
+ break;
+
+ case 523: // second: "object" SECOND expressionSingletonArray "end of object"
+#line 2130 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::second, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+ }
+#line 6127 "parser_gen.cpp"
+ break;
+
+ case 524: // millisecond: "object" MILLISECOND nonArrayNonObjExpression "end of
+ // object"
+#line 2136 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::millisecond, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+
+ }
+#line 6136 "parser_gen.cpp"
+ break;
+
+ case 525: // millisecond: "object" MILLISECOND START_ORDERED_OBJECT "date
+ // argument" expression timezoneArg "end of object" "end of object"
+#line 2140 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::millisecond,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, YY_MOVE(yystack_[3].value.as<CNode>())},
+ YY_MOVE(yystack_[2]
+ .value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
+ }
+#line 6145 "parser_gen.cpp"
+ break;
+
+ case 526: // millisecond: "object" MILLISECOND expressionSingletonArray "end of
+ // object"
+#line 2144 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::millisecond, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+ }
+#line 6153 "parser_gen.cpp"
+ break;
+
+ case 527: // minute: "object" MINUTE nonArrayNonObjExpression "end of object"
+#line 2150 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::minute, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+
+ }
+#line 6162 "parser_gen.cpp"
+ break;
+
+ case 528: // minute: "object" MINUTE START_ORDERED_OBJECT "date argument"
+ // expression timezoneArg "end of object" "end of object"
+#line 2154 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::minute,
+ CNode{CNode::ObjectChildren{
+ {KeyFieldname::dateArg, YY_MOVE(yystack_[3].value.as<CNode>())},
+ YY_MOVE(yystack_[2]
+ .value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
+ }
+#line 6171 "parser_gen.cpp"
+ break;
+
+ case 529: // minute: "object" MINUTE expressionSingletonArray "end of object"
+#line 2158 "grammar.yy"
+ {
+ yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
+ {KeyFieldname::minute, YY_MOVE(yystack_[1].value.as<CNode>())}}};
+ }
+#line 6179 "parser_gen.cpp"
+ break;
+
+ case 530: // exprZeroToTwo: %empty
+#line 2164 "grammar.yy"
{
yylhs.value.as<std::vector<CNode>>() = CNode::ArrayChildren{};
}
-#line 5230 "parser_gen.cpp"
+#line 6187 "parser_gen.cpp"
break;
- case 428: // exprZeroToTwo: expression
-#line 1764 "grammar.yy"
+ case 531: // exprZeroToTwo: expression
+#line 2167 "grammar.yy"
{
yylhs.value.as<std::vector<CNode>>() =
CNode::ArrayChildren{YY_MOVE(yystack_[0].value.as<CNode>())};
}
-#line 5238 "parser_gen.cpp"
+#line 6195 "parser_gen.cpp"
break;
- case 429: // exprZeroToTwo: expression expression
-#line 1767 "grammar.yy"
+ case 532: // exprZeroToTwo: expression expression
+#line 2170 "grammar.yy"
{
yylhs.value.as<std::vector<CNode>>() =
CNode::ArrayChildren{YY_MOVE(yystack_[1].value.as<CNode>()),
YY_MOVE(yystack_[0].value.as<CNode>())};
}
-#line 5246 "parser_gen.cpp"
+#line 6203 "parser_gen.cpp"
break;
- case 430: // indexOfBytes: "object" INDEX_OF_BYTES "array" expression
+ case 533: // indexOfBytes: "object" INDEX_OF_BYTES "array" expression
// expression exprZeroToTwo "end of array" "end of object"
-#line 1774 "grammar.yy"
+#line 2177 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::indexOfBytes,
@@ -5693,12 +6853,12 @@ int ParserGen::parse() {
yylhs.value.as<CNode>().objectChildren()[0].second.arrayChildren();
array.insert(array.end(), others.begin(), others.end());
}
-#line 5258 "parser_gen.cpp"
+#line 6215 "parser_gen.cpp"
break;
- case 431: // indexOfCP: "object" INDEX_OF_CP "array" expression expression
+ case 534: // indexOfCP: "object" INDEX_OF_CP "array" expression expression
// exprZeroToTwo "end of array" "end of object"
-#line 1785 "grammar.yy"
+#line 2188 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::indexOfCP,
@@ -5709,30 +6869,30 @@ int ParserGen::parse() {
yylhs.value.as<CNode>().objectChildren()[0].second.arrayChildren();
array.insert(array.end(), others.begin(), others.end());
}
-#line 5270 "parser_gen.cpp"
+#line 6227 "parser_gen.cpp"
break;
- case 432: // charsArg: %empty
-#line 1795 "grammar.yy"
+ case 535: // charsArg: %empty
+#line 2198 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
std::pair{KeyFieldname::charsArg, CNode{KeyValue::absentKey}};
}
-#line 5278 "parser_gen.cpp"
+#line 6235 "parser_gen.cpp"
break;
- case 433: // charsArg: "chars argument" expression
-#line 1798 "grammar.yy"
+ case 536: // charsArg: "chars argument" expression
+#line 2201 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = std::pair{
KeyFieldname::charsArg, YY_MOVE(yystack_[0].value.as<CNode>())};
}
-#line 5286 "parser_gen.cpp"
+#line 6243 "parser_gen.cpp"
break;
- case 434: // ltrim: "object" LTRIM START_ORDERED_OBJECT charsArg "input
+ case 537: // ltrim: "object" LTRIM START_ORDERED_OBJECT charsArg "input
// argument" expression "end of object" "end of object"
-#line 1804 "grammar.yy"
+#line 2207 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::ltrim,
@@ -5741,12 +6901,12 @@ int ParserGen::parse() {
YY_MOVE(yystack_[4]
.value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
}
-#line 5296 "parser_gen.cpp"
+#line 6253 "parser_gen.cpp"
break;
- case 435: // rtrim: "object" RTRIM START_ORDERED_OBJECT charsArg "input
+ case 538: // rtrim: "object" RTRIM START_ORDERED_OBJECT charsArg "input
// argument" expression "end of object" "end of object"
-#line 1812 "grammar.yy"
+#line 2215 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::rtrim,
@@ -5755,12 +6915,12 @@ int ParserGen::parse() {
YY_MOVE(yystack_[4]
.value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
}
-#line 5306 "parser_gen.cpp"
+#line 6263 "parser_gen.cpp"
break;
- case 436: // trim: "object" TRIM START_ORDERED_OBJECT charsArg "input argument"
+ case 539: // trim: "object" TRIM START_ORDERED_OBJECT charsArg "input argument"
// expression "end of object" "end of object"
-#line 1820 "grammar.yy"
+#line 2223 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::trim,
@@ -5769,30 +6929,30 @@ int ParserGen::parse() {
YY_MOVE(yystack_[4]
.value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
}
-#line 5316 "parser_gen.cpp"
+#line 6273 "parser_gen.cpp"
break;
- case 437: // optionsArg: %empty
-#line 1828 "grammar.yy"
+ case 540: // optionsArg: %empty
+#line 2231 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
std::pair{KeyFieldname::optionsArg, CNode{KeyValue::absentKey}};
}
-#line 5324 "parser_gen.cpp"
+#line 6281 "parser_gen.cpp"
break;
- case 438: // optionsArg: "options argument" expression
-#line 1831 "grammar.yy"
+ case 541: // optionsArg: "options argument" expression
+#line 2234 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = std::pair{
KeyFieldname::optionsArg, YY_MOVE(yystack_[0].value.as<CNode>())};
}
-#line 5332 "parser_gen.cpp"
+#line 6289 "parser_gen.cpp"
break;
- case 439: // regexArgs: START_ORDERED_OBJECT "input argument" expression
+ case 542: // regexArgs: START_ORDERED_OBJECT "input argument" expression
// optionsArg "regex argument" expression "end of object"
-#line 1836 "grammar.yy"
+#line 2239 "grammar.yy"
{
// Note that the order of these arguments must match the constructor for the
// regex expression.
@@ -5801,40 +6961,40 @@ int ParserGen::parse() {
{KeyFieldname::regexArg, YY_MOVE(yystack_[1].value.as<CNode>())},
YY_MOVE(yystack_[3].value.as<std::pair<CNode::Fieldname, CNode>>())}};
}
-#line 5344 "parser_gen.cpp"
+#line 6301 "parser_gen.cpp"
break;
- case 440: // regexFind: "object" REGEX_FIND regexArgs "end of object"
-#line 1845 "grammar.yy"
+ case 543: // regexFind: "object" REGEX_FIND regexArgs "end of object"
+#line 2248 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::regexFind, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 5352 "parser_gen.cpp"
+#line 6309 "parser_gen.cpp"
break;
- case 441: // regexFindAll: "object" REGEX_FIND_ALL regexArgs "end of object"
-#line 1851 "grammar.yy"
+ case 544: // regexFindAll: "object" REGEX_FIND_ALL regexArgs "end of object"
+#line 2254 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::regexFindAll, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 5360 "parser_gen.cpp"
+#line 6317 "parser_gen.cpp"
break;
- case 442: // regexMatch: "object" REGEX_MATCH regexArgs "end of object"
-#line 1857 "grammar.yy"
+ case 545: // regexMatch: "object" REGEX_MATCH regexArgs "end of object"
+#line 2260 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::regexMatch, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 5368 "parser_gen.cpp"
+#line 6325 "parser_gen.cpp"
break;
- case 443: // replaceOne: "object" REPLACE_ONE START_ORDERED_OBJECT "find
+ case 546: // replaceOne: "object" REPLACE_ONE START_ORDERED_OBJECT "find
// argument" expression "input argument" expression "replacement
// argument" expression "end of object" "end of object"
-#line 1864 "grammar.yy"
+#line 2267 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::replaceOne,
@@ -5844,13 +7004,13 @@ int ParserGen::parse() {
{KeyFieldname::replacementArg,
YY_MOVE(yystack_[2].value.as<CNode>())}}}}}};
}
-#line 5379 "parser_gen.cpp"
+#line 6336 "parser_gen.cpp"
break;
- case 444: // replaceAll: "object" REPLACE_ALL START_ORDERED_OBJECT "find
+ case 547: // replaceAll: "object" REPLACE_ALL START_ORDERED_OBJECT "find
// argument" expression "input argument" expression "replacement
// argument" expression "end of object" "end of object"
-#line 1874 "grammar.yy"
+#line 2277 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::replaceAll,
@@ -5860,54 +7020,54 @@ int ParserGen::parse() {
{KeyFieldname::replacementArg,
YY_MOVE(yystack_[2].value.as<CNode>())}}}}}};
}
-#line 5390 "parser_gen.cpp"
+#line 6347 "parser_gen.cpp"
break;
- case 445: // split: "object" SPLIT "array" expression expression "end of array"
+ case 548: // split: "object" SPLIT "array" expression expression "end of array"
// "end of object"
-#line 1883 "grammar.yy"
+#line 2286 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::split,
CNode{CNode::ArrayChildren{YY_MOVE(yystack_[3].value.as<CNode>()),
YY_MOVE(yystack_[2].value.as<CNode>())}}}}};
}
-#line 5399 "parser_gen.cpp"
+#line 6356 "parser_gen.cpp"
break;
- case 446: // strLenBytes: "object" STR_LEN_BYTES expression "end of object"
-#line 1890 "grammar.yy"
+ case 549: // strLenBytes: "object" STR_LEN_BYTES expression "end of object"
+#line 2293 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::strLenBytes, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 5408 "parser_gen.cpp"
+#line 6365 "parser_gen.cpp"
break;
- case 447: // strLenCP: "object" STR_LEN_CP expression "end of object"
-#line 1897 "grammar.yy"
+ case 550: // strLenCP: "object" STR_LEN_CP expression "end of object"
+#line 2300 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::strLenCP, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 5417 "parser_gen.cpp"
+#line 6374 "parser_gen.cpp"
break;
- case 448: // strcasecmp: "object" STR_CASE_CMP "array" expression expression
+ case 551: // strcasecmp: "object" STR_CASE_CMP "array" expression expression
// "end of array" "end of object"
-#line 1905 "grammar.yy"
+#line 2308 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::strcasecmp,
CNode{CNode::ArrayChildren{YY_MOVE(yystack_[3].value.as<CNode>()),
YY_MOVE(yystack_[2].value.as<CNode>())}}}}};
}
-#line 5426 "parser_gen.cpp"
+#line 6383 "parser_gen.cpp"
break;
- case 449: // substr: "object" SUBSTR "array" expression expression expression
+ case 552: // substr: "object" SUBSTR "array" expression expression expression
// "end of array" "end of object"
-#line 1913 "grammar.yy"
+#line 2316 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::substr,
@@ -5915,12 +7075,12 @@ int ParserGen::parse() {
YY_MOVE(yystack_[3].value.as<CNode>()),
YY_MOVE(yystack_[2].value.as<CNode>())}}}}};
}
-#line 5435 "parser_gen.cpp"
+#line 6392 "parser_gen.cpp"
break;
- case 450: // substrBytes: "object" SUBSTR_BYTES "array" expression expression
+ case 553: // substrBytes: "object" SUBSTR_BYTES "array" expression expression
// expression "end of array" "end of object"
-#line 1921 "grammar.yy"
+#line 2324 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::substrBytes,
@@ -5928,12 +7088,12 @@ int ParserGen::parse() {
YY_MOVE(yystack_[3].value.as<CNode>()),
YY_MOVE(yystack_[2].value.as<CNode>())}}}}};
}
-#line 5444 "parser_gen.cpp"
+#line 6401 "parser_gen.cpp"
break;
- case 451: // substrCP: "object" SUBSTR_CP "array" expression expression
+ case 554: // substrCP: "object" SUBSTR_CP "array" expression expression
// expression "end of array" "end of object"
-#line 1929 "grammar.yy"
+#line 2332 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::substrCP,
@@ -5941,154 +7101,154 @@ int ParserGen::parse() {
YY_MOVE(yystack_[3].value.as<CNode>()),
YY_MOVE(yystack_[2].value.as<CNode>())}}}}};
}
-#line 5453 "parser_gen.cpp"
+#line 6410 "parser_gen.cpp"
break;
- case 452: // toLower: "object" TO_LOWER expression "end of object"
-#line 1936 "grammar.yy"
+ case 555: // toLower: "object" TO_LOWER expression "end of object"
+#line 2339 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::toLower, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 5461 "parser_gen.cpp"
+#line 6418 "parser_gen.cpp"
break;
- case 453: // toUpper: "object" TO_UPPER expression "end of object"
-#line 1942 "grammar.yy"
+ case 556: // toUpper: "object" TO_UPPER expression "end of object"
+#line 2345 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::toUpper, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 5469 "parser_gen.cpp"
+#line 6426 "parser_gen.cpp"
break;
- case 454: // metaSortKeyword: "randVal"
-#line 1948 "grammar.yy"
+ case 557: // metaSortKeyword: "randVal"
+#line 2351 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{KeyValue::randVal};
}
-#line 5477 "parser_gen.cpp"
+#line 6434 "parser_gen.cpp"
break;
- case 455: // metaSortKeyword: "textScore"
-#line 1951 "grammar.yy"
+ case 558: // metaSortKeyword: "textScore"
+#line 2354 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{KeyValue::textScore};
}
-#line 5485 "parser_gen.cpp"
+#line 6442 "parser_gen.cpp"
break;
- case 456: // metaSort: "object" META metaSortKeyword "end of object"
-#line 1957 "grammar.yy"
+ case 559: // metaSort: "object" META metaSortKeyword "end of object"
+#line 2360 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::meta, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 5493 "parser_gen.cpp"
+#line 6450 "parser_gen.cpp"
break;
- case 457: // sortSpecs: "object" specList "end of object"
-#line 1963 "grammar.yy"
+ case 560: // sortSpecs: "object" specList "end of object"
+#line 2366 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[1].value.as<CNode>());
}
-#line 5501 "parser_gen.cpp"
+#line 6458 "parser_gen.cpp"
break;
- case 458: // specList: %empty
-#line 1968 "grammar.yy"
+ case 561: // specList: %empty
+#line 2371 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode::noopLeaf();
}
-#line 5509 "parser_gen.cpp"
+#line 6466 "parser_gen.cpp"
break;
- case 459: // specList: specList sortSpec
-#line 1971 "grammar.yy"
+ case 562: // specList: specList sortSpec
+#line 2374 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[1].value.as<CNode>());
yylhs.value.as<CNode>().objectChildren().emplace_back(
YY_MOVE(yystack_[0].value.as<std::pair<CNode::Fieldname, CNode>>()));
}
-#line 5518 "parser_gen.cpp"
+#line 6475 "parser_gen.cpp"
break;
- case 460: // oneOrNegOne: "1 (int)"
-#line 1978 "grammar.yy"
+ case 563: // oneOrNegOne: "1 (int)"
+#line 2381 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{KeyValue::intOneKey};
}
-#line 5526 "parser_gen.cpp"
+#line 6483 "parser_gen.cpp"
break;
- case 461: // oneOrNegOne: "-1 (int)"
-#line 1981 "grammar.yy"
+ case 564: // oneOrNegOne: "-1 (int)"
+#line 2384 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{KeyValue::intNegOneKey};
}
-#line 5534 "parser_gen.cpp"
+#line 6491 "parser_gen.cpp"
break;
- case 462: // oneOrNegOne: "1 (long)"
-#line 1984 "grammar.yy"
+ case 565: // oneOrNegOne: "1 (long)"
+#line 2387 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{KeyValue::longOneKey};
}
-#line 5542 "parser_gen.cpp"
+#line 6499 "parser_gen.cpp"
break;
- case 463: // oneOrNegOne: "-1 (long)"
-#line 1987 "grammar.yy"
+ case 566: // oneOrNegOne: "-1 (long)"
+#line 2390 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{KeyValue::longNegOneKey};
}
-#line 5550 "parser_gen.cpp"
+#line 6507 "parser_gen.cpp"
break;
- case 464: // oneOrNegOne: "1 (double)"
-#line 1990 "grammar.yy"
+ case 567: // oneOrNegOne: "1 (double)"
+#line 2393 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{KeyValue::doubleOneKey};
}
-#line 5558 "parser_gen.cpp"
+#line 6515 "parser_gen.cpp"
break;
- case 465: // oneOrNegOne: "-1 (double)"
-#line 1993 "grammar.yy"
+ case 568: // oneOrNegOne: "-1 (double)"
+#line 2396 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{KeyValue::doubleNegOneKey};
}
-#line 5566 "parser_gen.cpp"
+#line 6523 "parser_gen.cpp"
break;
- case 466: // oneOrNegOne: "1 (decimal)"
-#line 1996 "grammar.yy"
+ case 569: // oneOrNegOne: "1 (decimal)"
+#line 2399 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{KeyValue::decimalOneKey};
}
-#line 5574 "parser_gen.cpp"
+#line 6531 "parser_gen.cpp"
break;
- case 467: // oneOrNegOne: "-1 (decimal)"
-#line 1999 "grammar.yy"
+ case 570: // oneOrNegOne: "-1 (decimal)"
+#line 2402 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{KeyValue::decimalNegOneKey};
}
-#line 5582 "parser_gen.cpp"
+#line 6539 "parser_gen.cpp"
break;
- case 468: // sortFieldname: valueFieldname
-#line 2004 "grammar.yy"
+ case 571: // sortFieldname: valueFieldname
+#line 2407 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() =
SortPath{makeVector<std::string>(stdx::get<UserFieldname>(
YY_MOVE(yystack_[0].value.as<CNode::Fieldname>())))};
}
-#line 5590 "parser_gen.cpp"
+#line 6547 "parser_gen.cpp"
break;
- case 469: // sortFieldname: "fieldname containing dotted path"
-#line 2006 "grammar.yy"
+ case 572: // sortFieldname: "fieldname containing dotted path"
+#line 2409 "grammar.yy"
{
auto components = YY_MOVE(yystack_[0].value.as<std::vector<std::string>>());
if (auto status = c_node_validation::validateSortPath(components);
@@ -6096,120 +7256,120 @@ int ParserGen::parse() {
error(yystack_[0].location, status.reason());
yylhs.value.as<CNode::Fieldname>() = SortPath{std::move(components)};
}
-#line 5602 "parser_gen.cpp"
+#line 6559 "parser_gen.cpp"
break;
- case 470: // sortSpec: sortFieldname metaSort
-#line 2016 "grammar.yy"
+ case 573: // sortSpec: sortFieldname metaSort
+#line 2419 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = {
YY_MOVE(yystack_[1].value.as<CNode::Fieldname>()),
YY_MOVE(yystack_[0].value.as<CNode>())};
}
-#line 5610 "parser_gen.cpp"
+#line 6567 "parser_gen.cpp"
break;
- case 471: // sortSpec: sortFieldname oneOrNegOne
-#line 2018 "grammar.yy"
+ case 574: // sortSpec: sortFieldname oneOrNegOne
+#line 2421 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = {
YY_MOVE(yystack_[1].value.as<CNode::Fieldname>()),
YY_MOVE(yystack_[0].value.as<CNode>())};
}
-#line 5618 "parser_gen.cpp"
+#line 6575 "parser_gen.cpp"
break;
- case 472: // setExpression: allElementsTrue
-#line 2024 "grammar.yy"
+ case 575: // setExpression: allElementsTrue
+#line 2427 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5624 "parser_gen.cpp"
+#line 6581 "parser_gen.cpp"
break;
- case 473: // setExpression: anyElementTrue
-#line 2024 "grammar.yy"
+ case 576: // setExpression: anyElementTrue
+#line 2427 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5630 "parser_gen.cpp"
+#line 6587 "parser_gen.cpp"
break;
- case 474: // setExpression: setDifference
-#line 2024 "grammar.yy"
+ case 577: // setExpression: setDifference
+#line 2427 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5636 "parser_gen.cpp"
+#line 6593 "parser_gen.cpp"
break;
- case 475: // setExpression: setEquals
-#line 2024 "grammar.yy"
+ case 578: // setExpression: setEquals
+#line 2427 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5642 "parser_gen.cpp"
+#line 6599 "parser_gen.cpp"
break;
- case 476: // setExpression: setIntersection
-#line 2024 "grammar.yy"
+ case 579: // setExpression: setIntersection
+#line 2427 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5648 "parser_gen.cpp"
+#line 6605 "parser_gen.cpp"
break;
- case 477: // setExpression: setIsSubset
-#line 2024 "grammar.yy"
+ case 580: // setExpression: setIsSubset
+#line 2427 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5654 "parser_gen.cpp"
+#line 6611 "parser_gen.cpp"
break;
- case 478: // setExpression: setUnion
-#line 2025 "grammar.yy"
+ case 581: // setExpression: setUnion
+#line 2428 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5660 "parser_gen.cpp"
+#line 6617 "parser_gen.cpp"
break;
- case 479: // allElementsTrue: "object" "allElementsTrue" "array" expression
+ case 582: // allElementsTrue: "object" "allElementsTrue" "array" expression
// "end of array" "end of object"
-#line 2029 "grammar.yy"
+#line 2432 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{
CNode::ObjectChildren{{KeyFieldname::allElementsTrue,
CNode{YY_MOVE(yystack_[2].value.as<CNode>())}}}};
}
-#line 5668 "parser_gen.cpp"
+#line 6625 "parser_gen.cpp"
break;
- case 480: // anyElementTrue: "object" "anyElementTrue" "array" expression "end
+ case 583: // anyElementTrue: "object" "anyElementTrue" "array" expression "end
// of array" "end of object"
-#line 2035 "grammar.yy"
+#line 2438 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{
CNode::ObjectChildren{{KeyFieldname::anyElementTrue,
CNode{YY_MOVE(yystack_[2].value.as<CNode>())}}}};
}
-#line 5676 "parser_gen.cpp"
+#line 6633 "parser_gen.cpp"
break;
- case 481: // setDifference: "object" "setDifference" exprFixedTwoArg "end of
+ case 584: // setDifference: "object" "setDifference" exprFixedTwoArg "end of
// object"
-#line 2041 "grammar.yy"
+#line 2444 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::setDifference, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 5685 "parser_gen.cpp"
+#line 6642 "parser_gen.cpp"
break;
- case 482: // setEquals: "object" "setEquals" "array" expression expression
+ case 585: // setEquals: "object" "setEquals" "array" expression expression
// expressions "end of array" "end of object"
-#line 2049 "grammar.yy"
+#line 2452 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::setEquals,
@@ -6220,12 +7380,12 @@ int ParserGen::parse() {
yylhs.value.as<CNode>().objectChildren()[0].second.arrayChildren();
array.insert(array.end(), others.begin(), others.end());
}
-#line 5697 "parser_gen.cpp"
+#line 6654 "parser_gen.cpp"
break;
- case 483: // setIntersection: "object" "setIntersection" "array" expression
+ case 586: // setIntersection: "object" "setIntersection" "array" expression
// expression expressions "end of array" "end of object"
-#line 2060 "grammar.yy"
+#line 2463 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::setIntersection,
@@ -6236,22 +7396,22 @@ int ParserGen::parse() {
yylhs.value.as<CNode>().objectChildren()[0].second.arrayChildren();
array.insert(array.end(), others.begin(), others.end());
}
-#line 5709 "parser_gen.cpp"
+#line 6666 "parser_gen.cpp"
break;
- case 484: // setIsSubset: "object" "setIsSubset" exprFixedTwoArg "end of
+ case 587: // setIsSubset: "object" "setIsSubset" exprFixedTwoArg "end of
// object"
-#line 2070 "grammar.yy"
+#line 2473 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::setIsSubset, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 5718 "parser_gen.cpp"
+#line 6675 "parser_gen.cpp"
break;
- case 485: // setUnion: "object" "setUnion" "array" expression expression
+ case 588: // setUnion: "object" "setUnion" "array" expression expression
// expressions "end of array" "end of object"
-#line 2078 "grammar.yy"
+#line 2481 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::setUnion,
@@ -6262,426 +7422,426 @@ int ParserGen::parse() {
yylhs.value.as<CNode>().objectChildren()[0].second.arrayChildren();
array.insert(array.end(), others.begin(), others.end());
}
-#line 5730 "parser_gen.cpp"
+#line 6687 "parser_gen.cpp"
break;
- case 486: // literalEscapes: const
-#line 2088 "grammar.yy"
+ case 589: // literalEscapes: const
+#line 2491 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5736 "parser_gen.cpp"
+#line 6693 "parser_gen.cpp"
break;
- case 487: // literalEscapes: literal
-#line 2088 "grammar.yy"
+ case 590: // literalEscapes: literal
+#line 2491 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5742 "parser_gen.cpp"
+#line 6699 "parser_gen.cpp"
break;
- case 488: // const: "object" CONST_EXPR "array" value "end of array" "end of
+ case 591: // const: "object" CONST_EXPR "array" value "end of array" "end of
// object"
-#line 2092 "grammar.yy"
+#line 2495 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::constExpr,
CNode{CNode::ArrayChildren{YY_MOVE(yystack_[2].value.as<CNode>())}}}}};
}
-#line 5751 "parser_gen.cpp"
+#line 6708 "parser_gen.cpp"
break;
- case 489: // literal: "object" LITERAL "array" value "end of array" "end of
+ case 592: // literal: "object" LITERAL "array" value "end of array" "end of
// object"
-#line 2099 "grammar.yy"
+#line 2502 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::literal,
CNode{CNode::ArrayChildren{YY_MOVE(yystack_[2].value.as<CNode>())}}}}};
}
-#line 5760 "parser_gen.cpp"
+#line 6717 "parser_gen.cpp"
break;
- case 490: // value: simpleValue
-#line 2106 "grammar.yy"
+ case 593: // value: simpleValue
+#line 2509 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5766 "parser_gen.cpp"
+#line 6723 "parser_gen.cpp"
break;
- case 491: // value: compoundValue
-#line 2106 "grammar.yy"
+ case 594: // value: compoundValue
+#line 2509 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5772 "parser_gen.cpp"
+#line 6729 "parser_gen.cpp"
break;
- case 492: // compoundValue: valueArray
-#line 2110 "grammar.yy"
+ case 595: // compoundValue: valueArray
+#line 2513 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5778 "parser_gen.cpp"
+#line 6735 "parser_gen.cpp"
break;
- case 493: // compoundValue: valueObject
-#line 2110 "grammar.yy"
+ case 596: // compoundValue: valueObject
+#line 2513 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5784 "parser_gen.cpp"
+#line 6741 "parser_gen.cpp"
break;
- case 494: // valueArray: "array" values "end of array"
-#line 2114 "grammar.yy"
+ case 597: // valueArray: "array" values "end of array"
+#line 2517 "grammar.yy"
{
yylhs.value.as<CNode>() =
CNode{YY_MOVE(yystack_[1].value.as<std::vector<CNode>>())};
}
-#line 5792 "parser_gen.cpp"
+#line 6749 "parser_gen.cpp"
break;
- case 495: // values: %empty
-#line 2120 "grammar.yy"
+ case 598: // values: %empty
+#line 2523 "grammar.yy"
{
}
-#line 5798 "parser_gen.cpp"
+#line 6755 "parser_gen.cpp"
break;
- case 496: // values: values value
-#line 2121 "grammar.yy"
+ case 599: // values: values value
+#line 2524 "grammar.yy"
{
yylhs.value.as<std::vector<CNode>>() =
YY_MOVE(yystack_[1].value.as<std::vector<CNode>>());
yylhs.value.as<std::vector<CNode>>().emplace_back(
YY_MOVE(yystack_[0].value.as<CNode>()));
}
-#line 5807 "parser_gen.cpp"
+#line 6764 "parser_gen.cpp"
break;
- case 497: // valueObject: "object" valueFields "end of object"
-#line 2128 "grammar.yy"
+ case 600: // valueObject: "object" valueFields "end of object"
+#line 2531 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[1].value.as<CNode>());
}
-#line 5815 "parser_gen.cpp"
+#line 6772 "parser_gen.cpp"
break;
- case 498: // valueFields: %empty
-#line 2134 "grammar.yy"
+ case 601: // valueFields: %empty
+#line 2537 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode::noopLeaf();
}
-#line 5823 "parser_gen.cpp"
+#line 6780 "parser_gen.cpp"
break;
- case 499: // valueFields: valueFields valueField
-#line 2137 "grammar.yy"
+ case 602: // valueFields: valueFields valueField
+#line 2540 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[1].value.as<CNode>());
yylhs.value.as<CNode>().objectChildren().emplace_back(
YY_MOVE(yystack_[0].value.as<std::pair<CNode::Fieldname, CNode>>()));
}
-#line 5832 "parser_gen.cpp"
+#line 6789 "parser_gen.cpp"
break;
- case 500: // valueField: valueFieldname value
-#line 2144 "grammar.yy"
+ case 603: // valueField: valueFieldname value
+#line 2547 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = {
YY_MOVE(yystack_[1].value.as<CNode::Fieldname>()),
YY_MOVE(yystack_[0].value.as<CNode>())};
}
-#line 5840 "parser_gen.cpp"
+#line 6797 "parser_gen.cpp"
break;
- case 501: // valueFieldname: invariableUserFieldname
-#line 2151 "grammar.yy"
+ case 604: // valueFieldname: invariableUserFieldname
+#line 2554 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() =
YY_MOVE(yystack_[0].value.as<CNode::Fieldname>());
}
-#line 5846 "parser_gen.cpp"
+#line 6803 "parser_gen.cpp"
break;
- case 502: // valueFieldname: stageAsUserFieldname
-#line 2152 "grammar.yy"
+ case 605: // valueFieldname: stageAsUserFieldname
+#line 2555 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() =
YY_MOVE(yystack_[0].value.as<CNode::Fieldname>());
}
-#line 5852 "parser_gen.cpp"
+#line 6809 "parser_gen.cpp"
break;
- case 503: // valueFieldname: argAsUserFieldname
-#line 2153 "grammar.yy"
+ case 606: // valueFieldname: argAsUserFieldname
+#line 2556 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() =
YY_MOVE(yystack_[0].value.as<CNode::Fieldname>());
}
-#line 5858 "parser_gen.cpp"
+#line 6815 "parser_gen.cpp"
break;
- case 504: // valueFieldname: aggExprAsUserFieldname
-#line 2154 "grammar.yy"
+ case 607: // valueFieldname: aggExprAsUserFieldname
+#line 2557 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() =
YY_MOVE(yystack_[0].value.as<CNode::Fieldname>());
}
-#line 5864 "parser_gen.cpp"
+#line 6821 "parser_gen.cpp"
break;
- case 505: // valueFieldname: idAsUserFieldname
-#line 2155 "grammar.yy"
+ case 608: // valueFieldname: idAsUserFieldname
+#line 2558 "grammar.yy"
{
yylhs.value.as<CNode::Fieldname>() =
YY_MOVE(yystack_[0].value.as<CNode::Fieldname>());
}
-#line 5870 "parser_gen.cpp"
+#line 6827 "parser_gen.cpp"
break;
- case 506: // compExprs: cmp
-#line 2158 "grammar.yy"
+ case 609: // compExprs: cmp
+#line 2561 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5876 "parser_gen.cpp"
+#line 6833 "parser_gen.cpp"
break;
- case 507: // compExprs: eq
-#line 2158 "grammar.yy"
+ case 610: // compExprs: eq
+#line 2561 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5882 "parser_gen.cpp"
+#line 6839 "parser_gen.cpp"
break;
- case 508: // compExprs: gt
-#line 2158 "grammar.yy"
+ case 611: // compExprs: gt
+#line 2561 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5888 "parser_gen.cpp"
+#line 6845 "parser_gen.cpp"
break;
- case 509: // compExprs: gte
-#line 2158 "grammar.yy"
+ case 612: // compExprs: gte
+#line 2561 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5894 "parser_gen.cpp"
+#line 6851 "parser_gen.cpp"
break;
- case 510: // compExprs: lt
-#line 2158 "grammar.yy"
+ case 613: // compExprs: lt
+#line 2561 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5900 "parser_gen.cpp"
+#line 6857 "parser_gen.cpp"
break;
- case 511: // compExprs: lte
-#line 2158 "grammar.yy"
+ case 614: // compExprs: lte
+#line 2561 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5906 "parser_gen.cpp"
+#line 6863 "parser_gen.cpp"
break;
- case 512: // compExprs: ne
-#line 2158 "grammar.yy"
+ case 615: // compExprs: ne
+#line 2561 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5912 "parser_gen.cpp"
+#line 6869 "parser_gen.cpp"
break;
- case 513: // cmp: "object" CMP exprFixedTwoArg "end of object"
-#line 2160 "grammar.yy"
+ case 616: // cmp: "object" CMP exprFixedTwoArg "end of object"
+#line 2563 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::cmp, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 5921 "parser_gen.cpp"
+#line 6878 "parser_gen.cpp"
break;
- case 514: // eq: "object" EQ exprFixedTwoArg "end of object"
-#line 2165 "grammar.yy"
+ case 617: // eq: "object" EQ exprFixedTwoArg "end of object"
+#line 2568 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::eq, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 5930 "parser_gen.cpp"
+#line 6887 "parser_gen.cpp"
break;
- case 515: // gt: "object" GT exprFixedTwoArg "end of object"
-#line 2170 "grammar.yy"
+ case 618: // gt: "object" GT exprFixedTwoArg "end of object"
+#line 2573 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::gt, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 5939 "parser_gen.cpp"
+#line 6896 "parser_gen.cpp"
break;
- case 516: // gte: "object" GTE exprFixedTwoArg "end of object"
-#line 2175 "grammar.yy"
+ case 619: // gte: "object" GTE exprFixedTwoArg "end of object"
+#line 2578 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::gte, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 5948 "parser_gen.cpp"
+#line 6905 "parser_gen.cpp"
break;
- case 517: // lt: "object" LT exprFixedTwoArg "end of object"
-#line 2180 "grammar.yy"
+ case 620: // lt: "object" LT exprFixedTwoArg "end of object"
+#line 2583 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::lt, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 5957 "parser_gen.cpp"
+#line 6914 "parser_gen.cpp"
break;
- case 518: // lte: "object" LTE exprFixedTwoArg "end of object"
-#line 2185 "grammar.yy"
+ case 621: // lte: "object" LTE exprFixedTwoArg "end of object"
+#line 2588 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::lte, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 5966 "parser_gen.cpp"
+#line 6923 "parser_gen.cpp"
break;
- case 519: // ne: "object" NE exprFixedTwoArg "end of object"
-#line 2190 "grammar.yy"
+ case 622: // ne: "object" NE exprFixedTwoArg "end of object"
+#line 2593 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::ne, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 5975 "parser_gen.cpp"
+#line 6932 "parser_gen.cpp"
break;
- case 520: // typeExpression: convert
-#line 2196 "grammar.yy"
+ case 623: // typeExpression: convert
+#line 2599 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5981 "parser_gen.cpp"
+#line 6938 "parser_gen.cpp"
break;
- case 521: // typeExpression: toBool
-#line 2197 "grammar.yy"
+ case 624: // typeExpression: toBool
+#line 2600 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5987 "parser_gen.cpp"
+#line 6944 "parser_gen.cpp"
break;
- case 522: // typeExpression: toDate
-#line 2198 "grammar.yy"
+ case 625: // typeExpression: toDate
+#line 2601 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5993 "parser_gen.cpp"
+#line 6950 "parser_gen.cpp"
break;
- case 523: // typeExpression: toDecimal
-#line 2199 "grammar.yy"
+ case 626: // typeExpression: toDecimal
+#line 2602 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 5999 "parser_gen.cpp"
+#line 6956 "parser_gen.cpp"
break;
- case 524: // typeExpression: toDouble
-#line 2200 "grammar.yy"
+ case 627: // typeExpression: toDouble
+#line 2603 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 6005 "parser_gen.cpp"
+#line 6962 "parser_gen.cpp"
break;
- case 525: // typeExpression: toInt
-#line 2201 "grammar.yy"
+ case 628: // typeExpression: toInt
+#line 2604 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 6011 "parser_gen.cpp"
+#line 6968 "parser_gen.cpp"
break;
- case 526: // typeExpression: toLong
-#line 2202 "grammar.yy"
+ case 629: // typeExpression: toLong
+#line 2605 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 6017 "parser_gen.cpp"
+#line 6974 "parser_gen.cpp"
break;
- case 527: // typeExpression: toObjectId
-#line 2203 "grammar.yy"
+ case 630: // typeExpression: toObjectId
+#line 2606 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 6023 "parser_gen.cpp"
+#line 6980 "parser_gen.cpp"
break;
- case 528: // typeExpression: toString
-#line 2204 "grammar.yy"
+ case 631: // typeExpression: toString
+#line 2607 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 6029 "parser_gen.cpp"
+#line 6986 "parser_gen.cpp"
break;
- case 529: // typeExpression: type
-#line 2205 "grammar.yy"
+ case 632: // typeExpression: type
+#line 2608 "grammar.yy"
{
yylhs.value.as<CNode>() = YY_MOVE(yystack_[0].value.as<CNode>());
}
-#line 6035 "parser_gen.cpp"
+#line 6992 "parser_gen.cpp"
break;
- case 530: // onErrorArg: %empty
-#line 2210 "grammar.yy"
+ case 633: // onErrorArg: %empty
+#line 2613 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
std::pair{KeyFieldname::onErrorArg, CNode{KeyValue::absentKey}};
}
-#line 6043 "parser_gen.cpp"
+#line 7000 "parser_gen.cpp"
break;
- case 531: // onErrorArg: "onError argument" expression
-#line 2213 "grammar.yy"
+ case 634: // onErrorArg: "onError argument" expression
+#line 2616 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = std::pair{
KeyFieldname::onErrorArg, YY_MOVE(yystack_[0].value.as<CNode>())};
}
-#line 6051 "parser_gen.cpp"
+#line 7008 "parser_gen.cpp"
break;
- case 532: // onNullArg: %empty
-#line 2220 "grammar.yy"
+ case 635: // onNullArg: %empty
+#line 2623 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() =
std::pair{KeyFieldname::onNullArg, CNode{KeyValue::absentKey}};
}
-#line 6059 "parser_gen.cpp"
+#line 7016 "parser_gen.cpp"
break;
- case 533: // onNullArg: "onNull argument" expression
-#line 2223 "grammar.yy"
+ case 636: // onNullArg: "onNull argument" expression
+#line 2626 "grammar.yy"
{
yylhs.value.as<std::pair<CNode::Fieldname, CNode>>() = std::pair{
KeyFieldname::onNullArg, YY_MOVE(yystack_[0].value.as<CNode>())};
}
-#line 6067 "parser_gen.cpp"
+#line 7024 "parser_gen.cpp"
break;
- case 534: // convert: "object" CONVERT START_ORDERED_OBJECT "input argument"
+ case 637: // convert: "object" CONVERT START_ORDERED_OBJECT "input argument"
// expression onErrorArg onNullArg "to argument" expression "end of
// object" "end of object"
-#line 2230 "grammar.yy"
+#line 2633 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::convert,
@@ -6693,92 +7853,92 @@ int ParserGen::parse() {
YY_MOVE(yystack_[4]
.value.as<std::pair<CNode::Fieldname, CNode>>())}}}}};
}
-#line 6078 "parser_gen.cpp"
+#line 7035 "parser_gen.cpp"
break;
- case 535: // toBool: "object" TO_BOOL expression "end of object"
-#line 2239 "grammar.yy"
+ case 638: // toBool: "object" TO_BOOL expression "end of object"
+#line 2642 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::toBool, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 6086 "parser_gen.cpp"
+#line 7043 "parser_gen.cpp"
break;
- case 536: // toDate: "object" TO_DATE expression "end of object"
-#line 2244 "grammar.yy"
+ case 639: // toDate: "object" TO_DATE expression "end of object"
+#line 2647 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::toDate, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 6094 "parser_gen.cpp"
+#line 7051 "parser_gen.cpp"
break;
- case 537: // toDecimal: "object" TO_DECIMAL expression "end of object"
-#line 2249 "grammar.yy"
+ case 640: // toDecimal: "object" TO_DECIMAL expression "end of object"
+#line 2652 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::toDecimal, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 6102 "parser_gen.cpp"
+#line 7059 "parser_gen.cpp"
break;
- case 538: // toDouble: "object" TO_DOUBLE expression "end of object"
-#line 2254 "grammar.yy"
+ case 641: // toDouble: "object" TO_DOUBLE expression "end of object"
+#line 2657 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::toDouble, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 6110 "parser_gen.cpp"
+#line 7067 "parser_gen.cpp"
break;
- case 539: // toInt: "object" TO_INT expression "end of object"
-#line 2259 "grammar.yy"
+ case 642: // toInt: "object" TO_INT expression "end of object"
+#line 2662 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::toInt, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 6118 "parser_gen.cpp"
+#line 7075 "parser_gen.cpp"
break;
- case 540: // toLong: "object" TO_LONG expression "end of object"
-#line 2264 "grammar.yy"
+ case 643: // toLong: "object" TO_LONG expression "end of object"
+#line 2667 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::toLong, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 6126 "parser_gen.cpp"
+#line 7083 "parser_gen.cpp"
break;
- case 541: // toObjectId: "object" TO_OBJECT_ID expression "end of object"
-#line 2269 "grammar.yy"
+ case 644: // toObjectId: "object" TO_OBJECT_ID expression "end of object"
+#line 2672 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::toObjectId, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 6134 "parser_gen.cpp"
+#line 7091 "parser_gen.cpp"
break;
- case 542: // toString: "object" TO_STRING expression "end of object"
-#line 2274 "grammar.yy"
+ case 645: // toString: "object" TO_STRING expression "end of object"
+#line 2677 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::toString, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 6142 "parser_gen.cpp"
+#line 7099 "parser_gen.cpp"
break;
- case 543: // type: "object" TYPE expression "end of object"
-#line 2279 "grammar.yy"
+ case 646: // type: "object" TYPE expression "end of object"
+#line 2682 "grammar.yy"
{
yylhs.value.as<CNode>() = CNode{CNode::ObjectChildren{
{KeyFieldname::type, YY_MOVE(yystack_[1].value.as<CNode>())}}};
}
-#line 6150 "parser_gen.cpp"
+#line 7107 "parser_gen.cpp"
break;
-#line 6154 "parser_gen.cpp"
+#line 7111 "parser_gen.cpp"
default:
break;
@@ -7093,604 +8253,810 @@ std::string ParserGen::yysyntax_error_(const context& yyctx) const {
}
-const short ParserGen::yypact_ninf_ = -756;
+const short ParserGen::yypact_ninf_ = -1017;
-const signed char ParserGen::yytable_ninf_ = -1;
+const short ParserGen::yytable_ninf_ = -481;
const short ParserGen::yypact_[] = {
- -32, -77, -70, -68, 68, -23, -756, -756, -756, -756, -756, -756, 51, 21, 63, 918,
- -2, 319, 0, 1, 319, -756, 67, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, 2499,
- -756, -756, -756, -756, -756, -756, -756, -756, 2895, -756, -756, -756, -756, 5, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, 86, -756,
- -756, -756, 70, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, 102, -756, 116, 12, -23, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, 58, -756, -756, -756, 88, 319, 130, -756, -756, 1443, 1196, -21, -70, -36, -756,
- 3027, -756, -756, 3027, -756, -756, -756, -756, 85, 119, -756, -756, -756, 2499, -756, -756,
- 2499, -25, 3147, -756, -756, -756, -756, 90, -756, -756, 91, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, 1057, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -20, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, 1575, 2631,
- 2763, 2763, 27, 29, 27, 31, 2763, 2763, 2763, 33, 2763, 2631, 33, 38, 39, -756,
- 2763, 2763, -756, -756, 2763, 40, 33, 2631, 2631, 33, 33, -756, 41, 42, 52, 2631,
- 69, 2631, 33, 33, -756, 293, 71, 74, 33, 75, 27, 78, 2763, -756, -756, -756,
- -756, -756, 80, -756, 33, 81, 89, 33, 94, 97, 2763, 2763, 98, 2631, 100, 2631,
- 2631, 105, 106, 108, 109, 2763, 2763, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631,
- 2631, -756, 110, 2631, 3027, 3027, -756, 158, 114, 11, 3181, -756, 1334, -756, -756, -756,
- -756, -756, 133, 2631, -756, -756, -756, -756, -756, -756, 148, 153, 154, 2631, 178, 2631,
- 179, 180, 181, 2631, 184, 185, 187, 188, -756, 2499, 226, 191, 193, 242, 245, 207,
- 2631, 210, 211, 213, 214, 215, 2631, 2631, 2499, 216, 2631, 217, 218, 219, 262, 222,
- 225, 230, 233, 235, 236, 238, 254, 255, 2631, 2631, 257, 2631, 270, 2631, 292, 294,
- 329, 295, 296, 264, 335, 2631, 262, 300, 2631, 2631, 301, 2631, 2631, 302, 303, 304,
- 306, 2631, 307, 2631, 308, 309, 2631, 2631, 2631, 2631, 313, 314, 320, 321, 322, 323,
- 324, 325, 326, 330, 331, 336, 262, 2631, 342, -756, -756, -756, -756, -756, 343, -756,
- -756, 318, -756, 345, -756, -756, -756, 347, -756, 348, -756, -756, -756, 2631, -756, -756,
- -756, -756, 1707, 349, 2631, -756, -756, 2631, 2631, -756, 2631, -756, -756, -756, -756, -756,
- 2631, 2631, 350, -756, 2631, -756, -756, -756, 2631, 355, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, 2631, 2631, -756, 351, -756, 2631, -756, -756, 2631, -756, -756, 2631, 2631,
- 2631, 371, -756, 2631, 2631, -756, 2631, 2631, -756, -756, -756, -756, 2631, -756, 2631, -756,
- -756, 2631, 2631, 2631, 2631, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, 387, 2631, -756, -756, -756, 2631, -756, -756, -756, -756, -756, -756, 354, 356, 358,
- 361, 363, 390, 401, 401, 366, 2631, 2631, 370, 367, -756, 2631, 374, -756, 381, 375,
- 415, 419, 420, 386, 2631, -756, -756, -756, 1839, 388, 389, 2631, 2631, 2631, 391, 2631,
- 392, -756, -756, -756, -756, -756, -756, 2631, 423, 2631, 414, 414, 393, 2631, 396, 400,
- -756, 402, 403, 404, 1971, -756, 405, 2631, 431, 2631, 2631, 407, 408, 2103, 2235, 2367,
- 410, 412, 413, 417, 418, 421, 432, 433, 434, -756, 2631, 428, -756, 2631, 390, 423,
- -756, -756, 435, 436, -756, 437, -756, 438, -756, -756, 2631, 422, 444, -756, 439, 440,
- 442, 443, -756, -756, -756, 445, 446, 447, -756, 448, -756, -756, 2631, -756, 423, 449,
- -756, -756, -756, -756, 450, 2631, 2631, -756, -756, -756, -756, -756, -756, -756, -756, 451,
- 452, 455, -756, 456, 457, 458, 459, -756, 462, 464, -756, -756, -756, -756};
+ -127, -115, -110, -107, 37, -94, -1017, -1017, -1017, -1017, -1017, -1017, 136,
+ -17, 1502, 846, -82, 79, -73, -69, 79, -58, 15, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, 2889, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, 3477, -1017, -1017, -1017, -1017, -55, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, 72, -1017, -1017, -1017, 17, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, 65, -1017, -1017, 91, -94, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, 10, -1017, -1017,
+ -1017, 1533, 79, 76, -1017, 1713, 1178, -47, -110, -90, -1017, 3624, -1017,
+ -1017, 3624, -1017, -1017, -1017, -1017, 18, 82, -1017, -1017, -1017, 2889, -1017,
+ -1017, 2889, -128, 3754, -1017, -1017, -1017, -1017, 45, -1017, -1017, 46, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, 1012, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -37, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, 1860, 3036, 3183, 3183, -20, -19, -20,
+ -16, 3183, 3183, 3183, -5, 3183, 3036, -5, 2, 3, -58, 3183, 3183,
+ -58, -58, -58, -58, 3330, 3330, 3330, 3183, 7, -5, 3036, 3036, -5,
+ -5, 3330, -1017, 9, 12, 3330, 3330, 3330, 13, 3036, 14, 3036, -5,
+ -5, -58, 148, 3330, 3330, 19, 3330, 20, -5, 28, -20, 29, 3183,
+ -58, -58, -58, -58, -58, 35, -58, 3330, -5, 39, 40, -5, 41,
+ 42, 3183, 3183, 44, 3036, 49, 3036, 3036, 54, 55, 58, 59, 3183,
+ 3183, 3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036, 3036, -58, 60,
+ 3036, 3330, 3330, 3624, 3624, -1017, 1603, 62, -66, 3796, -1017, 1343, -1017,
+ -1017, -1017, -1017, -1017, 67, 3036, -1017, -1017, -1017, -1017, -1017, -1017, 88,
+ 124, 137, 3036, 139, 3036, 141, 143, 145, 3036, 146, 147, 151, 152,
+ -1017, 2889, 104, 155, 162, 113, 204, 220, 221, 1343, -1017, -1017, 166,
+ 168, 226, 175, 178, 236, 180, 181, 241, 185, 3036, 186, 188, 189,
+ 192, 197, 198, 207, 269, 3036, 3036, 213, 214, 274, 219, 223, 277,
+ 224, 231, 278, 2889, 233, 3036, 234, 239, 242, 303, 246, 247, 251,
+ 252, 254, 255, 260, 261, 265, 270, 280, 335, 281, 284, 342, 3036,
+ 290, 295, 353, 3036, 300, 3036, 304, 3036, 307, 311, 362, 313, 315,
+ 370, 371, 3036, 303, 332, 337, 392, 341, 3036, 3036, 347, 3036, 3036,
+ 351, 352, 354, 355, 3036, 356, 3036, 357, 358, 3036, 3036, 3036, 3036,
+ 359, 361, 363, 364, 365, 366, 367, 368, 369, 372, 373, 374, 303,
+ 3036, 375, 376, 377, 399, 379, 380, 419, -1017, -1017, -1017, -1017, -1017,
+ 381, -1017, -1017, 1693, -1017, 383, -1017, -1017, -1017, 384, -1017, 385, -1017,
+ -1017, -1017, 3036, -1017, -1017, -1017, -1017, 2007, 386, 3036, -1017, -1017, 3036,
+ 437, 3036, 3036, 3036, -1017, -1017, 3036, -1017, -1017, 3036, -1017, -1017, 3036,
+ -1017, 3036, -1017, -1017, -1017, -1017, -1017, -1017, -1017, 3036, 3036, 3036, -1017,
+ -1017, 3036, -1017, -1017, 3036, -1017, -1017, 3036, 388, -1017, 3036, -1017, -1017,
+ -1017, 3036, 438, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, 3036, -1017, -1017, 3036, 3036, -1017, -1017, 3036, 3036, -1017, 390, -1017,
+ 3036, -1017, -1017, 3036, -1017, -1017, 3036, 3036, 3036, 441, -1017, -1017, 3036,
+ -1017, 3036, 3036, -1017, 3036, 3036, -1017, -1017, -1017, -1017, 3036, -1017, 3036,
+ -1017, -1017, 3036, 3036, 3036, 3036, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, 442, 3036, -1017, -1017, -1017, 3036, -1017, -1017,
+ 3036, -1017, -1017, 3036, -1017, -1017, -1017, -1017, -1017, -1017, 393, 394, 398,
+ 401, 403, 446, -1017, 3036, 53, 457, 455, 457, 443, 443, 443, 409,
+ 443, 3036, 3036, 443, 443, 443, 410, 412, -1017, 3036, 443, 443, 414,
+ 443, -1017, 417, 415, 458, 470, 471, 424, 3036, 443, -1017, -1017, -1017,
+ 2154, 428, 433, 3036, 3036, 3036, 434, 3036, 444, 443, 443, -1017, -1017,
+ -1017, -1017, -1017, -1017, 3036, 478, -1017, 3036, 3036, 484, 492, 3036, 443,
+ -4, 443, 443, 3036, 450, 451, 452, 454, 456, 3036, 459, 460, 461,
+ 462, 464, -1017, 469, 473, 475, 476, 477, 479, 2301, -1017, 480, 3036,
+ 493, 3036, 3036, 481, 483, 486, 2448, 2595, 2742, 472, 491, 497, 494,
+ 500, 501, 503, 506, 507, 508, 509, -1017, 3036, 490, -1017, -1017, 3036,
+ 513, 3036, 524, -1017, 446, -1017, 510, 478, -1017, 511, 512, 514, -1017,
+ 517, -1017, 518, 519, 520, 521, 526, -1017, 527, 531, 532, -1017, 533,
+ 534, -1017, -1017, 3036, 529, 538, -1017, 540, 541, 542, 543, 549, -1017,
+ -1017, -1017, 550, 555, 556, -1017, 557, -1017, 558, 563, -1017, 3036, -1017,
+ 3036, 574, -1017, 3036, 478, 564, 568, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, 569, 3036, 3036, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, 572, -1017, 3036, 443,
+ 618, 575, -1017, 578, -1017, 581, 582, 583, -1017, 603, 484, 584, -1017,
+ 586, 587, -1017, 3036, 513, -1017, -1017, -1017, 588, 574, 589, 443, -1017,
+ 590, 591, -1017};
const short ParserGen::yydefact_[] = {
- 0, 0, 0, 0, 0, 6, 2, 75, 3, 458, 4, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 8, 0, 10, 11, 12, 13, 14, 15, 5, 99, 127, 116, 126, 123, 130, 124, 119,
- 121, 122, 129, 117, 128, 131, 118, 125, 120, 0, 74, 319, 101, 100, 107, 105, 106, 104, 0,
- 114, 76, 78, 79, 0, 156, 209, 212, 132, 195, 134, 196, 208, 211, 210, 133, 213, 157, 139,
- 172, 135, 146, 203, 206, 173, 174, 214, 158, 457, 140, 159, 160, 141, 142, 175, 176, 136, 161,
- 162, 163, 143, 144, 177, 178, 164, 165, 145, 138, 137, 166, 215, 179, 180, 181, 183, 182, 167,
- 184, 197, 198, 199, 200, 201, 168, 202, 205, 185, 169, 108, 111, 112, 113, 110, 109, 188, 186,
- 187, 189, 190, 191, 170, 204, 207, 147, 148, 149, 150, 151, 152, 192, 153, 154, 194, 193, 171,
- 155, 469, 502, 503, 504, 501, 0, 505, 468, 459, 0, 256, 255, 254, 252, 251, 250, 244, 243,
- 242, 248, 247, 246, 241, 245, 249, 253, 19, 20, 21, 22, 24, 26, 0, 23, 0, 0, 6,
- 258, 257, 217, 218, 219, 220, 221, 222, 223, 224, 495, 498, 225, 216, 226, 227, 228, 229, 230,
- 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 268, 269, 270, 271, 272, 277, 273, 274, 275,
- 278, 279, 95, 259, 260, 262, 263, 264, 276, 265, 266, 267, 490, 491, 492, 493, 261, 82, 80,
- 77, 102, 467, 466, 465, 464, 461, 460, 463, 462, 0, 470, 471, 17, 0, 0, 0, 9, 7,
- 0, 0, 0, 0, 0, 25, 0, 66, 68, 0, 65, 67, 27, 115, 0, 0, 494, 496, 497,
- 0, 499, 81, 0, 0, 0, 83, 84, 85, 86, 103, 454, 455, 0, 59, 58, 55, 54, 57,
- 51, 50, 53, 43, 42, 45, 47, 46, 49, 280, 0, 44, 48, 52, 56, 38, 39, 40, 41,
- 60, 61, 62, 31, 32, 33, 34, 35, 36, 37, 28, 30, 63, 64, 290, 304, 302, 291, 292,
- 321, 293, 392, 393, 394, 294, 486, 487, 297, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407,
- 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 419, 418, 295, 506, 507, 508, 509, 510, 511,
- 512, 296, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 322, 323, 324, 325, 326, 327, 328,
- 329, 330, 331, 332, 333, 334, 335, 336, 298, 472, 473, 474, 475, 476, 477, 478, 299, 346, 347,
- 348, 349, 350, 351, 352, 353, 354, 356, 357, 358, 355, 359, 360, 303, 29, 16, 0, 500, 87,
- 82, 96, 89, 92, 94, 93, 91, 98, 456, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0,
- 320, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 8,
- 8, 8, 8, 8, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0,
- 0, 0, 70, 0, 0, 0, 0, 307, 312, 282, 281, 284, 283, 285, 0, 0, 286, 288, 309,
- 287, 289, 310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0,
+ 0, 0, 0, 0, 0, 6, 2, 74, 3, 561, 4, 1, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 9, 10, 11, 12, 13, 14, 5, 98, 126, 115, 125, 122, 136, 129, 123,
+ 131, 118, 140, 137, 138, 139, 135, 133, 141, 120, 121, 128, 116, 127, 130, 134, 117, 124, 119,
+ 132, 0, 73, 347, 100, 99, 106, 104, 105, 103, 0, 113, 75, 77, 78, 0, 166, 234, 237,
+ 142, 220, 144, 221, 233, 236, 235, 143, 238, 167, 149, 182, 145, 156, 228, 231, 183, 198, 184,
+ 199, 185, 186, 187, 239, 168, 560, 150, 169, 170, 151, 152, 188, 200, 201, 189, 190, 191, 146,
+ 171, 172, 173, 153, 154, 202, 203, 192, 193, 174, 194, 175, 155, 148, 147, 176, 240, 204, 205,
+ 206, 208, 207, 177, 209, 195, 222, 223, 224, 225, 226, 178, 227, 230, 210, 179, 107, 110, 111,
+ 112, 109, 108, 213, 211, 212, 214, 215, 216, 180, 229, 232, 157, 158, 159, 160, 161, 162, 217,
+ 163, 164, 219, 218, 181, 165, 196, 197, 572, 605, 606, 607, 604, 0, 608, 571, 562, 0, 281,
+ 280, 279, 277, 276, 275, 269, 268, 267, 273, 272, 271, 266, 270, 274, 278, 18, 19, 20, 21,
+ 23, 25, 0, 22, 8, 0, 6, 283, 282, 242, 243, 244, 245, 246, 247, 248, 249, 598, 601,
+ 250, 241, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 293, 294,
+ 295, 296, 297, 302, 298, 299, 300, 303, 304, 94, 284, 285, 287, 288, 289, 301, 290, 291, 292,
+ 593, 594, 595, 596, 286, 81, 79, 76, 101, 570, 569, 568, 567, 564, 563, 566, 565, 0, 573,
+ 574, 16, 0, 0, 0, 7, 0, 0, 0, 0, 0, 24, 0, 65, 67, 0, 64, 66, 26,
+ 114, 0, 0, 597, 599, 600, 0, 602, 80, 0, 0, 0, 82, 83, 84, 85, 102, 557, 558,
+ 0, 58, 57, 54, 53, 56, 50, 49, 52, 42, 41, 44, 46, 45, 48, 305, 0, 43, 47,
+ 51, 55, 37, 38, 39, 40, 59, 60, 61, 30, 31, 32, 33, 34, 35, 36, 27, 29, 62,
+ 63, 317, 332, 330, 318, 319, 349, 320, 420, 421, 422, 321, 589, 590, 324, 426, 427, 428, 429,
+ 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 447, 446, 322,
+ 609, 610, 611, 612, 613, 614, 615, 327, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465,
+ 466, 467, 468, 469, 323, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 350, 351, 352, 353,
+ 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 325, 575, 576, 577, 578, 579, 580, 581,
+ 326, 374, 375, 376, 377, 378, 379, 380, 381, 382, 384, 385, 386, 383, 387, 388, 331, 28, 15,
+ 0, 603, 86, 81, 95, 88, 91, 93, 92, 90, 97, 559, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 69, 0, 0, 0, 0, 335, 340, 307, 306, 309, 308, 310, 0, 0, 311, 315, 337, 312,
+ 316, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0,
+ 0, 0, 478, 0, 0, 0, 8, 313, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 432, 0, 0, 73, 72, 69, 71, 18, 83, 88, 90, 0, 363, 0, 385, 388, 361, 0, 395,
- 0, 384, 387, 386, 0, 362, 389, 364, 513, 0, 0, 0, 379, 382, 0, 0, 390, 0, 514,
- 366, 367, 515, 516, 0, 0, 0, 368, 0, 370, 517, 518, 0, 0, 337, 338, 339, 340, 341,
- 342, 343, 344, 345, 0, 0, 519, 0, 396, 0, 391, 440, 0, 441, 442, 0, 0, 0, 0,
- 481, 0, 0, 484, 0, 0, 305, 306, 378, 381, 0, 375, 0, 446, 447, 0, 0, 0, 0,
- 380, 383, 535, 536, 537, 538, 539, 540, 452, 541, 542, 453, 0, 0, 543, 97, 311, 0, 316,
- 317, 315, 318, 313, 308, 0, 0, 0, 0, 0, 530, 421, 421, 0, 427, 427, 0, 0, 433,
- 0, 0, 280, 0, 0, 437, 0, 0, 0, 0, 280, 280, 280, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 314, 479, 480, 300, 420, 488, 0, 532, 0, 423, 423, 0, 428, 0, 0, 489,
- 0, 0, 0, 0, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 531, 0, 0, 422, 0, 530, 532, 365, 429, 0, 0, 369, 0, 371,
- 0, 373, 438, 0, 0, 0, 374, 0, 0, 0, 0, 301, 445, 448, 0, 0, 0, 376, 0,
- 377, 533, 0, 424, 532, 0, 430, 431, 434, 372, 0, 0, 0, 435, 482, 483, 485, 449, 450,
- 451, 436, 0, 0, 0, 439, 0, 0, 0, 0, 426, 0, 0, 534, 425, 444, 443};
+ 0, 0, 535, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535,
+ 0, 0, 0, 0, 0, 0, 0, 0, 72, 71, 68, 70, 17, 82, 87, 89, 0, 391, 0,
+ 413, 416, 389, 0, 423, 0, 412, 415, 414, 0, 390, 417, 392, 616, 0, 0, 0, 407, 410,
+ 0, 470, 0, 0, 0, 493, 491, 0, 496, 494, 0, 502, 500, 0, 418, 0, 617, 394, 395,
+ 618, 619, 505, 503, 0, 0, 0, 499, 497, 0, 514, 512, 0, 517, 515, 0, 0, 396, 0,
+ 398, 620, 621, 0, 0, 365, 366, 367, 368, 369, 370, 371, 372, 373, 526, 524, 0, 529, 527,
+ 0, 0, 508, 506, 0, 0, 622, 0, 424, 0, 419, 543, 0, 544, 545, 0, 0, 0, 0,
+ 523, 521, 0, 584, 0, 0, 587, 0, 0, 333, 334, 406, 409, 0, 403, 0, 549, 550, 0,
+ 0, 0, 0, 408, 411, 638, 639, 640, 641, 642, 643, 555, 644, 645, 556, 0, 0, 646, 511,
+ 509, 0, 520, 518, 0, 96, 339, 0, 344, 345, 343, 346, 341, 336, 0, 0, 0, 0, 0,
+ 633, 479, 0, 476, 449, 484, 449, 451, 451, 451, 0, 451, 530, 530, 451, 451, 451, 0, 0,
+ 536, 0, 451, 451, 0, 451, 305, 0, 0, 540, 0, 0, 0, 0, 451, 305, 305, 305, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 451, 451, 342, 582, 583, 328, 448, 591, 0, 635, 471,
+ 0, 0, 472, 482, 0, 451, 0, 451, 451, 0, 0, 0, 0, 0, 0, 531, 0, 0, 0,
+ 0, 0, 592, 0, 0, 0, 0, 0, 0, 0, 425, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 0, 481, 477,
+ 0, 486, 0, 0, 450, 633, 485, 0, 635, 452, 0, 0, 0, 393, 0, 532, 0, 0, 0,
+ 0, 0, 397, 0, 0, 0, 399, 0, 0, 401, 541, 0, 0, 0, 402, 0, 0, 0, 0,
+ 0, 329, 548, 551, 0, 0, 0, 404, 0, 405, 0, 0, 636, 0, 473, 0, 474, 483, 0,
+ 635, 0, 0, 492, 495, 501, 504, 533, 534, 498, 513, 516, 537, 525, 528, 507, 400, 0, 0,
+ 0, 538, 522, 585, 586, 588, 552, 553, 554, 539, 510, 519, 0, 487, 0, 451, 476, 0, 490,
+ 0, 542, 0, 0, 0, 475, 0, 472, 0, 454, 0, 0, 637, 0, 486, 453, 547, 546, 0,
+ 474, 0, 451, 488, 0, 0, 489};
const short ParserGen::yypgoto_[] = {
- -756, 209, -756, -756, -186, -14, -756, -756, -13, -756, -12, -756, 229, -756, -756, -52,
- -756, -756, -244, -238, -232, -230, -228, -10, -222, -9, -11, -4, -220, -218, -261, -249,
- -756, -216, -214, -212, -756, -208, -206, -240, -44, -756, -756, -756, -756, -756, -756, -19,
- -756, 328, -756, -756, -756, -756, -756, -756, -756, -756, -756, 243, -512, -756, 2, 34,
- -756, 202, -756, -756, -756, -236, 83, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -399, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -326, -755, -251, -289,
- -525, -756, -543, -756, -252, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, -257,
- -756, 115, 261, -756, 87, -756, -756, -756, -756, -1, -756, -756, -756, -756, -756, -756,
- -756, -756, -756, -756, -756, -756, -756, -17, -756};
+ -1017, 378, -1017, -1017, -96, -14, -1017, -1017, -13, -1017, -12, -1017, 387,
+ -1017, -1017, 73, -1017, -1017, -281, -243, -231, -227, -218, -9, -196, -3,
+ -10, -1, -194, -192, -287, -262, -1017, -190, -186, -181, -312, -175, -171,
+ -252, 109, -1017, -1017, -1017, -1017, -1017, -1017, 84, -1017, 467, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, 397, -546, -1017, -8, -485, -1017,
+ -25, -1017, -1017, -1017, -248, 68, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -492, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -365, -1016, -251, -423, -669, -1017, -1017, -445, -456, -432, -1017, -1017, -1017,
+ -448, -1017, -604, -1017, -237, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, -1017, 259, 1149, 865, -335, 405, -1017, 215, -1017,
+ -1017, -1017, -1017, 99, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017, -1017,
+ -1017, -1017, -1017, -1017, 164};
const short ParserGen::yydefgoto_[] = {
- -1, 532, 276, 758, 154, 155, 277, 156, 157, 158, 159, 533, 160, 56, 278, 534, 763, 286, 57,
- 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
- 238, 239, 541, 241, 242, 243, 267, 244, 441, 442, 6, 13, 22, 23, 24, 25, 26, 27, 28,
- 261, 535, 333, 334, 335, 443, 542, 336, 564, 622, 337, 338, 543, 544, 657, 340, 341, 342, 343,
- 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 607, 360, 361,
- 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380,
- 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399,
- 400, 401, 402, 403, 404, 405, 406, 808, 843, 810, 846, 697, 824, 446, 266, 814, 407, 408, 409,
- 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428,
- 429, 430, 550, 551, 545, 553, 554, 8, 14, 268, 247, 269, 58, 59, 291, 292, 293, 294, 60,
- 61, 538, 10, 15, 258, 259, 298, 161, 4, 608, 188};
+ -1, 588, 301, 900, 180, 181, 302, 182, 183, 184, 185, 589, 186, 67, 303, 590, 905, 311,
+ 68, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261,
+ 262, 263, 264, 265, 597, 267, 268, 269, 292, 270, 482, 483, 6, 13, 22, 23, 24, 25,
+ 26, 27, 28, 287, 591, 358, 359, 360, 484, 598, 361, 620, 716, 362, 363, 599, 600, 757,
+ 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382,
+ 383, 384, 698, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399,
+ 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417,
+ 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435,
+ 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 967, 1023, 974, 979, 821, 1001,
+ 915, 1027, 1117, 971, 780, 1029, 976, 1080, 972, 487, 291, 985, 448, 449, 450, 451, 452, 453,
+ 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471,
+ 606, 607, 601, 609, 610, 637, 8, 14, 293, 273, 294, 69, 70, 316, 317, 318, 319, 71,
+ 72, 594, 10, 15, 284, 285, 323, 187, 4, 699};
const short ParserGen::yytable_[] = {
- 53, 54, 55, 240, 187, 283, 181, 179, 180, 181, 179, 180, 246, 182, 281, 431, 182, 279, 431,
- 183, 649, 650, 186, 326, 435, 674, 326, 436, 166, 167, 168, 287, 332, 288, 319, 332, 339, 319,
- 5, 339, 320, 440, 321, 320, 322, 321, 7, 322, 9, 438, 323, 296, 324, 323, 325, 324, 327,
- 325, 328, 327, 329, 328, 289, 329, 330, 288, 331, 330, 11, 331, 279, 30, 29, 31, 32, 33,
- 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 721, 297, 437, 879, 12, 289,
- 609, 610, 47, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 162, 48, 184, 185, 290, 189, 248, 753, 260, 896, 49, 262, 211, 263, 264, 249, 250, 1, 2,
- 3, 251, 252, 270, 433, 177, 434, 271, 444, 313, 445, 557, 50, 559, 51, 563, 272, 290, 253,
- 254, 568, 569, 576, 582, 583, 255, 256, 16, 17, 18, 19, 20, 21, 653, 584, 31, 32, 33,
- 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 586, 658, 600, 192, 193, 601,
- 603, 552, 552, 605, 194, 613, 616, 552, 552, 552, 660, 552, 257, 52, 617, 661, 662, 552, 552,
- 619, 651, 552, 620, 625, 556, 627, 558, 195, 196, 475, 630, 631, 240, 632, 633, 647, 197, 198,
- 273, 274, 664, 666, 667, 668, 199, 552, 670, 671, 820, 672, 673, 240, 676, 677, 240, 678, 829,
- 830, 831, 552, 552, 181, 179, 180, 604, 679, 202, 680, 182, 681, 552, 552, 683, 684, 280, 685,
- 686, 687, 691, 693, 694, 695, 696, 203, 698, 431, 431, 699, 718, 181, 179, 180, 700, 326, 326,
- 701, 182, 702, 703, 440, 704, 279, 332, 332, 319, 319, 339, 339, 273, 274, 320, 320, 321, 321,
- 322, 322, 705, 706, 675, 709, 323, 323, 324, 324, 325, 325, 327, 327, 328, 328, 329, 329, 711,
- 690, 330, 330, 331, 331, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 713, 715, 714, 716, 717, 719, 591, 592, 722, 725, 728, 729, 730, 593, 731, 733, 735,
- 736, 163, 164, 165, 741, 742, 166, 167, 168, 757, 779, 743, 744, 745, 746, 747, 748, 749, 49,
- 594, 595, 750, 751, 169, 170, 171, 788, 752, 596, 597, 172, 173, 174, 755, 756, 764, 598, 765,
- 766, 769, 776, 782, 799, 548, 548, 802, 807, 803, 804, 548, 548, 548, 805, 548, 806, 809, 812,
- 817, 599, 548, 548, 816, 536, 548, 819, 822, 125, 126, 127, 128, 129, 130, 821, 823, 825, 826,
- 827, 845, 833, 834, 842, 838, 840, 885, 848, 570, 850, 548, 573, 574, 851, 858, 876, 852, 853,
- 854, 856, 52, 861, 862, 866, 548, 548, 867, 868, 886, 590, 869, 870, 275, 759, 871, 548, 548,
- 175, 176, 177, 178, 611, 612, 546, 614, 652, 872, 873, 874, 880, 881, 882, 883, 887, 888, 566,
- 889, 890, 285, 891, 892, 893, 894, 897, 898, 901, 902, 578, 579, 903, 904, 905, 906, 907, 646,
- 585, 908, 587, 909, 265, 432, 656, 878, 811, 847, 815, 537, 240, 0, 181, 179, 180, 295, 549,
- 549, 0, 182, 0, 654, 549, 549, 549, 240, 549, 0, 626, 0, 628, 629, 549, 549, 0, 0,
- 549, 0, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 0, 555, 648, 0, 0, 0, 560,
- 561, 562, 0, 565, 0, 549, 0, 0, 0, 571, 572, 659, 0, 575, 0, 0, 0, 0, 0,
- 549, 549, 663, 0, 665, 0, 0, 0, 669, 0, 0, 549, 549, 0, 0, 0, 0, 0, 606,
- 0, 0, 682, 0, 0, 0, 0, 0, 688, 689, 0, 0, 692, 623, 624, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 634, 635, 707, 708, 0, 710, 0, 712, 0, 0, 0, 760, 761, 762,
- 0, 720, 0, 0, 723, 724, 0, 726, 727, 0, 0, 0, 0, 732, 0, 734, 567, 0, 737,
- 738, 739, 740, 0, 0, 0, 0, 577, 0, 0, 580, 581, 0, 0, 0, 0, 754, 0, 0,
- 588, 589, 0, 0, 0, 0, 602, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 615,
- 767, 0, 618, 0, 621, 0, 0, 770, 0, 0, 771, 772, 0, 773, 0, 0, 0, 0, 0,
- 774, 775, 0, 0, 777, 0, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 780, 781, 0, 0, 0, 783, 0, 0, 784, 0, 0, 785, 786, 787, 0, 0, 789, 790, 0,
- 791, 792, 0, 0, 0, 0, 793, 0, 794, 0, 0, 795, 796, 797, 798, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 800, 0, 0, 0, 801, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 813, 813, 0, 0, 0, 818, 0, 0, 0,
- 0, 0, 0, 0, 0, 828, 0, 0, 0, 832, 0, 0, 835, 836, 837, 0, 839, 0, 0,
- 0, 0, 0, 0, 0, 841, 0, 844, 0, 0, 0, 849, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 857, 0, 859, 860, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 875, 0, 0, 877, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 884,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 895, 0,
- 0, 0, 0, 0, 0, 0, 0, 899, 900, 62, 63, 64, 65, 66, 67, 68, 31, 32, 33,
- 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 69, 70, 71, 72, 73, 0,
- 0, 74, 0, 75, 76, 77, 78, 79, 80, 81, 82, 0, 0, 0, 83, 84, 0, 0, 0,
- 0, 85, 86, 0, 87, 88, 0, 0, 89, 90, 49, 91, 92, 0, 0, 0, 0, 93, 94,
- 95, 96, 0, 0, 0, 97, 98, 99, 100, 101, 102, 103, 0, 104, 105, 106, 107, 0, 0,
- 108, 109, 110, 111, 112, 113, 114, 0, 0, 115, 116, 117, 118, 119, 120, 0, 121, 122, 123,
- 124, 125, 126, 127, 128, 129, 130, 0, 0, 131, 132, 133, 134, 135, 136, 137, 138, 139, 0,
- 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 52, 153, 447, 448, 449, 450,
- 451, 452, 453, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 454, 455, 456, 457, 458, 0, 0, 459, 0, 460, 461, 462, 463, 464, 465, 466, 467, 0, 0,
- 0, 468, 469, 0, 0, 0, 0, 0, 470, 0, 471, 472, 0, 0, 473, 474, 475, 476, 477,
- 0, 0, 0, 0, 478, 479, 480, 481, 0, 0, 0, 482, 483, 484, 485, 486, 487, 488, 0,
- 489, 490, 491, 492, 0, 0, 493, 494, 495, 496, 497, 498, 499, 0, 0, 500, 501, 502, 503,
- 504, 505, 0, 506, 507, 508, 509, 0, 0, 0, 0, 0, 0, 0, 0, 510, 511, 512, 513,
- 514, 515, 516, 517, 518, 0, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531,
- 273, 274, 62, 63, 64, 65, 66, 67, 68, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 69, 70, 71, 72, 73, 0, 0, 74, 0, 75, 76, 77, 78,
- 79, 80, 81, 82, 0, 0, 0, 83, 84, 0, 0, 0, 0, 284, 86, 0, 87, 88, 0,
- 0, 89, 90, 49, 91, 92, 0, 0, 0, 0, 93, 94, 95, 96, 0, 0, 0, 97, 98,
- 99, 100, 101, 102, 103, 0, 104, 105, 106, 107, 0, 0, 108, 109, 110, 111, 112, 113, 114,
- 0, 0, 115, 116, 117, 118, 119, 120, 0, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
- 0, 0, 131, 132, 133, 134, 135, 136, 137, 138, 139, 0, 140, 141, 142, 143, 144, 145, 146,
- 147, 148, 149, 150, 151, 152, 52, 447, 448, 449, 450, 451, 452, 453, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 454, 455, 456, 457, 458, 0, 0, 459,
- 0, 460, 461, 462, 463, 464, 465, 466, 467, 0, 0, 0, 468, 469, 0, 0, 0, 0, 0,
- 470, 0, 471, 472, 0, 0, 473, 474, 0, 476, 477, 0, 0, 0, 0, 478, 479, 480, 481,
- 0, 0, 0, 482, 483, 484, 485, 486, 487, 488, 0, 489, 490, 491, 492, 0, 0, 493, 494,
- 495, 496, 497, 498, 499, 0, 0, 500, 501, 502, 503, 504, 505, 0, 506, 507, 508, 509, 0,
- 0, 0, 0, 0, 0, 0, 0, 510, 511, 512, 513, 514, 515, 516, 517, 518, 0, 519, 520,
- 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 190, 191, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 163, 164, 165, 0, 0, 166, 167, 168, 282, 0, 0, 0, 0, 0, 192,
- 193, 0, 0, 0, 0, 0, 194, 169, 170, 171, 0, 0, 0, 0, 172, 173, 174, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 196, 0, 0, 0, 0, 0, 0, 0,
- 197, 198, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 200, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
- 213, 214, 215, 175, 176, 177, 178, 216, 217, 218, 190, 191, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 163, 164, 165, 0, 0, 166, 167, 168, 539, 0, 0, 0, 0, 0, 192, 193,
- 0, 0, 0, 0, 0, 194, 169, 170, 171, 0, 0, 0, 0, 172, 173, 174, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 196, 0, 0, 0, 0, 0, 0, 0, 197,
- 198, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313,
- 540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
- 214, 215, 175, 176, 177, 178, 216, 217, 218, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 163, 164, 165, 0, 0, 166, 167, 168, 768, 0, 0, 0, 0, 0, 192, 193, 0,
- 0, 0, 0, 0, 194, 169, 170, 171, 0, 0, 0, 0, 172, 173, 174, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 195, 196, 0, 0, 0, 0, 0, 0, 0, 197, 198,
- 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 540,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
- 215, 175, 176, 177, 178, 216, 217, 218, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 163, 164, 165, 0, 0, 166, 167, 168, 804, 0, 0, 0, 0, 0, 192, 193, 0, 0,
- 0, 0, 0, 194, 169, 170, 171, 0, 0, 0, 0, 172, 173, 174, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 195, 196, 0, 0, 0, 0, 0, 0, 0, 197, 198, 0,
- 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 540, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
- 175, 176, 177, 178, 216, 217, 218, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 163, 164, 165, 0, 0, 166, 167, 168, 855, 0, 0, 0, 0, 0, 192, 193, 0, 0, 0,
- 0, 0, 194, 169, 170, 171, 0, 0, 0, 0, 172, 173, 174, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 195, 196, 0, 0, 0, 0, 0, 0, 0, 197, 198, 0, 0,
- 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 540, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 175,
- 176, 177, 178, 216, 217, 218, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163,
- 164, 165, 0, 0, 166, 167, 168, 863, 0, 0, 0, 0, 0, 192, 193, 0, 0, 0, 0,
- 0, 194, 169, 170, 171, 0, 0, 0, 0, 172, 173, 174, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 195, 196, 0, 0, 0, 0, 0, 0, 0, 197, 198, 0, 0, 0,
- 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 540, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 175, 176,
- 177, 178, 216, 217, 218, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164,
- 165, 0, 0, 166, 167, 168, 864, 0, 0, 0, 0, 0, 192, 193, 0, 0, 0, 0, 0,
- 194, 169, 170, 171, 0, 0, 0, 0, 172, 173, 174, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 195, 196, 0, 0, 0, 0, 0, 0, 0, 197, 198, 0, 0, 0, 0,
- 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 540, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 175, 176, 177,
- 178, 216, 217, 218, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165,
- 0, 0, 166, 167, 168, 865, 0, 0, 0, 0, 0, 192, 193, 0, 0, 0, 0, 0, 194,
- 169, 170, 171, 0, 0, 0, 0, 172, 173, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 195, 196, 0, 0, 0, 0, 0, 0, 0, 197, 198, 0, 0, 0, 0, 0,
- 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 540, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 175, 176, 177, 178,
- 216, 217, 218, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165, 0,
- 0, 166, 167, 168, 0, 0, 0, 0, 0, 0, 192, 193, 0, 0, 0, 0, 0, 194, 169,
- 170, 171, 0, 0, 0, 0, 172, 173, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 195, 196, 0, 0, 0, 0, 0, 0, 0, 197, 198, 0, 0, 0, 0, 0, 0,
- 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 201, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 175, 176, 177, 178, 216,
- 217, 218, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165, 0, 0,
- 166, 167, 168, 0, 0, 0, 0, 0, 0, 192, 193, 0, 0, 0, 0, 0, 194, 169, 170,
- 171, 0, 0, 0, 0, 172, 173, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 195, 196, 0, 0, 0, 0, 0, 0, 0, 197, 198, 0, 0, 0, 0, 0, 0, 199,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 313, 540, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 175, 176, 177, 178, 216, 217,
- 218, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165, 0, 0, 166,
- 167, 168, 0, 0, 0, 0, 0, 0, 192, 193, 0, 0, 0, 0, 0, 194, 169, 170, 171,
- 0, 0, 0, 0, 172, 173, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 195, 196, 0, 0, 0, 0, 0, 0, 0, 197, 198, 0, 0, 0, 0, 0, 0, 199, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 547, 540, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203,
- 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 175, 176, 177, 178, 216, 217, 218,
- 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165, 0, 0, 166, 167,
- 168, 0, 0, 0, 0, 0, 0, 192, 193, 0, 0, 0, 0, 0, 194, 169, 170, 171, 0,
- 0, 0, 0, 172, 173, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195,
- 196, 0, 0, 0, 0, 0, 0, 0, 197, 198, 0, 0, 0, 0, 0, 0, 199, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 204,
- 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 175, 176, 177, 178, 216, 217, 218, 299,
- 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 302, 303, 0, 0, 304, 305, 306,
- 0, 0, 0, 0, 0, 0, 192, 193, 0, 0, 0, 0, 0, 194, 307, 308, 309, 0, 0,
- 0, 0, 310, 311, 312, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 196,
- 0, 0, 0, 0, 0, 0, 0, 197, 198, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 313, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0,
- 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 315, 316, 317, 318, 216, 217, 218, 163, 164,
- 165, 0, 0, 166, 167, 168, 0, 0, 0, 0, 0, 0, 192, 193, 0, 0, 0, 0, 0,
- 194, 169, 170, 171, 0, 0, 0, 0, 172, 173, 174, 0, 0, 163, 164, 165, 0, 0, 166,
- 167, 168, 655, 0, 195, 196, 0, 0, 192, 193, 0, 0, 0, 197, 198, 194, 169, 170, 171,
- 0, 0, 199, 0, 172, 173, 174, 0, 0, 0, 0, 0, 0, 439, 0, 0, 0, 0, 0,
- 195, 196, 0, 0, 0, 202, 0, 0, 0, 197, 198, 0, 0, 0, 0, 0, 0, 199, 0,
- 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 176, 177,
- 178, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 176, 177, 178};
+ 64, 65, 66, 602, 308, 313, 304, 207, 205, 209, 207, 205, 212, 478, 206, 622,
+ 208, 206, 1085, 208, 774, 321, 312, 476, 313, 5, 477, 306, 192, 193, 194, 7,
+ 648, 649, 9, 351, 854, 11, 351, 216, 217, 314, 749, 750, 667, 357, 669, 12,
+ 357, 364, 237, 29, 364, 481, 344, 700, 701, 344, 304, 188, 314, 322, 479, 1,
+ 2, 3, 345, 1119, 210, 345, 346, 889, 211, 346, 969, -480, -480, 970, 720, 347,
+ 722, 723, 347, 213, 215, 274, 286, 474, 730, 731, 732, 733, 734, 735, 736, 737,
+ 738, 739, 315, 288, 742, 348, 289, 349, 348, 350, 349, 352, 350, 295, 352, 353,
+ 475, 485, 353, 486, 354, 315, 759, 354, 338, 613, 355, 776, 615, 355, 356, 779,
+ 763, 356, 765, 753, 275, 276, 769, 619, 758, 277, 278, 189, 190, 191, 624, 625,
+ 192, 193, 194, 646, 203, 655, 218, 219, 656, 666, 668, 279, 280, 760, 220, 688,
+ 692, 794, 195, 196, 197, 281, 282, 266, 694, 696, 803, 804, 198, 199, 200, 704,
+ 272, 640, 643, 710, 711, 713, 714, 816, 719, 214, 653, 221, 222, 721, 658, 661,
+ 664, 761, 724, 725, 223, 224, 726, 727, 741, 683, 686, 837, 690, 225, 762, 841,
+ 764, 843, 766, 845, 767, 283, 768, 770, 771, 781, 707, 853, 772, 773, 673, 674,
+ 777, 859, 860, 228, 862, 863, 675, 778, 782, 783, 868, 784, 870, 785, 786, 873,
+ 874, 875, 876, 612, 787, 614, 229, 788, 789, 790, 791, 744, 747, 792, 793, 795,
+ 890, 796, 797, 676, 677, 798, 201, 202, 203, 204, 799, 800, 678, 679, 16, 17,
+ 18, 19, 20, 21, 801, 680, 207, 205, 305, 802, 805, 806, 909, 206, 807, 208,
+ 808, 810, 813, 912, 809, 811, 913, 695, 916, 917, 918, 681, 812, 919, 815, 817,
+ 920, 207, 205, 921, 818, 922, 304, 819, 206, 820, 208, 822, 823, 923, 924, 925,
+ 824, 825, 926, 826, 827, 927, 351, 351, 928, 828, 829, 930, 481, 997, 830, 931,
+ 357, 357, 775, 831, 364, 364, 1007, 1008, 1009, 344, 344, 833, 933, 832, 834, 934,
+ 935, 835, 836, 936, 937, 345, 345, 838, 939, 346, 346, 940, 839, 840, 941, 942,
+ 943, 842, 347, 347, 945, 844, 946, 947, 846, 948, 949, 814, 847, 848, 849, 950,
+ 850, 951, 851, 852, 952, 953, 954, 955, 348, 348, 349, 349, 350, 350, 352, 352,
+ 266, 855, 353, 353, 857, 957, 856, 354, 354, 958, 858, 894, 959, 355, 355, 960,
+ 861, 356, 356, 266, 864, 865, 266, 866, 867, 869, 871, 872, 877, 968, 878, 897,
+ 879, 880, 881, 882, 883, 884, 885, 984, 984, 886, 887, 888, 891, 892, 893, 992,
+ 895, 896, 898, 906, 907, 908, 911, 914, 929, 932, 938, 1005, 944, 956, 961, 962,
+ 1010, 592, 963, 1013, 1014, 1015, 964, 1017, 965, 966, 973, 975, 623, 982, 978, 990,
+ 991, 1021, 995, 999, 1024, 1025, 998, 1000, 1030, 1002, 1003, 647, 1004, 1035, 650, 651,
+ 1011, 980, 981, 1041, 983, 1012, 1016, 987, 988, 989, 1022, 670, 671, 1026, 993, 994,
+ 1018, 996, 1028, 1055, 693, 1057, 1058, 1036, 1037, 1038, 1006, 1039, 1056, 1040, 1077, 1042,
+ 1043, 709, 1044, 1045, 712, 1046, 715, 1019, 1020, 1076, 1047, 1079, 1065, 1078, 1048, 1081,
+ 1049, 1050, 1051, 1082, 1052, 1054, 1059, 1031, 1060, 1033, 1034, 1061, 472, 605, 605, 472,
+ 1066, 1101, 1068, 605, 605, 605, 1067, 605, 1069, 1070, 1102, 1100, 1071, 605, 605, 1072,
+ 1073, 1074, 1075, 1084, 1086, 1087, 605, 1088, 207, 205, 1089, 1090, 1091, 1092, 1093, 206,
+ 1114, 208, 1115, 1094, 1095, 1118, 604, 604, 1096, 1097, 1098, 1099, 604, 604, 604, 1116,
+ 604, 1103, 1104, 1105, 1106, 605, 604, 604, 1123, 1124, 1107, 1108, 634, 634, 634, 604,
+ 1109, 1110, 1111, 1112, 605, 605, 634, 1126, 1113, 1120, 634, 634, 634, 1121, 1122, 605,
+ 605, 1125, 970, 1134, 1129, 634, 634, 1130, 634, 1139, 1131, 1132, 1133, 1136, 604, 1137,
+ 1138, 1141, 1143, 1145, 1146, 901, 634, 1032, 752, 300, 1083, 977, 626, 604, 604, 629,
+ 630, 631, 632, 638, 641, 644, 756, 310, 604, 604, 290, 1135, 1142, 654, 1128, 1140,
+ 986, 659, 662, 665, 754, 593, 1127, 634, 634, 473, 672, 320, 684, 687, 0, 691,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 702, 703, 0, 705, 708, 0, 1144,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 266, 0,
+ 0, 0, 0, 0, 0, 0, 0, 902, 903, 904, 0, 740, 608, 608, 745, 748,
+ 0, 0, 608, 608, 608, 0, 608, 0, 0, 0, 0, 0, 608, 608, 0, 0,
+ 0, 0, 635, 635, 635, 608, 0, 266, 0, 0, 0, 0, 635, 0, 0, 0,
+ 635, 635, 635, 0, 0, 0, 0, 0, 0, 0, 0, 635, 635, 0, 635, 0,
+ 0, 0, 0, 0, 608, 0, 0, 0, 0, 0, 0, 0, 635, 0, 0, 0,
+ 0, 0, 0, 608, 608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, 608,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 635, 635, 472,
+ 472, 73, 74, 75, 76, 77, 78, 79, 31, 32, 33, 34, 35, 0, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 80, 81, 82, 57, 83, 84, 0, 0, 85, 0, 86, 87, 88,
+ 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 0, 0, 0, 99, 100, 0,
+ 0, 0, 0, 101, 102, 0, 103, 104, 0, 0, 105, 106, 107, 60, 108, 109,
+ 0, 0, 0, 0, 110, 111, 112, 113, 114, 115, 116, 0, 0, 0, 117, 118,
+ 119, 120, 121, 122, 123, 124, 125, 126, 0, 127, 128, 129, 130, 0, 0, 131,
+ 132, 133, 134, 135, 136, 137, 0, 0, 138, 139, 140, 141, 142, 143, 144, 0,
+ 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 0, 0, 155, 156, 157, 158,
+ 159, 160, 161, 162, 163, 0, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
+ 174, 175, 176, 177, 178, 63, 179, 488, 489, 490, 491, 492, 493, 494, 31, 32,
+ 33, 34, 35, 0, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 495, 496, 497, 57, 498, 499, 0,
+ 0, 500, 0, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513,
+ 0, 0, 0, 514, 515, 0, 0, 0, 0, 0, 516, 0, 517, 518, 0, 0,
+ 519, 520, 521, 522, 523, 524, 0, 0, 0, 0, 525, 526, 527, 528, 529, 530,
+ 531, 0, 0, 0, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 0, 542,
+ 543, 544, 545, 0, 0, 546, 547, 548, 549, 550, 551, 552, 0, 0, 553, 554,
+ 555, 556, 557, 558, 559, 0, 560, 561, 562, 563, 0, 0, 0, 0, 0, 0,
+ 0, 0, 564, 565, 566, 567, 568, 569, 570, 571, 572, 0, 573, 574, 575, 576,
+ 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 298, 299, 73, 74, 75,
+ 76, 77, 78, 79, 31, 32, 33, 34, 35, 0, 36, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 80,
+ 81, 82, 57, 83, 84, 0, 0, 85, 0, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, 98, 0, 0, 0, 99, 100, 0, 0, 0, 0, 309,
+ 102, 0, 103, 104, 0, 0, 105, 106, 107, 60, 108, 109, 0, 0, 0, 0,
+ 110, 111, 112, 113, 114, 115, 116, 0, 0, 0, 117, 118, 119, 120, 121, 122,
+ 123, 124, 125, 126, 0, 127, 128, 129, 130, 0, 0, 131, 132, 133, 134, 135,
+ 136, 137, 0, 0, 138, 139, 140, 141, 142, 143, 144, 0, 145, 146, 147, 148,
+ 149, 150, 151, 152, 153, 154, 0, 0, 155, 156, 157, 158, 159, 160, 161, 162,
+ 163, 0, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
+ 178, 63, 488, 489, 490, 491, 492, 493, 494, 0, 0, 611, 0, 0, 0, 0,
+ 616, 617, 618, 0, 621, 0, 0, 0, 0, 0, 627, 628, 0, 0, 0, 0,
+ 0, 0, 0, 645, 495, 496, 497, 0, 498, 499, 0, 0, 500, 0, 501, 502,
+ 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 0, 0, 0, 514, 515,
+ 0, 0, 697, 0, 0, 516, 0, 517, 518, 0, 0, 519, 520, 521, 0, 523,
+ 524, 717, 718, 0, 0, 525, 526, 527, 528, 529, 530, 531, 728, 729, 0, 532,
+ 533, 534, 535, 536, 537, 538, 539, 540, 541, 0, 542, 543, 544, 545, 0, 0,
+ 546, 547, 548, 549, 550, 551, 552, 0, 0, 553, 554, 555, 556, 557, 558, 559,
+ 0, 560, 561, 562, 563, 0, 0, 0, 0, 0, 0, 0, 0, 564, 565, 566,
+ 567, 568, 569, 570, 571, 572, 0, 573, 574, 575, 576, 577, 578, 579, 580, 581,
+ 582, 583, 584, 585, 586, 587, 30, 0, 31, 32, 33, 34, 35, 0, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 0, 0, 0, 57, 31, 32, 33, 34, 35, 58, 36, 37, 38,
+ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 0, 59, 0, 57, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 296, 0, 0, 0, 0, 0, 61, 0, 62, 0, 297, 31, 32, 33,
+ 34, 35, 0, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+ 49, 50, 51, 52, 53, 54, 55, 56, 0, 0, 0, 57, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, 639, 642, 0,
+ 0, 0, 0, 0, 0, 63, 652, 0, 751, 0, 657, 660, 663, 0, 0, 0,
+ 0, 0, 522, 0, 0, 682, 685, 0, 689, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 298, 299, 706, 31, 32, 33, 34, 35, 0, 36, 37, 38,
+ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 0, 0, 0, 57, 0, 743, 746, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 217, 0, 0,
+ 0, 0, 899, 0, 0, 0, 0, 0, 0, 0, 298, 299, 60, 189, 190, 191,
+ 0, 0, 192, 193, 194, 307, 0, 0, 0, 0, 0, 218, 219, 0, 0, 0,
+ 0, 0, 0, 220, 195, 196, 197, 0, 0, 0, 0, 0, 0, 0, 198, 199,
+ 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 221, 222, 0, 149, 150, 151, 152, 153, 154, 223, 224, 0, 0, 0, 0, 0,
+ 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 226, 227, 0,
+ 0, 0, 0, 0, 63, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 230, 231, 232, 233,
+ 234, 235, 236, 237, 238, 239, 240, 241, 201, 202, 203, 204, 242, 243, 244, 216,
+ 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 189, 190, 191, 0, 0, 192, 193, 194, 595, 0, 0, 0, 0, 0, 218, 219,
+ 0, 0, 0, 0, 0, 0, 220, 195, 196, 197, 0, 0, 0, 0, 0, 0,
+ 0, 198, 199, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 221, 222, 0, 0, 0, 0, 0, 0, 0, 223, 224, 0, 0,
+ 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 338, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 230,
+ 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 201, 202, 203, 204, 242,
+ 243, 244, 216, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 189, 190, 191, 0, 0, 192, 193, 194, 910, 0, 0, 0, 0,
+ 0, 218, 219, 0, 0, 0, 0, 0, 0, 220, 195, 196, 197, 0, 0, 0,
+ 0, 0, 0, 0, 198, 199, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 221, 222, 0, 0, 0, 0, 0, 0, 0, 223,
+ 224, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 338, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 201, 202,
+ 203, 204, 242, 243, 244, 216, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 189, 190, 191, 0, 0, 192, 193, 194, 963, 0,
+ 0, 0, 0, 0, 218, 219, 0, 0, 0, 0, 0, 0, 220, 195, 196, 197,
+ 0, 0, 0, 0, 0, 0, 0, 198, 199, 200, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 222, 0, 0, 0, 0, 0,
+ 0, 0, 223, 224, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 338, 596, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240,
+ 241, 201, 202, 203, 204, 242, 243, 244, 216, 217, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 190, 191, 0, 0, 192, 193,
+ 194, 1053, 0, 0, 0, 0, 0, 218, 219, 0, 0, 0, 0, 0, 0, 220,
+ 195, 196, 197, 0, 0, 0, 0, 0, 0, 0, 198, 199, 200, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 222, 0, 0,
+ 0, 0, 0, 0, 0, 223, 224, 0, 0, 0, 0, 0, 0, 0, 225, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 596, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 229, 230, 231, 232, 233, 234, 235, 236, 237,
+ 238, 239, 240, 241, 201, 202, 203, 204, 242, 243, 244, 216, 217, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 190, 191, 0,
+ 0, 192, 193, 194, 1062, 0, 0, 0, 0, 0, 218, 219, 0, 0, 0, 0,
+ 0, 0, 220, 195, 196, 197, 0, 0, 0, 0, 0, 0, 0, 198, 199, 200,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221,
+ 222, 0, 0, 0, 0, 0, 0, 0, 223, 224, 0, 0, 0, 0, 0, 0,
+ 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338, 596, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 230, 231, 232, 233, 234,
+ 235, 236, 237, 238, 239, 240, 241, 201, 202, 203, 204, 242, 243, 244, 216, 217,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189,
+ 190, 191, 0, 0, 192, 193, 194, 1063, 0, 0, 0, 0, 0, 218, 219, 0,
+ 0, 0, 0, 0, 0, 220, 195, 196, 197, 0, 0, 0, 0, 0, 0, 0,
+ 198, 199, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 221, 222, 0, 0, 0, 0, 0, 0, 0, 223, 224, 0, 0, 0,
+ 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 338,
+ 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 230, 231,
+ 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 201, 202, 203, 204, 242, 243,
+ 244, 216, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 189, 190, 191, 0, 0, 192, 193, 194, 1064, 0, 0, 0, 0, 0,
+ 218, 219, 0, 0, 0, 0, 0, 0, 220, 195, 196, 197, 0, 0, 0, 0,
+ 0, 0, 0, 198, 199, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 221, 222, 0, 0, 0, 0, 0, 0, 0, 223, 224,
+ 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 338, 596, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 201, 202, 203,
+ 204, 242, 243, 244, 216, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 189, 190, 191, 0, 0, 192, 193, 194, 0, 0, 0,
+ 0, 0, 0, 218, 219, 0, 0, 0, 0, 0, 0, 220, 195, 196, 197, 0,
+ 0, 0, 0, 0, 0, 0, 198, 199, 200, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 221, 222, 0, 0, 0, 0, 0, 0,
+ 0, 223, 224, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 226, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241,
+ 201, 202, 203, 204, 242, 243, 244, 216, 217, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 189, 190, 191, 0, 0, 192, 193, 194,
+ 0, 0, 0, 0, 0, 0, 218, 219, 0, 0, 0, 0, 0, 0, 220, 195,
+ 196, 197, 0, 0, 0, 0, 0, 0, 0, 198, 199, 200, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 222, 0, 0, 0,
+ 0, 0, 0, 0, 223, 224, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 338, 596, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238,
+ 239, 240, 241, 201, 202, 203, 204, 242, 243, 244, 216, 217, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 190, 191, 0, 0,
+ 192, 193, 194, 0, 0, 0, 0, 0, 0, 218, 219, 0, 0, 0, 0, 0,
+ 0, 220, 195, 196, 197, 0, 0, 0, 0, 0, 0, 0, 198, 199, 200, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 222,
+ 0, 0, 0, 0, 0, 0, 0, 223, 224, 0, 0, 0, 0, 0, 0, 0,
+ 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 603, 596, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 230, 231, 232, 233, 234, 235,
+ 236, 237, 238, 239, 240, 241, 201, 202, 203, 204, 242, 243, 244, 216, 217, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 190,
+ 191, 0, 0, 192, 193, 194, 0, 0, 0, 0, 0, 0, 218, 219, 0, 0,
+ 0, 0, 0, 0, 220, 195, 196, 197, 0, 0, 0, 0, 0, 0, 0, 198,
+ 199, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 221, 222, 0, 0, 0, 0, 0, 0, 0, 223, 224, 0, 0, 0, 0,
+ 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 603, 633,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 230, 231, 232,
+ 233, 234, 235, 236, 237, 238, 239, 240, 241, 201, 202, 203, 204, 242, 243, 244,
+ 216, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 189, 190, 191, 0, 0, 192, 193, 194, 0, 0, 0, 0, 0, 0, 218,
+ 219, 0, 0, 0, 0, 0, 0, 220, 195, 196, 197, 0, 0, 0, 0, 0,
+ 0, 0, 198, 199, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 221, 222, 0, 0, 0, 0, 0, 0, 0, 223, 224, 0,
+ 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229,
+ 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 201, 202, 203, 204,
+ 242, 243, 244, 324, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 326, 327, 328, 0, 0, 329, 330, 331, 0, 0, 0, 0,
+ 0, 0, 218, 219, 0, 0, 0, 0, 0, 0, 220, 332, 333, 334, 0, 0,
+ 0, 0, 0, 0, 0, 335, 336, 337, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 221, 222, 0, 0, 0, 0, 0, 0, 0,
+ 223, 224, 0, 0, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 338, 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 228,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 229, 0, 0, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 340,
+ 341, 342, 343, 242, 243, 244, 189, 190, 191, 0, 0, 192, 193, 194, 0, 0,
+ 0, 0, 0, 0, 218, 219, 0, 0, 0, 0, 0, 0, 220, 195, 196, 197,
+ 0, 0, 0, 0, 0, 0, 0, 198, 199, 200, 0, 0, 0, 0, 0, 0,
+ 189, 190, 191, 0, 0, 192, 193, 194, 755, 221, 222, 0, 0, 0, 218, 219,
+ 0, 0, 223, 224, 0, 0, 220, 195, 196, 197, 0, 225, 0, 0, 0, 0,
+ 0, 198, 199, 200, 0, 0, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 228, 0, 221, 222, 0, 0, 0, 0, 0, 0, 0, 223, 224, 0, 0,
+ 0, 0, 0, 0, 229, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 201, 202, 203, 204, 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 229, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 202, 203, 204};
const short ParserGen::yycheck_[] = {
- 14, 14, 14, 47, 21, 266, 17, 17, 17, 20, 20, 20, 56, 17, 263, 272, 20, 261, 275,
- 17, 532, 533, 20, 272, 285, 568, 275, 288, 48, 49, 50, 52, 272, 54, 272, 275, 272, 275,
- 115, 275, 272, 290, 272, 275, 272, 275, 116, 275, 116, 289, 272, 87, 272, 275, 272, 275, 272,
- 275, 272, 275, 272, 275, 83, 275, 272, 54, 272, 275, 0, 275, 314, 8, 51, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 614, 126, 116, 847, 116, 83,
- 494, 495, 34, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
- 116, 52, 116, 116, 139, 52, 115, 646, 52, 878, 61, 23, 151, 11, 116, 43, 44, 163, 164,
- 165, 48, 49, 78, 52, 158, 20, 52, 51, 115, 52, 115, 82, 115, 84, 115, 61, 139, 65,
- 66, 115, 115, 115, 115, 115, 72, 73, 109, 110, 111, 112, 113, 114, 52, 115, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 115, 52, 115, 57, 58, 115,
- 115, 448, 449, 115, 64, 115, 115, 454, 455, 456, 52, 458, 116, 140, 115, 52, 52, 464, 465,
- 115, 52, 468, 115, 115, 450, 115, 452, 87, 88, 61, 115, 115, 266, 115, 115, 115, 96, 97,
- 140, 141, 52, 52, 52, 52, 104, 492, 52, 52, 781, 52, 52, 285, 16, 52, 288, 52, 789,
- 790, 791, 506, 507, 262, 262, 262, 490, 13, 126, 12, 262, 52, 517, 518, 52, 52, 262, 52,
- 52, 52, 52, 52, 52, 52, 10, 143, 52, 532, 533, 52, 14, 290, 290, 290, 52, 532, 533,
- 52, 290, 52, 52, 538, 52, 535, 532, 533, 532, 533, 532, 533, 140, 141, 532, 533, 532, 533,
- 532, 533, 52, 52, 569, 52, 532, 533, 532, 533, 532, 533, 532, 533, 532, 533, 532, 533, 52,
- 584, 532, 533, 532, 533, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
- 24, 25, 52, 16, 52, 52, 52, 14, 57, 58, 52, 52, 52, 52, 52, 64, 52, 52, 52,
- 52, 43, 44, 45, 52, 52, 48, 49, 50, 52, 16, 52, 52, 52, 52, 52, 52, 52, 61,
- 87, 88, 52, 52, 65, 66, 67, 16, 52, 96, 97, 72, 73, 74, 52, 52, 51, 104, 51,
- 51, 51, 51, 51, 16, 448, 449, 52, 17, 52, 51, 454, 455, 456, 52, 458, 52, 15, 51,
- 51, 126, 464, 465, 52, 434, 468, 51, 51, 109, 110, 111, 112, 113, 114, 52, 19, 16, 16,
- 51, 24, 51, 51, 18, 51, 51, 22, 52, 463, 51, 492, 466, 467, 51, 21, 25, 52, 52,
- 52, 52, 140, 52, 52, 51, 506, 507, 52, 52, 22, 484, 51, 51, 261, 657, 51, 517, 518,
- 156, 157, 158, 159, 496, 497, 447, 499, 535, 52, 52, 52, 52, 52, 52, 52, 52, 52, 459,
- 52, 52, 267, 52, 52, 52, 52, 52, 52, 52, 52, 471, 472, 52, 52, 52, 52, 52, 529,
- 479, 52, 481, 52, 189, 275, 538, 846, 772, 811, 775, 437, 569, -1, 538, 538, 538, 269, 448,
- 449, -1, 538, -1, 537, 454, 455, 456, 584, 458, -1, 509, -1, 511, 512, 464, 465, -1, -1,
- 468, -1, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, -1, 449, 531, -1, -1, -1, 454,
- 455, 456, -1, 458, -1, 492, -1, -1, -1, 464, 465, 547, -1, 468, -1, -1, -1, -1, -1,
- 506, 507, 557, -1, 559, -1, -1, -1, 563, -1, -1, 517, 518, -1, -1, -1, -1, -1, 492,
- -1, -1, 576, -1, -1, -1, -1, -1, 582, 583, -1, -1, 586, 506, 507, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 517, 518, 600, 601, -1, 603, -1, 605, -1, -1, -1, 657, 657, 657,
- -1, 613, -1, -1, 616, 617, -1, 619, 620, -1, -1, -1, -1, 625, -1, 627, 460, -1, 630,
- 631, 632, 633, -1, -1, -1, -1, 470, -1, -1, 473, 474, -1, -1, -1, -1, 647, -1, -1,
- 482, 483, -1, -1, -1, -1, 488, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 500,
- 669, -1, 503, -1, 505, -1, -1, 676, -1, -1, 679, 680, -1, 682, -1, -1, -1, -1, -1,
- 688, 689, -1, -1, 692, -1, -1, -1, 696, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 707, 708, -1, -1, -1, 712, -1, -1, 715, -1, -1, 718, 719, 720, -1, -1, 723, 724, -1,
- 726, 727, -1, -1, -1, -1, 732, -1, 734, -1, -1, 737, 738, 739, 740, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 754, -1, -1, -1, 758, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 774, 775, -1, -1, -1, 779, -1, -1, -1,
- -1, -1, -1, -1, -1, 788, -1, -1, -1, 792, -1, -1, 795, 796, 797, -1, 799, -1, -1,
- -1, -1, -1, -1, -1, 807, -1, 809, -1, -1, -1, 813, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 823, -1, 825, 826, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 842, -1, -1, 845, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 858,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 876, -1,
- -1, -1, -1, -1, -1, -1, -1, 885, 886, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, -1,
- -1, 33, -1, 35, 36, 37, 38, 39, 40, 41, 42, -1, -1, -1, 46, 47, -1, -1, -1,
- -1, 52, 53, -1, 55, 56, -1, -1, 59, 60, 61, 62, 63, -1, -1, -1, -1, 68, 69,
- 70, 71, -1, -1, -1, 75, 76, 77, 78, 79, 80, 81, -1, 83, 84, 85, 86, -1, -1,
- 89, 90, 91, 92, 93, 94, 95, -1, -1, 98, 99, 100, 101, 102, 103, -1, 105, 106, 107,
- 108, 109, 110, 111, 112, 113, 114, -1, -1, 117, 118, 119, 120, 121, 122, 123, 124, 125, -1,
- 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 3, 4, 5, 6,
- 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 30, -1, -1, 33, -1, 35, 36, 37, 38, 39, 40, 41, 42, -1, -1,
- -1, 46, 47, -1, -1, -1, -1, -1, 53, -1, 55, 56, -1, -1, 59, 60, 61, 62, 63,
- -1, -1, -1, -1, 68, 69, 70, 71, -1, -1, -1, 75, 76, 77, 78, 79, 80, 81, -1,
- 83, 84, 85, 86, -1, -1, 89, 90, 91, 92, 93, 94, 95, -1, -1, 98, 99, 100, 101,
- 102, 103, -1, 105, 106, 107, 108, -1, -1, -1, -1, -1, -1, -1, -1, 117, 118, 119, 120,
- 121, 122, 123, 124, 125, -1, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
- 140, 141, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, -1, -1, 33, -1, 35, 36, 37, 38,
- 39, 40, 41, 42, -1, -1, -1, 46, 47, -1, -1, -1, -1, 52, 53, -1, 55, 56, -1,
- -1, 59, 60, 61, 62, 63, -1, -1, -1, -1, 68, 69, 70, 71, -1, -1, -1, 75, 76,
- 77, 78, 79, 80, 81, -1, 83, 84, 85, 86, -1, -1, 89, 90, 91, 92, 93, 94, 95,
- -1, -1, 98, 99, 100, 101, 102, 103, -1, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
- -1, -1, 117, 118, 119, 120, 121, 122, 123, 124, 125, -1, 127, 128, 129, 130, 131, 132, 133,
- 134, 135, 136, 137, 138, 139, 140, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, -1, -1, 33,
- -1, 35, 36, 37, 38, 39, 40, 41, 42, -1, -1, -1, 46, 47, -1, -1, -1, -1, -1,
- 53, -1, 55, 56, -1, -1, 59, 60, -1, 62, 63, -1, -1, -1, -1, 68, 69, 70, 71,
- -1, -1, -1, 75, 76, 77, 78, 79, 80, 81, -1, 83, 84, 85, 86, -1, -1, 89, 90,
- 91, 92, 93, 94, 95, -1, -1, 98, 99, 100, 101, 102, 103, -1, 105, 106, 107, 108, -1,
- -1, -1, -1, -1, -1, -1, -1, 117, 118, 119, 120, 121, 122, 123, 124, 125, -1, 127, 128,
- 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 31, 32, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 43, 44, 45, -1, -1, 48, 49, 50, 51, -1, -1, -1, -1, -1, 57,
- 58, -1, -1, -1, -1, -1, 64, 65, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 87, 88, -1, -1, -1, -1, -1, -1, -1,
- 96, 97, -1, -1, -1, -1, -1, -1, 104, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 115, 116, -1, -1, -1, -1, -1, -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
- 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 31, 32, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 43, 44, 45, -1, -1, 48, 49, 50, 51, -1, -1, -1, -1, -1, 57, 58,
- -1, -1, -1, -1, -1, 64, 65, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 87, 88, -1, -1, -1, -1, -1, -1, -1, 96,
- 97, -1, -1, -1, -1, -1, -1, 104, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 115,
- 116, -1, -1, -1, -1, -1, -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
- 154, 155, 156, 157, 158, 159, 160, 161, 162, 31, 32, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 43, 44, 45, -1, -1, 48, 49, 50, 51, -1, -1, -1, -1, -1, 57, 58, -1,
- -1, -1, -1, -1, 64, 65, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 87, 88, -1, -1, -1, -1, -1, -1, -1, 96, 97,
- -1, -1, -1, -1, -1, -1, 104, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 115, 116,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
- 155, 156, 157, 158, 159, 160, 161, 162, 31, 32, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 43, 44, 45, -1, -1, 48, 49, 50, 51, -1, -1, -1, -1, -1, 57, 58, -1, -1,
- -1, -1, -1, 64, 65, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 87, 88, -1, -1, -1, -1, -1, -1, -1, 96, 97, -1,
- -1, -1, -1, -1, -1, 104, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 115, 116, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
- 156, 157, 158, 159, 160, 161, 162, 31, 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 43, 44, 45, -1, -1, 48, 49, 50, 51, -1, -1, -1, -1, -1, 57, 58, -1, -1, -1,
- -1, -1, 64, 65, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 87, 88, -1, -1, -1, -1, -1, -1, -1, 96, 97, -1, -1,
- -1, -1, -1, -1, 104, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 115, 116, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
- 157, 158, 159, 160, 161, 162, 31, 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 43,
- 44, 45, -1, -1, 48, 49, 50, 51, -1, -1, -1, -1, -1, 57, 58, -1, -1, -1, -1,
- -1, 64, 65, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 87, 88, -1, -1, -1, -1, -1, -1, -1, 96, 97, -1, -1, -1,
- -1, -1, -1, 104, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 115, 116, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
- 158, 159, 160, 161, 162, 31, 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 43, 44,
- 45, -1, -1, 48, 49, 50, 51, -1, -1, -1, -1, -1, 57, 58, -1, -1, -1, -1, -1,
- 64, 65, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 87, 88, -1, -1, -1, -1, -1, -1, -1, 96, 97, -1, -1, -1, -1,
- -1, -1, 104, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 115, 116, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
- 159, 160, 161, 162, 31, 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 43, 44, 45,
- -1, -1, 48, 49, 50, 51, -1, -1, -1, -1, -1, 57, 58, -1, -1, -1, -1, -1, 64,
- 65, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 87, 88, -1, -1, -1, -1, -1, -1, -1, 96, 97, -1, -1, -1, -1, -1,
- -1, 104, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 115, 116, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
- 160, 161, 162, 31, 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 43, 44, 45, -1,
- -1, 48, 49, 50, -1, -1, -1, -1, -1, -1, 57, 58, -1, -1, -1, -1, -1, 64, 65,
- 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 87, 88, -1, -1, -1, -1, -1, -1, -1, 96, 97, -1, -1, -1, -1, -1, -1,
- 104, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 115, 116, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
- 161, 162, 31, 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 43, 44, 45, -1, -1,
- 48, 49, 50, -1, -1, -1, -1, -1, -1, 57, 58, -1, -1, -1, -1, -1, 64, 65, 66,
- 67, -1, -1, -1, -1, 72, 73, 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 87, 88, -1, -1, -1, -1, -1, -1, -1, 96, 97, -1, -1, -1, -1, -1, -1, 104,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 115, 116, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
- 162, 31, 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 43, 44, 45, -1, -1, 48,
- 49, 50, -1, -1, -1, -1, -1, -1, 57, 58, -1, -1, -1, -1, -1, 64, 65, 66, 67,
- -1, -1, -1, -1, 72, 73, 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 87, 88, -1, -1, -1, -1, -1, -1, -1, 96, 97, -1, -1, -1, -1, -1, -1, 104, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 115, 116, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 143,
- 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
- 31, 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 43, 44, 45, -1, -1, 48, 49,
- 50, -1, -1, -1, -1, -1, -1, 57, 58, -1, -1, -1, -1, -1, 64, 65, 66, 67, -1,
- -1, -1, -1, 72, 73, 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 87,
- 88, -1, -1, -1, -1, -1, -1, -1, 96, 97, -1, -1, -1, -1, -1, -1, 104, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 116, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 143, 144,
- 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 31,
- 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 43, 44, 45, -1, -1, 48, 49, 50,
- -1, -1, -1, -1, -1, -1, 57, 58, -1, -1, -1, -1, -1, 64, 65, 66, 67, -1, -1,
- -1, -1, 72, 73, 74, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 87, 88,
- -1, -1, -1, -1, -1, -1, -1, 96, 97, -1, -1, -1, -1, -1, -1, 104, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 115, 116, -1, -1, -1, -1, -1, -1, -1, -1, -1, 126,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 143, -1, -1,
- 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 43, 44,
- 45, -1, -1, 48, 49, 50, -1, -1, -1, -1, -1, -1, 57, 58, -1, -1, -1, -1, -1,
- 64, 65, 66, 67, -1, -1, -1, -1, 72, 73, 74, -1, -1, 43, 44, 45, -1, -1, 48,
- 49, 50, 51, -1, 87, 88, -1, -1, 57, 58, -1, -1, -1, 96, 97, 64, 65, 66, 67,
- -1, -1, 104, -1, 72, 73, 74, -1, -1, -1, -1, -1, -1, 115, -1, -1, -1, -1, -1,
- 87, 88, -1, -1, -1, 126, -1, -1, -1, 96, 97, -1, -1, -1, -1, -1, -1, 104, -1,
- -1, -1, -1, 143, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 156, 157, 158,
- 159, 126, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 143,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 156, 157, 158, 159};
+ 14, 14, 14, 488, 291, 71, 287, 17, 17, 17, 20, 20, 20, 141, 17, 500, 17,
+ 20, 1034, 20, 624, 111, 69, 310, 71, 140, 313, 289, 65, 66, 67, 141, 517, 518,
+ 141, 297, 705, 0, 300, 43, 44, 107, 588, 589, 529, 297, 531, 141, 300, 297, 178,
+ 68, 300, 315, 297, 547, 548, 300, 339, 141, 107, 151, 314, 190, 191, 192, 297, 1083,
+ 141, 300, 297, 740, 141, 300, 21, 22, 23, 24, 563, 297, 565, 566, 300, 141, 69,
+ 140, 69, 69, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 164, 34, 585, 297,
+ 11, 297, 300, 297, 300, 297, 300, 99, 300, 297, 30, 68, 300, 69, 297, 164, 603,
+ 300, 140, 140, 297, 19, 140, 300, 297, 14, 613, 300, 615, 69, 60, 61, 619, 140,
+ 69, 65, 66, 60, 61, 62, 140, 140, 65, 66, 67, 140, 185, 140, 74, 75, 140,
+ 140, 140, 83, 84, 69, 82, 140, 140, 646, 83, 84, 85, 93, 94, 58, 140, 140,
+ 655, 656, 93, 94, 95, 140, 67, 512, 513, 140, 140, 140, 140, 668, 140, 21, 521,
+ 111, 112, 140, 525, 526, 527, 69, 140, 140, 120, 121, 140, 140, 140, 536, 537, 688,
+ 539, 129, 69, 692, 69, 694, 69, 696, 69, 141, 69, 69, 69, 13, 553, 704, 69,
+ 69, 74, 75, 69, 710, 711, 151, 713, 714, 82, 69, 12, 12, 719, 69, 721, 69,
+ 12, 724, 725, 726, 727, 491, 69, 493, 170, 69, 12, 69, 69, 586, 587, 12, 69,
+ 69, 741, 69, 69, 111, 112, 69, 183, 184, 185, 186, 69, 69, 120, 121, 134, 135,
+ 136, 137, 138, 139, 69, 129, 288, 288, 288, 12, 69, 69, 769, 288, 12, 288, 69,
+ 12, 12, 776, 69, 69, 779, 543, 781, 782, 783, 151, 69, 786, 69, 69, 789, 315,
+ 315, 792, 69, 794, 591, 69, 315, 10, 315, 69, 69, 802, 803, 804, 69, 69, 807,
+ 69, 69, 810, 588, 589, 813, 69, 69, 816, 594, 937, 69, 820, 588, 589, 625, 69,
+ 588, 589, 946, 947, 948, 588, 589, 12, 833, 69, 69, 836, 837, 69, 12, 840, 841,
+ 588, 589, 69, 845, 588, 589, 848, 69, 12, 851, 852, 853, 69, 588, 589, 857, 69,
+ 859, 860, 69, 862, 863, 666, 69, 19, 69, 868, 69, 870, 16, 16, 873, 874, 875,
+ 876, 588, 589, 588, 589, 588, 589, 588, 589, 291, 69, 588, 589, 12, 890, 69, 588,
+ 589, 894, 69, 12, 897, 588, 589, 900, 69, 588, 589, 310, 69, 69, 313, 69, 69,
+ 69, 69, 69, 69, 914, 69, 12, 69, 69, 69, 69, 69, 69, 69, 924, 925, 69,
+ 69, 69, 69, 69, 69, 932, 69, 69, 69, 68, 68, 68, 68, 18, 68, 19, 68,
+ 944, 19, 19, 69, 69, 949, 475, 68, 952, 953, 954, 69, 956, 69, 27, 17, 20,
+ 501, 68, 35, 69, 68, 966, 68, 68, 969, 970, 69, 29, 973, 19, 19, 516, 68,
+ 978, 519, 520, 68, 920, 921, 984, 923, 68, 68, 926, 927, 928, 28, 532, 533, 25,
+ 933, 934, 68, 936, 22, 1000, 541, 1002, 1003, 69, 69, 69, 945, 69, 31, 69, 36,
+ 68, 68, 554, 69, 69, 557, 69, 559, 958, 959, 1022, 69, 26, 68, 1026, 69, 1028,
+ 69, 69, 69, 23, 69, 69, 69, 974, 69, 976, 977, 69, 297, 489, 490, 300, 69,
+ 32, 68, 495, 496, 497, 69, 499, 68, 68, 32, 1056, 69, 505, 506, 69, 69, 69,
+ 69, 69, 69, 69, 514, 69, 594, 594, 69, 69, 69, 69, 69, 594, 1077, 594, 1079,
+ 69, 69, 1082, 489, 490, 69, 69, 69, 69, 495, 496, 497, 33, 499, 69, 69, 69,
+ 69, 545, 505, 506, 1101, 1102, 69, 69, 511, 512, 513, 514, 69, 69, 69, 69, 560,
+ 561, 521, 1116, 69, 69, 525, 526, 527, 69, 69, 571, 572, 69, 24, 40, 69, 536,
+ 537, 69, 539, 1134, 69, 69, 69, 69, 545, 69, 69, 69, 69, 69, 69, 757, 553,
+ 975, 591, 287, 1031, 918, 504, 560, 561, 507, 508, 509, 510, 511, 512, 513, 594, 292,
+ 571, 572, 215, 1128, 1140, 521, 1118, 1135, 925, 525, 526, 527, 593, 478, 1117, 586, 587,
+ 300, 534, 294, 536, 537, -1, 539, -1, -1, -1, -1, -1, -1, -1, -1, -1, 549,
+ 550, -1, 552, 553, -1, 1142, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 625, -1, -1, -1, -1, -1, -1, -1, -1, 757, 757, 757, -1, 583,
+ 489, 490, 586, 587, -1, -1, 495, 496, 497, -1, 499, -1, -1, -1, -1, -1, 505,
+ 506, -1, -1, -1, -1, 511, 512, 513, 514, -1, 666, -1, -1, -1, -1, 521, -1,
+ -1, -1, 525, 526, 527, -1, -1, -1, -1, -1, -1, -1, -1, 536, 537, -1, 539,
+ -1, -1, -1, -1, -1, 545, -1, -1, -1, -1, -1, -1, -1, 553, -1, -1, -1,
+ -1, -1, -1, 560, 561, -1, -1, -1, -1, -1, -1, -1, -1, -1, 571, 572, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 586, 587, 588, 589, 3,
+ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, -1, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+ 38, 39, 40, 41, 42, -1, -1, 45, -1, 47, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 57, 58, 59, -1, -1, -1, 63, 64, -1, -1, -1, -1, 69, 70, -1,
+ 72, 73, -1, -1, 76, 77, 78, 79, 80, 81, -1, -1, -1, -1, 86, 87, 88,
+ 89, 90, 91, 92, -1, -1, -1, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ -1, 107, 108, 109, 110, -1, -1, 113, 114, 115, 116, 117, 118, 119, -1, -1, 122,
+ 123, 124, 125, 126, 127, 128, -1, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
+ -1, -1, 142, 143, 144, 145, 146, 147, 148, 149, 150, -1, 152, 153, 154, 155, 156,
+ 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 3, 4, 5, 6, 7,
+ 8, 9, 10, 11, 12, 13, 14, -1, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ 42, -1, -1, 45, -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
+ 59, -1, -1, -1, 63, 64, -1, -1, -1, -1, -1, 70, -1, 72, 73, -1, -1,
+ 76, 77, 78, 79, 80, 81, -1, -1, -1, -1, 86, 87, 88, 89, 90, 91, 92,
+ -1, -1, -1, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, -1, 107, 108, 109,
+ 110, -1, -1, 113, 114, 115, 116, 117, 118, 119, -1, -1, 122, 123, 124, 125, 126,
+ 127, 128, -1, 130, 131, 132, 133, -1, -1, -1, -1, -1, -1, -1, -1, 142, 143,
+ 144, 145, 146, 147, 148, 149, 150, -1, 152, 153, 154, 155, 156, 157, 158, 159, 160,
+ 161, 162, 163, 164, 165, 166, 167, 168, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, -1, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
+ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, -1, -1, 45,
+ -1, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, -1, -1, -1,
+ 63, 64, -1, -1, -1, -1, 69, 70, -1, 72, 73, -1, -1, 76, 77, 78, 79,
+ 80, 81, -1, -1, -1, -1, 86, 87, 88, 89, 90, 91, 92, -1, -1, -1, 96,
+ 97, 98, 99, 100, 101, 102, 103, 104, 105, -1, 107, 108, 109, 110, -1, -1, 113,
+ 114, 115, 116, 117, 118, 119, -1, -1, 122, 123, 124, 125, 126, 127, 128, -1, 130,
+ 131, 132, 133, 134, 135, 136, 137, 138, 139, -1, -1, 142, 143, 144, 145, 146, 147,
+ 148, 149, 150, -1, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
+ 165, 166, 167, 3, 4, 5, 6, 7, 8, 9, -1, -1, 490, -1, -1, -1, -1,
+ 495, 496, 497, -1, 499, -1, -1, -1, -1, -1, 505, 506, -1, -1, -1, -1, -1,
+ -1, -1, 514, 37, 38, 39, -1, 41, 42, -1, -1, 45, -1, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, 56, 57, 58, 59, -1, -1, -1, 63, 64, -1, -1, 545,
+ -1, -1, 70, -1, 72, 73, -1, -1, 76, 77, 78, -1, 80, 81, 560, 561, -1,
+ -1, 86, 87, 88, 89, 90, 91, 92, 571, 572, -1, 96, 97, 98, 99, 100, 101,
+ 102, 103, 104, 105, -1, 107, 108, 109, 110, -1, -1, 113, 114, 115, 116, 117, 118,
+ 119, -1, -1, 122, 123, 124, 125, 126, 127, 128, -1, 130, 131, 132, 133, -1, -1,
+ -1, -1, -1, -1, -1, -1, 142, 143, 144, 145, 146, 147, 148, 149, 150, -1, 152,
+ 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 8, -1, 10,
+ 11, 12, 13, 14, -1, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 35, 36, -1, -1, -1, 40, 10, 11, 12, 13,
+ 14, 46, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 35, 36, -1, 69, -1, 40, -1, -1, -1, -1, -1, -1, -1,
+ 79, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 69, -1, -1, -1, -1, -1, 106, -1, 108, -1, 79, 10, 11,
+ 12, 13, 14, -1, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
+ 29, 30, 31, 32, 33, 34, 35, 36, -1, -1, -1, 40, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 511, 512, 513, -1, -1, -1,
+ -1, -1, -1, 167, 521, -1, 69, -1, 525, 526, 527, -1, -1, -1, -1, -1, 79,
+ -1, -1, 536, 537, -1, 539, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 167, 168, 553, 10, 11, 12, 13, 14, -1, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, -1, -1, -1, 40,
+ -1, 586, 587, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 43, 44, -1, -1, -1, -1, 69, -1, -1, -1, -1, -1,
+ -1, -1, 167, 168, 79, 60, 61, 62, -1, -1, 65, 66, 67, 68, -1, -1, -1,
+ -1, -1, 74, 75, -1, -1, -1, -1, -1, -1, 82, 83, 84, 85, -1, -1, -1,
+ -1, -1, -1, -1, 93, 94, 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 111, 112, -1, 134, 135, 136, 137, 138, 139, 120, 121, -1,
+ -1, -1, -1, -1, -1, -1, 129, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 140, 141, -1, -1, -1, -1, -1, 167, -1, -1, -1, 151, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 170, 171, 172, 173,
+ 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 43,
+ 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 60,
+ 61, 62, -1, -1, 65, 66, 67, 68, -1, -1, -1, -1, -1, 74, 75, -1, -1,
+ -1, -1, -1, -1, 82, 83, 84, 85, -1, -1, -1, -1, -1, -1, -1, 93, 94,
+ 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 111,
+ 112, -1, -1, -1, -1, -1, -1, -1, 120, 121, -1, -1, -1, -1, -1, -1, -1,
+ 129, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 140, 141, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 151, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
+ 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 43, 44, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 60, 61, 62, -1, -1, 65, 66,
+ 67, 68, -1, -1, -1, -1, -1, 74, 75, -1, -1, -1, -1, -1, -1, 82, 83,
+ 84, 85, -1, -1, -1, -1, -1, -1, -1, 93, 94, 95, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, 112, -1, -1, -1, -1, -1,
+ -1, -1, 120, 121, -1, -1, -1, -1, -1, -1, -1, 129, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 140, 141, -1, -1, -1, -1, -1, -1, -1, -1, -1, 151,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
+ 186, 187, 188, 189, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 60, 61, 62, -1, -1, 65, 66, 67, 68, -1, -1, -1, -1,
+ -1, 74, 75, -1, -1, -1, -1, -1, -1, 82, 83, 84, 85, -1, -1, -1, -1,
+ -1, -1, -1, 93, 94, 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 111, 112, -1, -1, -1, -1, -1, -1, -1, 120, 121, -1, -1,
+ -1, -1, -1, -1, -1, 129, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 140,
+ 141, -1, -1, -1, -1, -1, -1, -1, -1, -1, 151, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 170, 171, 172, 173, 174,
+ 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 43, 44,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 60, 61,
+ 62, -1, -1, 65, 66, 67, 68, -1, -1, -1, -1, -1, 74, 75, -1, -1, -1,
+ -1, -1, -1, 82, 83, 84, 85, -1, -1, -1, -1, -1, -1, -1, 93, 94, 95,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, 112,
+ -1, -1, -1, -1, -1, -1, -1, 120, 121, -1, -1, -1, -1, -1, -1, -1, 129,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 140, 141, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 151, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
+ 181, 182, 183, 184, 185, 186, 187, 188, 189, 43, 44, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 60, 61, 62, -1, -1, 65, 66, 67,
+ 68, -1, -1, -1, -1, -1, 74, 75, -1, -1, -1, -1, -1, -1, 82, 83, 84,
+ 85, -1, -1, -1, -1, -1, -1, -1, 93, 94, 95, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, 112, -1, -1, -1, -1, -1, -1,
+ -1, 120, 121, -1, -1, -1, -1, -1, -1, -1, 129, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 140, 141, -1, -1, -1, -1, -1, -1, -1, -1, -1, 151, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
+ 187, 188, 189, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 60, 61, 62, -1, -1, 65, 66, 67, 68, -1, -1, -1, -1, -1,
+ 74, 75, -1, -1, -1, -1, -1, -1, 82, 83, 84, 85, -1, -1, -1, -1, -1,
+ -1, -1, 93, 94, 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 111, 112, -1, -1, -1, -1, -1, -1, -1, 120, 121, -1, -1, -1,
+ -1, -1, -1, -1, 129, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 140, 141,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 151, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 170, 171, 172, 173, 174, 175,
+ 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 43, 44, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 60, 61, 62,
+ -1, -1, 65, 66, 67, 68, -1, -1, -1, -1, -1, 74, 75, -1, -1, -1, -1,
+ -1, -1, 82, 83, 84, 85, -1, -1, -1, -1, -1, -1, -1, 93, 94, 95, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, 112, -1,
+ -1, -1, -1, -1, -1, -1, 120, 121, -1, -1, -1, -1, -1, -1, -1, 129, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 140, 141, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 151, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
+ 182, 183, 184, 185, 186, 187, 188, 189, 43, 44, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 60, 61, 62, -1, -1, 65, 66, 67, -1,
+ -1, -1, -1, -1, -1, 74, 75, -1, -1, -1, -1, -1, -1, 82, 83, 84, 85,
+ -1, -1, -1, -1, -1, -1, -1, 93, 94, 95, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 111, 112, -1, -1, -1, -1, -1, -1, -1,
+ 120, 121, -1, -1, -1, -1, -1, -1, -1, 129, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 140, 141, -1, -1, -1, -1, -1, -1, -1, -1, -1, 151, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 170,
+ 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
+ 188, 189, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 60, 61, 62, -1, -1, 65, 66, 67, -1, -1, -1, -1, -1, -1, 74,
+ 75, -1, -1, -1, -1, -1, -1, 82, 83, 84, 85, -1, -1, -1, -1, -1, -1,
+ -1, 93, 94, 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 111, 112, -1, -1, -1, -1, -1, -1, -1, 120, 121, -1, -1, -1, -1,
+ -1, -1, -1, 129, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 140, 141, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 151, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 170, 171, 172, 173, 174, 175, 176,
+ 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 43, 44, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 60, 61, 62, -1,
+ -1, 65, 66, 67, -1, -1, -1, -1, -1, -1, 74, 75, -1, -1, -1, -1, -1,
+ -1, 82, 83, 84, 85, -1, -1, -1, -1, -1, -1, -1, 93, 94, 95, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, 112, -1, -1,
+ -1, -1, -1, -1, -1, 120, 121, -1, -1, -1, -1, -1, -1, -1, 129, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 140, 141, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 151, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
+ 183, 184, 185, 186, 187, 188, 189, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 60, 61, 62, -1, -1, 65, 66, 67, -1, -1,
+ -1, -1, -1, -1, 74, 75, -1, -1, -1, -1, -1, -1, 82, 83, 84, 85, -1,
+ -1, -1, -1, -1, -1, -1, 93, 94, 95, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 111, 112, -1, -1, -1, -1, -1, -1, -1, 120,
+ 121, -1, -1, -1, -1, -1, -1, -1, 129, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 140, 141, -1, -1, -1, -1, -1, -1, -1, -1, -1, 151, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 170, 171,
+ 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
+ 189, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 60, 61, 62, -1, -1, 65, 66, 67, -1, -1, -1, -1, -1, -1, 74, 75,
+ -1, -1, -1, -1, -1, -1, 82, 83, 84, 85, -1, -1, -1, -1, -1, -1, -1,
+ 93, 94, 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 111, 112, -1, -1, -1, -1, -1, -1, -1, 120, 121, -1, -1, -1, -1, -1,
+ -1, -1, 129, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 141, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 151, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 170, 171, 172, 173, 174, 175, 176, 177,
+ 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 43, 44, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 60, 61, 62, -1, -1,
+ 65, 66, 67, -1, -1, -1, -1, -1, -1, 74, 75, -1, -1, -1, -1, -1, -1,
+ 82, 83, 84, 85, -1, -1, -1, -1, -1, -1, -1, 93, 94, 95, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 111, 112, -1, -1, -1,
+ -1, -1, -1, -1, 120, 121, -1, -1, -1, -1, -1, -1, -1, 129, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 140, 141, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 151, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 170, -1, -1, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
+ 184, 185, 186, 187, 188, 189, 60, 61, 62, -1, -1, 65, 66, 67, -1, -1, -1,
+ -1, -1, -1, 74, 75, -1, -1, -1, -1, -1, -1, 82, 83, 84, 85, -1, -1,
+ -1, -1, -1, -1, -1, 93, 94, 95, -1, -1, -1, -1, -1, -1, 60, 61, 62,
+ -1, -1, 65, 66, 67, 68, 111, 112, -1, -1, -1, 74, 75, -1, -1, 120, 121,
+ -1, -1, 82, 83, 84, 85, -1, 129, -1, -1, -1, -1, -1, 93, 94, 95, -1,
+ -1, 140, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 151, -1, 111, 112, -1,
+ -1, -1, -1, -1, -1, -1, 120, 121, -1, -1, -1, -1, -1, -1, 170, 129, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 183, 184, 185, 186, -1, -1, -1,
+ -1, -1, -1, 151, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 170, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 183, 184, 185, 186};
const short ParserGen::yystos_[] = {
- 0, 163, 164, 165, 364, 115, 214, 116, 344, 116, 358, 0, 116, 215, 345, 359, 109, 110, 111,
- 112, 113, 114, 216, 217, 218, 219, 220, 221, 222, 51, 8, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 34, 52, 61, 82, 84, 140, 171, 174, 176, 179,
- 184, 349, 350, 355, 356, 3, 4, 5, 6, 7, 8, 9, 26, 27, 28, 29, 30, 33, 35,
- 36, 37, 38, 39, 40, 41, 42, 46, 47, 52, 53, 55, 56, 59, 60, 62, 63, 68, 69,
- 70, 71, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 89, 90, 91, 92, 93, 94,
- 95, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
- 139, 141, 170, 171, 173, 174, 175, 176, 178, 363, 116, 43, 44, 45, 48, 49, 50, 65, 66,
- 67, 72, 73, 74, 156, 157, 158, 159, 189, 191, 192, 193, 228, 116, 116, 228, 365, 366, 52,
- 31, 32, 57, 58, 64, 87, 88, 96, 97, 104, 115, 116, 126, 143, 144, 145, 146, 147, 148,
- 149, 150, 151, 152, 153, 154, 155, 160, 161, 162, 185, 186, 187, 188, 189, 190, 191, 192, 193,
- 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 211, 116, 206,
- 347, 115, 43, 44, 48, 49, 65, 66, 72, 73, 116, 360, 361, 52, 223, 23, 11, 116, 215,
- 313, 210, 346, 348, 78, 52, 61, 140, 141, 167, 168, 172, 180, 184, 228, 197, 51, 196, 52,
- 178, 183, 52, 54, 83, 139, 351, 352, 353, 354, 344, 87, 126, 362, 31, 32, 43, 44, 45,
- 48, 49, 50, 65, 66, 67, 72, 73, 74, 115, 116, 156, 157, 158, 159, 185, 186, 187, 188,
- 190, 194, 195, 197, 199, 200, 201, 203, 204, 205, 225, 226, 227, 230, 233, 234, 235, 238, 239,
- 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 259,
- 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
- 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
- 298, 299, 300, 301, 302, 303, 304, 305, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325,
- 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 341, 225, 52, 20, 196, 196,
- 116, 205, 115, 197, 212, 213, 228, 51, 52, 312, 3, 4, 5, 6, 7, 8, 9, 26, 27,
- 28, 29, 30, 33, 35, 36, 37, 38, 39, 40, 41, 42, 46, 47, 53, 55, 56, 59, 60,
- 61, 62, 63, 68, 69, 70, 71, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 89,
- 90, 91, 92, 93, 94, 95, 98, 99, 100, 101, 102, 103, 105, 106, 107, 108, 117, 118, 119,
- 120, 121, 122, 123, 124, 125, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
- 167, 177, 181, 224, 192, 346, 357, 51, 116, 206, 229, 235, 236, 341, 229, 115, 206, 236, 339,
- 340, 341, 342, 343, 343, 235, 115, 235, 115, 343, 343, 343, 115, 231, 343, 229, 231, 115, 115,
- 365, 343, 343, 365, 365, 343, 115, 231, 229, 229, 231, 231, 115, 115, 115, 229, 115, 229, 231,
- 231, 365, 57, 58, 64, 87, 88, 96, 97, 104, 126, 115, 115, 231, 115, 235, 115, 343, 258,
- 365, 258, 258, 365, 365, 115, 365, 231, 115, 115, 231, 115, 115, 231, 232, 343, 343, 115, 229,
- 115, 229, 229, 115, 115, 115, 115, 343, 343, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229,
- 365, 115, 229, 226, 226, 52, 181, 52, 351, 51, 213, 237, 52, 229, 52, 52, 52, 229, 52,
- 229, 52, 52, 52, 229, 52, 52, 52, 52, 312, 196, 16, 52, 52, 13, 12, 52, 229, 52,
- 52, 52, 52, 52, 229, 229, 196, 52, 229, 52, 52, 52, 10, 310, 52, 52, 52, 52, 52,
- 52, 52, 52, 52, 229, 229, 52, 229, 52, 229, 52, 52, 16, 52, 52, 14, 14, 229, 310,
- 52, 229, 229, 52, 229, 229, 52, 52, 52, 52, 229, 52, 229, 52, 52, 229, 229, 229, 229,
- 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 310, 229, 52, 52, 52, 169, 170,
- 171, 174, 176, 182, 51, 51, 51, 229, 51, 51, 229, 229, 229, 229, 229, 229, 51, 229, 229,
- 16, 229, 229, 51, 229, 229, 229, 229, 229, 16, 229, 229, 229, 229, 229, 229, 229, 229, 229,
- 229, 16, 229, 229, 52, 52, 51, 52, 52, 17, 306, 15, 308, 308, 51, 229, 314, 314, 52,
- 51, 229, 51, 312, 52, 51, 19, 311, 16, 16, 51, 229, 312, 312, 312, 229, 51, 51, 229,
- 229, 229, 51, 229, 51, 229, 18, 307, 229, 24, 309, 309, 52, 229, 51, 51, 52, 52, 52,
- 51, 52, 229, 21, 229, 229, 52, 52, 51, 51, 51, 51, 52, 52, 51, 51, 51, 52, 52,
- 52, 229, 25, 229, 306, 307, 52, 52, 52, 52, 229, 22, 22, 52, 52, 52, 52, 52, 52,
- 52, 52, 229, 307, 52, 52, 229, 229, 52, 52, 52, 52, 52, 52, 52, 52, 52};
+ 0, 190, 191, 192, 417, 140, 241, 141, 397, 141, 411, 0, 141, 242, 398, 412, 134, 135, 136,
+ 137, 138, 139, 243, 244, 245, 246, 247, 248, 249, 68, 8, 10, 11, 12, 13, 14, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
+ 40, 46, 69, 79, 106, 108, 167, 198, 201, 203, 206, 211, 402, 403, 408, 409, 3, 4, 5,
+ 6, 7, 8, 9, 37, 38, 39, 41, 42, 45, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 63, 64, 69, 70, 72, 73, 76, 77, 78, 80, 81, 86, 87, 88, 89,
+ 90, 91, 92, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 107, 108, 109, 110, 113, 114,
+ 115, 116, 117, 118, 119, 122, 123, 124, 125, 126, 127, 128, 130, 131, 132, 133, 134, 135, 136,
+ 137, 138, 139, 142, 143, 144, 145, 146, 147, 148, 149, 150, 152, 153, 154, 155, 156, 157, 158,
+ 159, 160, 161, 162, 163, 164, 165, 166, 168, 197, 198, 200, 201, 202, 203, 205, 416, 141, 60,
+ 61, 62, 65, 66, 67, 83, 84, 85, 93, 94, 95, 183, 184, 185, 186, 216, 218, 219, 220,
+ 255, 141, 141, 255, 141, 418, 69, 43, 44, 74, 75, 82, 111, 112, 120, 121, 129, 140, 141,
+ 151, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 187, 188, 189, 212, 213,
+ 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,
+ 233, 234, 235, 236, 238, 141, 233, 400, 140, 60, 61, 65, 66, 83, 84, 93, 94, 141, 413,
+ 414, 69, 250, 34, 11, 242, 365, 237, 399, 401, 99, 69, 79, 167, 168, 194, 195, 199, 207,
+ 211, 255, 224, 68, 223, 69, 205, 210, 69, 71, 107, 164, 404, 405, 406, 407, 397, 111, 151,
+ 415, 43, 44, 60, 61, 62, 65, 66, 67, 83, 84, 85, 93, 94, 95, 140, 141, 183, 184,
+ 185, 186, 212, 213, 214, 215, 217, 221, 222, 224, 226, 227, 228, 230, 231, 232, 252, 253, 254,
+ 257, 260, 261, 262, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+ 280, 281, 282, 283, 284, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
+ 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318,
+ 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337,
+ 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 367, 368, 369, 370, 371, 372, 373, 374,
+ 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 393, 252, 69,
+ 30, 223, 223, 141, 232, 140, 224, 239, 240, 255, 68, 69, 364, 3, 4, 5, 6, 7, 8,
+ 9, 37, 38, 39, 41, 42, 45, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
+ 59, 63, 64, 70, 72, 73, 76, 77, 78, 79, 80, 81, 86, 87, 88, 89, 90, 91, 92,
+ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 107, 108, 109, 110, 113, 114, 115, 116, 117,
+ 118, 119, 122, 123, 124, 125, 126, 127, 128, 130, 131, 132, 133, 142, 143, 144, 145, 146, 147,
+ 148, 149, 150, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 194,
+ 204, 208, 251, 219, 399, 410, 68, 141, 233, 256, 262, 263, 393, 256, 140, 233, 263, 391, 392,
+ 393, 394, 395, 395, 262, 140, 262, 140, 395, 395, 395, 140, 258, 395, 256, 258, 140, 140, 418,
+ 395, 395, 418, 418, 418, 418, 141, 233, 393, 394, 396, 418, 394, 396, 418, 394, 396, 418, 395,
+ 140, 258, 256, 256, 258, 258, 394, 396, 418, 140, 140, 394, 396, 418, 394, 396, 418, 394, 396,
+ 418, 140, 256, 140, 256, 258, 258, 418, 74, 75, 82, 111, 112, 120, 121, 129, 151, 394, 396,
+ 418, 394, 396, 418, 140, 394, 396, 418, 140, 258, 140, 262, 140, 395, 285, 418, 285, 285, 418,
+ 418, 140, 418, 394, 396, 418, 258, 140, 140, 258, 140, 140, 258, 259, 395, 395, 140, 256, 140,
+ 256, 256, 140, 140, 140, 140, 395, 395, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 418,
+ 140, 256, 394, 396, 418, 394, 396, 418, 253, 253, 69, 208, 69, 404, 68, 240, 264, 69, 256,
+ 69, 69, 69, 256, 69, 256, 69, 69, 69, 256, 69, 69, 69, 69, 364, 223, 19, 69, 69,
+ 14, 359, 13, 12, 12, 69, 69, 12, 69, 69, 12, 69, 69, 12, 69, 256, 69, 69, 69,
+ 69, 69, 69, 69, 12, 256, 256, 69, 69, 12, 69, 69, 12, 69, 69, 12, 223, 69, 256,
+ 69, 69, 69, 10, 353, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 12, 69, 69,
+ 12, 256, 69, 69, 12, 256, 69, 256, 69, 256, 69, 69, 19, 69, 69, 16, 16, 256, 353,
+ 69, 69, 12, 69, 256, 256, 69, 256, 256, 69, 69, 69, 69, 256, 69, 256, 69, 69, 256,
+ 256, 256, 256, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 353, 256, 69, 69,
+ 69, 12, 69, 69, 12, 69, 69, 196, 197, 198, 201, 203, 209, 68, 68, 68, 256, 68, 68,
+ 256, 256, 18, 355, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 68, 256,
+ 256, 19, 256, 256, 256, 256, 256, 68, 256, 256, 256, 256, 256, 19, 256, 256, 256, 256, 256,
+ 256, 256, 256, 256, 256, 256, 19, 256, 256, 256, 256, 69, 69, 68, 69, 69, 27, 349, 256,
+ 21, 24, 358, 363, 17, 351, 20, 361, 351, 35, 352, 352, 352, 68, 352, 256, 366, 366, 352,
+ 352, 352, 69, 68, 256, 352, 352, 68, 352, 364, 69, 68, 29, 354, 19, 19, 68, 256, 352,
+ 364, 364, 364, 256, 68, 68, 256, 256, 256, 68, 256, 68, 352, 352, 256, 28, 350, 256, 256,
+ 25, 356, 22, 360, 256, 352, 229, 352, 352, 256, 69, 69, 69, 69, 69, 256, 68, 68, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69, 68, 69, 256, 31, 256, 256, 69, 69, 69, 68, 68,
+ 68, 68, 69, 69, 68, 68, 68, 69, 69, 69, 69, 69, 256, 36, 256, 26, 362, 256, 23,
+ 349, 69, 350, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 256, 32,
+ 32, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 256, 256, 33, 357, 256, 350, 69,
+ 69, 69, 256, 256, 69, 256, 352, 358, 69, 69, 69, 69, 69, 40, 356, 69, 69, 69, 256,
+ 362, 69, 357, 69, 352, 69, 69};
const short ParserGen::yyr1_[] = {
- 0, 166, 364, 364, 364, 214, 215, 215, 366, 365, 216, 216, 216, 216, 216, 216, 222, 217, 218,
- 228, 228, 228, 228, 219, 220, 221, 223, 223, 180, 180, 225, 226, 226, 226, 226, 226, 226, 226,
- 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226,
- 226, 226, 226, 226, 226, 226, 226, 226, 167, 168, 168, 168, 227, 224, 224, 181, 181, 344, 345,
- 345, 349, 349, 349, 347, 347, 346, 346, 351, 351, 351, 353, 212, 357, 357, 213, 213, 354, 354,
- 355, 352, 352, 350, 356, 356, 356, 348, 348, 179, 179, 179, 174, 170, 170, 170, 170, 170, 170,
- 171, 172, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 173,
- 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
- 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
- 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
- 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173,
- 173, 173, 173, 173, 173, 173, 173, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 198, 211,
- 199, 200, 201, 203, 204, 205, 185, 186, 187, 188, 190, 194, 195, 189, 189, 189, 189, 191, 191,
- 191, 191, 192, 192, 192, 192, 193, 193, 193, 193, 202, 202, 206, 206, 206, 206, 206, 206, 206,
- 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 312, 312, 229, 229, 229,
- 229, 339, 339, 340, 340, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341, 231, 232, 230, 230,
- 233, 234, 234, 235, 342, 343, 343, 236, 237, 237, 182, 169, 169, 169, 169, 176, 177, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 239, 239, 239, 239, 239,
- 239, 239, 239, 239, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323,
- 240, 336, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 324, 325,
- 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 337, 338, 241, 241, 241, 242, 243, 244, 248,
- 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248,
- 248, 248, 249, 308, 308, 309, 309, 250, 251, 314, 314, 314, 252, 253, 310, 310, 254, 261, 271,
- 311, 311, 258, 255, 256, 257, 259, 260, 262, 263, 264, 265, 266, 267, 268, 269, 270, 362, 362,
- 360, 358, 359, 359, 361, 361, 361, 361, 361, 361, 361, 361, 175, 175, 363, 363, 315, 315, 315,
- 315, 315, 315, 315, 316, 317, 318, 319, 320, 321, 322, 245, 245, 246, 247, 196, 196, 207, 207,
- 208, 313, 313, 209, 210, 210, 183, 178, 178, 178, 178, 178, 272, 272, 272, 272, 272, 272, 272,
- 273, 274, 275, 276, 277, 278, 279, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 306, 306,
- 307, 307, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290};
+ 0, 193, 417, 417, 417, 241, 242, 242, 418, 243, 243, 243, 243, 243, 243, 249, 244, 245, 255,
+ 255, 255, 255, 246, 247, 248, 250, 250, 207, 207, 252, 253, 253, 253, 253, 253, 253, 253, 253,
+ 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253,
+ 253, 253, 253, 253, 253, 253, 253, 194, 195, 195, 195, 254, 251, 251, 208, 208, 397, 398, 398,
+ 402, 402, 402, 400, 400, 399, 399, 404, 404, 404, 406, 239, 410, 410, 240, 240, 407, 407, 408,
+ 405, 405, 403, 409, 409, 409, 401, 401, 206, 206, 206, 201, 197, 197, 197, 197, 197, 197, 198,
+ 199, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211,
+ 211, 211, 211, 211, 211, 211, 211, 211, 211, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200,
+ 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 224, 224, 224, 224, 224, 224,
+ 224, 224, 224, 224, 225, 238, 226, 227, 228, 230, 231, 232, 212, 213, 214, 215, 217, 221, 222,
+ 216, 216, 216, 216, 218, 218, 218, 218, 219, 219, 219, 219, 220, 220, 220, 220, 229, 229, 233,
+ 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
+ 233, 364, 364, 256, 256, 256, 256, 391, 391, 396, 396, 392, 392, 393, 393, 393, 393, 393, 393,
+ 393, 393, 393, 393, 393, 258, 259, 257, 257, 260, 261, 261, 262, 394, 395, 395, 263, 264, 264,
+ 209, 196, 196, 196, 196, 203, 204, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265,
+ 265, 265, 265, 265, 266, 266, 266, 266, 266, 266, 266, 266, 266, 375, 375, 375, 375, 375, 375,
+ 375, 375, 375, 375, 375, 375, 375, 375, 375, 267, 388, 334, 335, 336, 337, 338, 339, 340, 341,
+ 342, 343, 344, 345, 346, 347, 348, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387,
+ 389, 390, 268, 268, 268, 269, 270, 271, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275,
+ 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 276, 351, 351, 352, 352, 277, 278, 307,
+ 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 355, 355, 356, 356, 357,
+ 357, 358, 358, 359, 359, 363, 363, 360, 360, 361, 361, 362, 362, 308, 308, 309, 310, 310, 310,
+ 311, 311, 311, 314, 314, 314, 312, 312, 312, 313, 313, 313, 319, 319, 319, 321, 321, 321, 315,
+ 315, 315, 316, 316, 316, 322, 322, 322, 320, 320, 320, 317, 317, 317, 318, 318, 318, 366, 366,
+ 366, 279, 280, 353, 353, 281, 288, 298, 354, 354, 285, 282, 283, 284, 286, 287, 289, 290, 291,
+ 292, 293, 294, 295, 296, 297, 415, 415, 413, 411, 412, 412, 414, 414, 414, 414, 414, 414, 414,
+ 414, 202, 202, 416, 416, 367, 367, 367, 367, 367, 367, 367, 368, 369, 370, 371, 372, 373, 374,
+ 272, 272, 273, 274, 223, 223, 234, 234, 235, 365, 365, 236, 237, 237, 210, 205, 205, 205, 205,
+ 205, 299, 299, 299, 299, 299, 299, 299, 300, 301, 302, 303, 304, 305, 306, 323, 323, 323, 323,
+ 323, 323, 323, 323, 323, 323, 349, 349, 350, 350, 324, 325, 326, 327, 328, 329, 330, 331, 332,
+ 333};
const signed char ParserGen::yyr2_[] = {
- 0, 2, 2, 2, 2, 3, 0, 4, 0, 2, 1, 1, 1, 1, 1, 1, 5, 3, 7, 1, 1, 1, 1, 2, 2, 4, 0, 2, 2,
- 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, 2, 2, 3, 0, 2, 2, 1, 1, 1, 3, 0, 2, 1, 1, 1,
- 2, 3, 0, 2, 1, 1, 2, 2, 2, 2, 5, 5, 1, 1, 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 5, 1, 1, 1, 4, 4, 3, 3, 1, 1, 3, 0, 2, 2, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 7, 4, 4, 4, 7, 4, 7, 8, 7, 7, 4, 7,
- 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 4, 4, 6, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 0, 2, 0, 2, 11, 10, 0, 1, 2, 8, 8, 0, 2, 8,
- 8, 8, 0, 2, 7, 4, 4, 4, 11, 11, 7, 4, 4, 7, 8, 8, 8, 4, 4, 1, 1, 4, 3, 0, 2, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 6, 6, 4, 8, 8, 4, 8, 1, 1, 6, 6, 1, 1, 1,
- 1, 3, 0, 2, 3, 0, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 0, 2, 11, 4, 4, 4, 4, 4, 4, 4, 4, 4};
+ 0, 2, 2, 2, 2, 3, 0, 4, 1, 1, 1, 1, 1, 1, 1, 5, 3, 7, 1, 1, 1, 1, 2, 2, 4, 0, 2, 2, 2, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, 2, 2, 3, 0, 2, 2, 1, 1, 1, 3, 0, 2, 1, 1, 1, 2, 3, 0, 2,
+ 1, 1, 2, 2, 2, 2, 5, 5, 1, 1, 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 5,
+ 1, 1, 1, 4, 4, 3, 3, 1, 1, 3, 0, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4,
+ 4, 4, 4, 7, 4, 4, 4, 7, 4, 7, 8, 7, 7, 4, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 1, 1, 1, 4, 4, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 0,
+ 2, 0, 2, 11, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2,
+ 0, 2, 0, 2, 0, 2, 0, 2, 14, 16, 9, 4, 8, 4, 4, 8, 4, 4, 8, 4, 4, 8, 4, 4, 8, 4, 4, 8, 4, 4,
+ 8, 4, 4, 8, 4, 4, 8, 4, 4, 8, 4, 4, 8, 4, 4, 8, 4, 4, 8, 4, 0, 1, 2, 8, 8, 0, 2, 8, 8, 8,
+ 0, 2, 7, 4, 4, 4, 11, 11, 7, 4, 4, 7, 8, 8, 8, 4, 4, 1, 1, 4, 3, 0, 2, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 6, 6, 4, 8, 8, 4, 8, 1, 1, 6, 6, 1, 1, 1, 1, 3, 0, 2,
+ 3, 0, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 0, 2, 0, 2, 11, 4, 4, 4, 4, 4, 4, 4, 4, 4};
#if YYDEBUG || 1
@@ -7710,21 +9076,33 @@ const char* const ParserGen::yytname_[] = {"\"EOF\"",
"\"coll argument\"",
"\"date argument\"",
"\"dateString argument\"",
+ "\"day argument\"",
+ "\"filter\"",
"\"find argument\"",
"\"format argument\"",
+ "\"hour argument\"",
"\"input argument\"",
+ "\"ISO 8601 argument\"",
+ "\"ISO day of week argument\"",
+ "\"ISO week argument\"",
+ "\"ISO week year argument\"",
+ "\"millisecond argument\"",
+ "\"minute argument\"",
+ "\"month argument\"",
"\"onError argument\"",
"\"onNull argument\"",
"\"options argument\"",
"\"pipeline argument\"",
"\"regex argument\"",
"\"replacement argument\"",
+ "\"second argument\"",
"\"size argument\"",
"\"timezone argument\"",
"\"to argument\"",
"ASIN",
"ASINH",
"ATAN",
+ "\"year argument\"",
"ATAN2",
"ATANH",
"\"false\"",
@@ -7737,8 +9115,13 @@ const char* const ParserGen::yytname_[] = {"\"EOF\"",
"CONVERT",
"COS",
"COSH",
+ "DATE_FROM_PARTS",
"DATE_FROM_STRING",
+ "DATE_TO_PARTS",
"DATE_TO_STRING",
+ "DAY_OF_MONTH",
+ "DAY_OF_WEEK",
+ "DAY_OF_YEAR",
"\"-1 (decimal)\"",
"\"1 (decimal)\"",
"\"zero (decimal)\"",
@@ -7757,6 +9140,7 @@ const char* const ParserGen::yytname_[] = {"\"EOF\"",
"\"geoNearPoint\"",
"GT",
"GTE",
+ "HOUR",
"ID",
"INDEX_OF_BYTES",
"INDEX_OF_CP",
@@ -7764,6 +9148,9 @@ const char* const ParserGen::yytname_[] = {"\"EOF\"",
"\"-1 (int)\"",
"\"1 (int)\"",
"\"zero (int)\"",
+ "ISO_DAY_OF_WEEK",
+ "ISO_WEEK",
+ "ISO_WEEK_YEAR",
"LITERAL",
"LN",
"LOG",
@@ -7775,7 +9162,10 @@ const char* const ParserGen::yytname_[] = {"\"EOF\"",
"LTE",
"LTRIM",
"META",
+ "MILLISECOND",
+ "MINUTE",
"MOD",
+ "MONTH",
"MULTIPLY",
"NE",
"NOR",
@@ -7794,6 +9184,7 @@ const char* const ParserGen::yytname_[] = {"\"EOF\"",
"RTRIM",
"\"searchHighlights\"",
"\"searchScore\"",
+ "SECOND",
"\"setDifference\"",
"\"setEquals\"",
"\"setIntersection\"",
@@ -7836,6 +9227,8 @@ const char* const ParserGen::yytname_[] = {"\"EOF\"",
"TRIM",
"TRUNC",
"TYPE",
+ "WEEK",
+ "YEAR",
"\"fieldname\"",
"\"fieldname containing dotted path\"",
"\"$-prefixed fieldname\"",
@@ -7976,6 +9369,22 @@ const char* const ParserGen::yytname_[] = {"\"EOF\"",
"lt",
"lte",
"ne",
+ "dateExps",
+ "dateFromParts",
+ "dateToParts",
+ "dayOfMonth",
+ "dayOfWeek",
+ "dayOfYear",
+ "hour",
+ "isoDayOfWeek",
+ "isoWeek",
+ "isoWeekYear",
+ "millisecond",
+ "minute",
+ "month",
+ "second",
+ "week",
+ "year",
"typeExpression",
"convert",
"toBool",
@@ -8008,6 +9417,15 @@ const char* const ParserGen::yytname_[] = {"\"EOF\"",
"timezoneArg",
"charsArg",
"optionsArg",
+ "hourArg",
+ "minuteArg",
+ "secondArg",
+ "millisecondArg",
+ "dayArg",
+ "isoWeekArg",
+ "iso8601Arg",
+ "monthArg",
+ "isoDayOfWeekArg",
"expressions",
"values",
"exprZeroToTwo",
@@ -8040,6 +9458,7 @@ const char* const ParserGen::yytname_[] = {"\"EOF\"",
"nonArrayNonObjCompoundExpression",
"expressionSingletonArray",
"singleArgExpression",
+ "nonArrayNonObjExpression",
"match",
"predicates",
"compoundMatchExprs",
@@ -8062,47 +9481,53 @@ const char* const ParserGen::yytname_[] = {"\"EOF\"",
"sortSpec",
"start",
"START_ORDERED_OBJECT",
- "$@1",
YY_NULLPTR};
#endif
#if YYDEBUG
const short ParserGen::yyrline_[] = {
- 0, 354, 354, 357, 360, 367, 373, 374, 382, 382, 385, 385, 385, 385, 385, 385,
- 388, 398, 404, 414, 414, 414, 414, 418, 423, 428, 447, 450, 457, 460, 466, 480,
- 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 494, 497, 500, 503, 506,
- 509, 512, 515, 518, 521, 524, 527, 530, 533, 536, 539, 542, 545, 546, 547, 548,
- 549, 554, 562, 575, 576, 593, 600, 604, 612, 615, 621, 627, 630, 636, 639, 640,
- 647, 648, 654, 657, 665, 665, 665, 669, 675, 681, 682, 689, 689, 693, 702, 712,
- 718, 723, 733, 741, 742, 743, 746, 749, 756, 756, 756, 759, 767, 770, 773, 776,
- 779, 782, 788, 794, 813, 816, 819, 822, 825, 828, 831, 834, 837, 840, 843, 846,
- 849, 852, 855, 858, 866, 869, 872, 875, 878, 881, 884, 887, 890, 893, 896, 899,
- 902, 905, 908, 911, 914, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 947,
- 950, 953, 956, 959, 962, 965, 968, 971, 974, 977, 980, 983, 986, 989, 992, 995,
- 998, 1001, 1004, 1007, 1010, 1013, 1016, 1019, 1022, 1025, 1028, 1031, 1034, 1037, 1040, 1043,
- 1046, 1049, 1052, 1055, 1058, 1061, 1064, 1067, 1070, 1073, 1076, 1079, 1082, 1085, 1088, 1091,
- 1094, 1097, 1100, 1103, 1106, 1109, 1112, 1115, 1122, 1127, 1130, 1133, 1136, 1139, 1142, 1145,
- 1148, 1151, 1157, 1171, 1185, 1191, 1197, 1203, 1209, 1215, 1221, 1227, 1233, 1239, 1245, 1251,
- 1257, 1263, 1266, 1269, 1272, 1278, 1281, 1284, 1287, 1293, 1296, 1299, 1302, 1308, 1311, 1314,
- 1317, 1323, 1326, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344,
- 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1359, 1360, 1367, 1367, 1367, 1367, 1371, 1371,
- 1375, 1375, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1380, 1380, 1380, 1385, 1392, 1398, 1398,
- 1402, 1406, 1410, 1419, 1426, 1431, 1431, 1436, 1442, 1445, 1452, 1459, 1459, 1459, 1459, 1463,
- 1469, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1476, 1476, 1476,
- 1476, 1480, 1483, 1486, 1489, 1492, 1495, 1498, 1501, 1504, 1509, 1509, 1509, 1509, 1509, 1509,
- 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1510, 1510, 1514, 1521, 1527, 1532, 1537, 1543, 1548,
- 1553, 1558, 1564, 1569, 1575, 1584, 1590, 1596, 1601, 1607, 1613, 1618, 1623, 1628, 1633, 1638,
- 1643, 1648, 1653, 1658, 1663, 1668, 1673, 1678, 1684, 1684, 1684, 1688, 1695, 1702, 1709, 1709,
- 1709, 1709, 1709, 1709, 1709, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1711, 1711, 1711,
- 1711, 1711, 1711, 1711, 1715, 1725, 1728, 1734, 1737, 1743, 1752, 1761, 1764, 1767, 1773, 1784,
- 1795, 1798, 1804, 1812, 1820, 1828, 1831, 1836, 1845, 1851, 1857, 1863, 1873, 1883, 1890, 1897,
- 1904, 1912, 1920, 1928, 1936, 1942, 1948, 1951, 1957, 1963, 1968, 1971, 1978, 1981, 1984, 1987,
- 1990, 1993, 1996, 1999, 2004, 2006, 2016, 2018, 2024, 2024, 2024, 2024, 2024, 2024, 2025, 2029,
- 2035, 2041, 2048, 2059, 2070, 2077, 2088, 2088, 2092, 2099, 2106, 2106, 2110, 2110, 2114, 2120,
- 2121, 2128, 2134, 2137, 2144, 2151, 2152, 2153, 2154, 2155, 2158, 2158, 2158, 2158, 2158, 2158,
- 2158, 2160, 2165, 2170, 2175, 2180, 2185, 2190, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203,
- 2204, 2205, 2210, 2213, 2220, 2223, 2229, 2239, 2244, 2249, 2254, 2259, 2264, 2269, 2274, 2279};
+ 0, 385, 385, 388, 391, 398, 404, 405, 413, 416, 416, 416, 416, 416, 416, 419,
+ 429, 435, 445, 445, 445, 445, 449, 454, 459, 478, 481, 488, 491, 497, 511, 512,
+ 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 525, 528, 531, 534, 537, 540,
+ 543, 546, 549, 552, 555, 558, 561, 564, 567, 570, 573, 576, 577, 578, 579, 580,
+ 585, 593, 606, 607, 624, 631, 635, 643, 646, 652, 658, 661, 667, 670, 671, 678,
+ 679, 685, 688, 696, 696, 696, 700, 706, 712, 713, 720, 720, 724, 733, 743, 749,
+ 754, 764, 772, 773, 774, 777, 780, 787, 787, 787, 790, 798, 801, 804, 807, 810,
+ 813, 819, 825, 844, 847, 850, 853, 856, 859, 862, 865, 868, 871, 874, 877, 880,
+ 883, 886, 889, 892, 895, 898, 901, 904, 907, 910, 913, 916, 919, 922, 930, 933,
+ 936, 939, 942, 945, 948, 951, 954, 957, 960, 963, 966, 969, 972, 975, 978, 981,
+ 984, 987, 990, 993, 996, 999, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029,
+ 1032, 1035, 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 1074, 1077,
+ 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122, 1125,
+ 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1170, 1173,
+ 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209, 1212, 1215, 1218, 1221,
+ 1224, 1231, 1236, 1239, 1242, 1245, 1248, 1251, 1254, 1257, 1260, 1266, 1280, 1294, 1300, 1306,
+ 1312, 1318, 1324, 1330, 1336, 1342, 1348, 1354, 1360, 1366, 1372, 1375, 1378, 1381, 1387, 1390,
+ 1393, 1396, 1402, 1405, 1408, 1411, 1417, 1420, 1423, 1426, 1432, 1435, 1441, 1442, 1443, 1444,
+ 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460,
+ 1461, 1468, 1469, 1476, 1476, 1476, 1476, 1480, 1480, 1484, 1484, 1488, 1488, 1492, 1492, 1492,
+ 1492, 1492, 1492, 1492, 1493, 1493, 1493, 1493, 1498, 1505, 1511, 1511, 1514, 1518, 1522, 1531,
+ 1538, 1543, 1543, 1548, 1554, 1557, 1564, 1571, 1571, 1571, 1571, 1575, 1581, 1587, 1587, 1587,
+ 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1588, 1588, 1588, 1588, 1592, 1595, 1598,
+ 1601, 1604, 1607, 1610, 1613, 1616, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621,
+ 1621, 1621, 1621, 1622, 1622, 1626, 1633, 1639, 1644, 1649, 1655, 1660, 1665, 1670, 1676, 1681,
+ 1687, 1696, 1702, 1708, 1713, 1719, 1725, 1730, 1735, 1740, 1745, 1750, 1755, 1760, 1765, 1770,
+ 1775, 1780, 1785, 1790, 1796, 1796, 1796, 1800, 1807, 1814, 1821, 1821, 1821, 1821, 1821, 1821,
+ 1821, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1823, 1823, 1823, 1823, 1823, 1823, 1823,
+ 1827, 1837, 1840, 1846, 1849, 1856, 1865, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874,
+ 1875, 1875, 1875, 1875, 1875, 1875, 1879, 1882, 1888, 1891, 1897, 1900, 1906, 1909, 1915, 1918,
+ 1924, 1927, 1933, 1936, 1942, 1945, 1951, 1954, 1960, 1966, 1975, 1983, 1986, 1990, 1996, 2000,
+ 2004, 2010, 2014, 2018, 2024, 2028, 2032, 2038, 2042, 2046, 2052, 2056, 2060, 2066, 2070, 2074,
+ 2080, 2084, 2088, 2094, 2098, 2102, 2108, 2112, 2116, 2122, 2126, 2130, 2136, 2140, 2144, 2150,
+ 2154, 2158, 2164, 2167, 2170, 2176, 2187, 2198, 2201, 2207, 2215, 2223, 2231, 2234, 2239, 2248,
+ 2254, 2260, 2266, 2276, 2286, 2293, 2300, 2307, 2315, 2323, 2331, 2339, 2345, 2351, 2354, 2360,
+ 2366, 2371, 2374, 2381, 2384, 2387, 2390, 2393, 2396, 2399, 2402, 2407, 2409, 2419, 2421, 2427,
+ 2427, 2427, 2427, 2427, 2427, 2428, 2432, 2438, 2444, 2451, 2462, 2473, 2480, 2491, 2491, 2495,
+ 2502, 2509, 2509, 2513, 2513, 2517, 2523, 2524, 2531, 2537, 2540, 2547, 2554, 2555, 2556, 2557,
+ 2558, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2563, 2568, 2573, 2578, 2583, 2588, 2593, 2599,
+ 2600, 2601, 2602, 2603, 2604, 2605, 2606, 2607, 2608, 2613, 2616, 2623, 2626, 2632, 2642, 2647,
+ 2652, 2657, 2662, 2667, 2672, 2677, 2682};
void ParserGen::yy_stack_print_() const {
*yycdebug_ << "Stack now";
@@ -8125,6 +9550,6 @@ void ParserGen::yy_reduce_print_(int yyrule) const {
#line 57 "grammar.yy"
} // namespace mongo
-#line 7827 "parser_gen.cpp"
+#line 9031 "parser_gen.cpp"
-#line 2283 "grammar.yy"
+#line 2686 "grammar.yy"
diff --git a/src/mongo/db/cst/parser_gen.hpp b/src/mongo/db/cst/parser_gen.hpp
index a0021bd6a40..1b1375414d1 100644
--- a/src/mongo/db/cst/parser_gen.hpp
+++ b/src/mongo/db/cst/parser_gen.hpp
@@ -479,6 +479,22 @@ public:
// lt
// lte
// ne
+ // dateExps
+ // dateFromParts
+ // dateToParts
+ // dayOfMonth
+ // dayOfWeek
+ // dayOfYear
+ // hour
+ // isoDayOfWeek
+ // isoWeek
+ // isoWeekYear
+ // millisecond
+ // minute
+ // month
+ // second
+ // week
+ // year
// typeExpression
// convert
// toBool
@@ -534,6 +550,7 @@ public:
// nonArrayNonObjCompoundExpression
// expressionSingletonArray
// singleArgExpression
+ // nonArrayNonObjExpression
// match
// predicates
// compoundMatchExprs
@@ -605,6 +622,15 @@ public:
// timezoneArg
// charsArg
// optionsArg
+ // hourArg
+ // minuteArg
+ // secondArg
+ // millisecondArg
+ // dayArg
+ // isoWeekArg
+ // iso8601Arg
+ // monthArg
+ // isoDayOfWeekArg
// predicate
// logicalExpr
// operatorExpression
@@ -684,158 +710,185 @@ public:
ARG_COLL = 11, // "coll argument"
ARG_DATE = 12, // "date argument"
ARG_DATE_STRING = 13, // "dateString argument"
- ARG_FIND = 14, // "find argument"
- ARG_FORMAT = 15, // "format argument"
- ARG_INPUT = 16, // "input argument"
- ARG_ON_ERROR = 17, // "onError argument"
- ARG_ON_NULL = 18, // "onNull argument"
- ARG_OPTIONS = 19, // "options argument"
- ARG_PIPELINE = 20, // "pipeline argument"
- ARG_REGEX = 21, // "regex argument"
- ARG_REPLACEMENT = 22, // "replacement argument"
- ARG_SIZE = 23, // "size argument"
- ARG_TIMEZONE = 24, // "timezone argument"
- ARG_TO = 25, // "to argument"
- ASIN = 26, // ASIN
- ASINH = 27, // ASINH
- ATAN = 28, // ATAN
- ATAN2 = 29, // ATAN2
- ATANH = 30, // ATANH
- BOOL_FALSE = 31, // "false"
- BOOL_TRUE = 32, // "true"
- CEIL = 33, // CEIL
- COMMENT = 34, // COMMENT
- CMP = 35, // CMP
- CONCAT = 36, // CONCAT
- CONST_EXPR = 37, // CONST_EXPR
- CONVERT = 38, // CONVERT
- COS = 39, // COS
- COSH = 40, // COSH
- DATE_FROM_STRING = 41, // DATE_FROM_STRING
- DATE_TO_STRING = 42, // DATE_TO_STRING
- DECIMAL_NEGATIVE_ONE = 43, // "-1 (decimal)"
- DECIMAL_ONE = 44, // "1 (decimal)"
- DECIMAL_ZERO = 45, // "zero (decimal)"
- DEGREES_TO_RADIANS = 46, // DEGREES_TO_RADIANS
- DIVIDE = 47, // DIVIDE
- DOUBLE_NEGATIVE_ONE = 48, // "-1 (double)"
- DOUBLE_ONE = 49, // "1 (double)"
- DOUBLE_ZERO = 50, // "zero (double)"
- END_ARRAY = 51, // "end of array"
- END_OBJECT = 52, // "end of object"
- EQ = 53, // EQ
- EXISTS = 54, // EXISTS
- EXPONENT = 55, // EXPONENT
- FLOOR = 56, // FLOOR
- GEO_NEAR_DISTANCE = 57, // "geoNearDistance"
- GEO_NEAR_POINT = 58, // "geoNearPoint"
- GT = 59, // GT
- GTE = 60, // GTE
- ID = 61, // ID
- INDEX_OF_BYTES = 62, // INDEX_OF_BYTES
- INDEX_OF_CP = 63, // INDEX_OF_CP
- INDEX_KEY = 64, // "indexKey"
- INT_NEGATIVE_ONE = 65, // "-1 (int)"
- INT_ONE = 66, // "1 (int)"
- INT_ZERO = 67, // "zero (int)"
- LITERAL = 68, // LITERAL
- LN = 69, // LN
- LOG = 70, // LOG
- LOGTEN = 71, // LOGTEN
- LONG_NEGATIVE_ONE = 72, // "-1 (long)"
- LONG_ONE = 73, // "1 (long)"
- LONG_ZERO = 74, // "zero (long)"
- LT = 75, // LT
- LTE = 76, // LTE
- LTRIM = 77, // LTRIM
- META = 78, // META
- MOD = 79, // MOD
- MULTIPLY = 80, // MULTIPLY
- NE = 81, // NE
- NOR = 82, // NOR
- NOT = 83, // NOT
- OR = 84, // OR
- POW = 85, // POW
- RADIANS_TO_DEGREES = 86, // RADIANS_TO_DEGREES
- RAND_VAL = 87, // "randVal"
- RECORD_ID = 88, // "recordId"
- REGEX_FIND = 89, // REGEX_FIND
- REGEX_FIND_ALL = 90, // REGEX_FIND_ALL
- REGEX_MATCH = 91, // REGEX_MATCH
- REPLACE_ALL = 92, // REPLACE_ALL
- REPLACE_ONE = 93, // REPLACE_ONE
- ROUND = 94, // ROUND
- RTRIM = 95, // RTRIM
- SEARCH_HIGHLIGHTS = 96, // "searchHighlights"
- SEARCH_SCORE = 97, // "searchScore"
- SET_DIFFERENCE = 98, // "setDifference"
- SET_EQUALS = 99, // "setEquals"
- SET_INTERSECTION = 100, // "setIntersection"
- SET_IS_SUBSET = 101, // "setIsSubset"
- SET_UNION = 102, // "setUnion"
- SLICE = 103, // "slice"
- SORT_KEY = 104, // "sortKey"
- SIN = 105, // SIN
- SINH = 106, // SINH
- SPLIT = 107, // SPLIT
- SQRT = 108, // SQRT
- STAGE_INHIBIT_OPTIMIZATION = 109, // STAGE_INHIBIT_OPTIMIZATION
- STAGE_LIMIT = 110, // STAGE_LIMIT
- STAGE_PROJECT = 111, // STAGE_PROJECT
- STAGE_SAMPLE = 112, // STAGE_SAMPLE
- STAGE_SKIP = 113, // STAGE_SKIP
- STAGE_UNION_WITH = 114, // STAGE_UNION_WITH
- START_ARRAY = 115, // "array"
- START_OBJECT = 116, // "object"
- STR_CASE_CMP = 117, // STR_CASE_CMP
- STR_LEN_BYTES = 118, // STR_LEN_BYTES
- STR_LEN_CP = 119, // STR_LEN_CP
- SUBSTR = 120, // SUBSTR
- SUBSTR_BYTES = 121, // SUBSTR_BYTES
- SUBSTR_CP = 122, // SUBSTR_CP
- SUBTRACT = 123, // SUBTRACT
- TAN = 124, // TAN
- TANH = 125, // TANH
- TEXT_SCORE = 126, // "textScore"
- TO_BOOL = 127, // TO_BOOL
- TO_DATE = 128, // TO_DATE
- TO_DECIMAL = 129, // TO_DECIMAL
- TO_DOUBLE = 130, // TO_DOUBLE
- TO_INT = 131, // TO_INT
- TO_LONG = 132, // TO_LONG
- TO_LOWER = 133, // TO_LOWER
- TO_OBJECT_ID = 134, // TO_OBJECT_ID
- TO_STRING = 135, // TO_STRING
- TO_UPPER = 136, // TO_UPPER
- TRIM = 137, // TRIM
- TRUNC = 138, // TRUNC
- TYPE = 139, // TYPE
- FIELDNAME = 140, // "fieldname"
- DOTTED_FIELDNAME = 141, // "fieldname containing dotted path"
- DOLLAR_PREF_FIELDNAME = 142, // "$-prefixed fieldname"
- STRING = 143, // "string"
- DOLLAR_STRING = 144, // "$-prefixed string"
- DOLLAR_DOLLAR_STRING = 145, // "$$-prefixed string"
- BINARY = 146, // "BinData"
- UNDEFINED = 147, // "undefined"
- OBJECT_ID = 148, // "ObjectID"
- DATE_LITERAL = 149, // "Date"
- JSNULL = 150, // "null"
- REGEX = 151, // "regex"
- DB_POINTER = 152, // "dbPointer"
- JAVASCRIPT = 153, // "Code"
- SYMBOL = 154, // "Symbol"
- JAVASCRIPT_W_SCOPE = 155, // "CodeWScope"
- INT_OTHER = 156, // "arbitrary integer"
- LONG_OTHER = 157, // "arbitrary long"
- DOUBLE_OTHER = 158, // "arbitrary double"
- DECIMAL_OTHER = 159, // "arbitrary decimal"
- TIMESTAMP = 160, // "Timestamp"
- MIN_KEY = 161, // "minKey"
- MAX_KEY = 162, // "maxKey"
- START_PIPELINE = 163, // START_PIPELINE
- START_MATCH = 164, // START_MATCH
- START_SORT = 165 // START_SORT
+ ARG_DAY = 14, // "day argument"
+ ARG_FILTER = 15, // "filter"
+ ARG_FIND = 16, // "find argument"
+ ARG_FORMAT = 17, // "format argument"
+ ARG_HOUR = 18, // "hour argument"
+ ARG_INPUT = 19, // "input argument"
+ ARG_ISO_8601 = 20, // "ISO 8601 argument"
+ ARG_ISO_DAY_OF_WEEK = 21, // "ISO day of week argument"
+ ARG_ISO_WEEK = 22, // "ISO week argument"
+ ARG_ISO_WEEK_YEAR = 23, // "ISO week year argument"
+ ARG_MILLISECOND = 24, // "millisecond argument"
+ ARG_MINUTE = 25, // "minute argument"
+ ARG_MONTH = 26, // "month argument"
+ ARG_ON_ERROR = 27, // "onError argument"
+ ARG_ON_NULL = 28, // "onNull argument"
+ ARG_OPTIONS = 29, // "options argument"
+ ARG_PIPELINE = 30, // "pipeline argument"
+ ARG_REGEX = 31, // "regex argument"
+ ARG_REPLACEMENT = 32, // "replacement argument"
+ ARG_SECOND = 33, // "second argument"
+ ARG_SIZE = 34, // "size argument"
+ ARG_TIMEZONE = 35, // "timezone argument"
+ ARG_TO = 36, // "to argument"
+ ASIN = 37, // ASIN
+ ASINH = 38, // ASINH
+ ATAN = 39, // ATAN
+ ARG_YEAR = 40, // "year argument"
+ ATAN2 = 41, // ATAN2
+ ATANH = 42, // ATANH
+ BOOL_FALSE = 43, // "false"
+ BOOL_TRUE = 44, // "true"
+ CEIL = 45, // CEIL
+ COMMENT = 46, // COMMENT
+ CMP = 47, // CMP
+ CONCAT = 48, // CONCAT
+ CONST_EXPR = 49, // CONST_EXPR
+ CONVERT = 50, // CONVERT
+ COS = 51, // COS
+ COSH = 52, // COSH
+ DATE_FROM_PARTS = 53, // DATE_FROM_PARTS
+ DATE_FROM_STRING = 54, // DATE_FROM_STRING
+ DATE_TO_PARTS = 55, // DATE_TO_PARTS
+ DATE_TO_STRING = 56, // DATE_TO_STRING
+ DAY_OF_MONTH = 57, // DAY_OF_MONTH
+ DAY_OF_WEEK = 58, // DAY_OF_WEEK
+ DAY_OF_YEAR = 59, // DAY_OF_YEAR
+ DECIMAL_NEGATIVE_ONE = 60, // "-1 (decimal)"
+ DECIMAL_ONE = 61, // "1 (decimal)"
+ DECIMAL_ZERO = 62, // "zero (decimal)"
+ DEGREES_TO_RADIANS = 63, // DEGREES_TO_RADIANS
+ DIVIDE = 64, // DIVIDE
+ DOUBLE_NEGATIVE_ONE = 65, // "-1 (double)"
+ DOUBLE_ONE = 66, // "1 (double)"
+ DOUBLE_ZERO = 67, // "zero (double)"
+ END_ARRAY = 68, // "end of array"
+ END_OBJECT = 69, // "end of object"
+ EQ = 70, // EQ
+ EXISTS = 71, // EXISTS
+ EXPONENT = 72, // EXPONENT
+ FLOOR = 73, // FLOOR
+ GEO_NEAR_DISTANCE = 74, // "geoNearDistance"
+ GEO_NEAR_POINT = 75, // "geoNearPoint"
+ GT = 76, // GT
+ GTE = 77, // GTE
+ HOUR = 78, // HOUR
+ ID = 79, // ID
+ INDEX_OF_BYTES = 80, // INDEX_OF_BYTES
+ INDEX_OF_CP = 81, // INDEX_OF_CP
+ INDEX_KEY = 82, // "indexKey"
+ INT_NEGATIVE_ONE = 83, // "-1 (int)"
+ INT_ONE = 84, // "1 (int)"
+ INT_ZERO = 85, // "zero (int)"
+ ISO_DAY_OF_WEEK = 86, // ISO_DAY_OF_WEEK
+ ISO_WEEK = 87, // ISO_WEEK
+ ISO_WEEK_YEAR = 88, // ISO_WEEK_YEAR
+ LITERAL = 89, // LITERAL
+ LN = 90, // LN
+ LOG = 91, // LOG
+ LOGTEN = 92, // LOGTEN
+ LONG_NEGATIVE_ONE = 93, // "-1 (long)"
+ LONG_ONE = 94, // "1 (long)"
+ LONG_ZERO = 95, // "zero (long)"
+ LT = 96, // LT
+ LTE = 97, // LTE
+ LTRIM = 98, // LTRIM
+ META = 99, // META
+ MILLISECOND = 100, // MILLISECOND
+ MINUTE = 101, // MINUTE
+ MOD = 102, // MOD
+ MONTH = 103, // MONTH
+ MULTIPLY = 104, // MULTIPLY
+ NE = 105, // NE
+ NOR = 106, // NOR
+ NOT = 107, // NOT
+ OR = 108, // OR
+ POW = 109, // POW
+ RADIANS_TO_DEGREES = 110, // RADIANS_TO_DEGREES
+ RAND_VAL = 111, // "randVal"
+ RECORD_ID = 112, // "recordId"
+ REGEX_FIND = 113, // REGEX_FIND
+ REGEX_FIND_ALL = 114, // REGEX_FIND_ALL
+ REGEX_MATCH = 115, // REGEX_MATCH
+ REPLACE_ALL = 116, // REPLACE_ALL
+ REPLACE_ONE = 117, // REPLACE_ONE
+ ROUND = 118, // ROUND
+ RTRIM = 119, // RTRIM
+ SEARCH_HIGHLIGHTS = 120, // "searchHighlights"
+ SEARCH_SCORE = 121, // "searchScore"
+ SECOND = 122, // SECOND
+ SET_DIFFERENCE = 123, // "setDifference"
+ SET_EQUALS = 124, // "setEquals"
+ SET_INTERSECTION = 125, // "setIntersection"
+ SET_IS_SUBSET = 126, // "setIsSubset"
+ SET_UNION = 127, // "setUnion"
+ SLICE = 128, // "slice"
+ SORT_KEY = 129, // "sortKey"
+ SIN = 130, // SIN
+ SINH = 131, // SINH
+ SPLIT = 132, // SPLIT
+ SQRT = 133, // SQRT
+ STAGE_INHIBIT_OPTIMIZATION = 134, // STAGE_INHIBIT_OPTIMIZATION
+ STAGE_LIMIT = 135, // STAGE_LIMIT
+ STAGE_PROJECT = 136, // STAGE_PROJECT
+ STAGE_SAMPLE = 137, // STAGE_SAMPLE
+ STAGE_SKIP = 138, // STAGE_SKIP
+ STAGE_UNION_WITH = 139, // STAGE_UNION_WITH
+ START_ARRAY = 140, // "array"
+ START_OBJECT = 141, // "object"
+ STR_CASE_CMP = 142, // STR_CASE_CMP
+ STR_LEN_BYTES = 143, // STR_LEN_BYTES
+ STR_LEN_CP = 144, // STR_LEN_CP
+ SUBSTR = 145, // SUBSTR
+ SUBSTR_BYTES = 146, // SUBSTR_BYTES
+ SUBSTR_CP = 147, // SUBSTR_CP
+ SUBTRACT = 148, // SUBTRACT
+ TAN = 149, // TAN
+ TANH = 150, // TANH
+ TEXT_SCORE = 151, // "textScore"
+ TO_BOOL = 152, // TO_BOOL
+ TO_DATE = 153, // TO_DATE
+ TO_DECIMAL = 154, // TO_DECIMAL
+ TO_DOUBLE = 155, // TO_DOUBLE
+ TO_INT = 156, // TO_INT
+ TO_LONG = 157, // TO_LONG
+ TO_LOWER = 158, // TO_LOWER
+ TO_OBJECT_ID = 159, // TO_OBJECT_ID
+ TO_STRING = 160, // TO_STRING
+ TO_UPPER = 161, // TO_UPPER
+ TRIM = 162, // TRIM
+ TRUNC = 163, // TRUNC
+ TYPE = 164, // TYPE
+ WEEK = 165, // WEEK
+ YEAR = 166, // YEAR
+ FIELDNAME = 167, // "fieldname"
+ DOTTED_FIELDNAME = 168, // "fieldname containing dotted path"
+ DOLLAR_PREF_FIELDNAME = 169, // "$-prefixed fieldname"
+ STRING = 170, // "string"
+ DOLLAR_STRING = 171, // "$-prefixed string"
+ DOLLAR_DOLLAR_STRING = 172, // "$$-prefixed string"
+ BINARY = 173, // "BinData"
+ UNDEFINED = 174, // "undefined"
+ OBJECT_ID = 175, // "ObjectID"
+ DATE_LITERAL = 176, // "Date"
+ JSNULL = 177, // "null"
+ REGEX = 178, // "regex"
+ DB_POINTER = 179, // "dbPointer"
+ JAVASCRIPT = 180, // "Code"
+ SYMBOL = 181, // "Symbol"
+ JAVASCRIPT_W_SCOPE = 182, // "CodeWScope"
+ INT_OTHER = 183, // "arbitrary integer"
+ LONG_OTHER = 184, // "arbitrary long"
+ DOUBLE_OTHER = 185, // "arbitrary double"
+ DECIMAL_OTHER = 186, // "arbitrary decimal"
+ TIMESTAMP = 187, // "Timestamp"
+ MIN_KEY = 188, // "minKey"
+ MAX_KEY = 189, // "maxKey"
+ START_PIPELINE = 190, // START_PIPELINE
+ START_MATCH = 191, // START_MATCH
+ START_SORT = 192 // START_SORT
};
/// Backward compatibility alias (Bison 3.6).
typedef token_kind_type yytokentype;
@@ -850,7 +903,7 @@ public:
/// Symbol kinds.
struct symbol_kind {
enum symbol_kind_type {
- YYNTOKENS = 166, ///< Number of tokens.
+ YYNTOKENS = 193, ///< Number of tokens.
S_YYEMPTY = -2,
S_YYEOF = 0, // "EOF"
S_YYerror = 1, // error
@@ -866,359 +919,411 @@ public:
S_ARG_COLL = 11, // "coll argument"
S_ARG_DATE = 12, // "date argument"
S_ARG_DATE_STRING = 13, // "dateString argument"
- S_ARG_FIND = 14, // "find argument"
- S_ARG_FORMAT = 15, // "format argument"
- S_ARG_INPUT = 16, // "input argument"
- S_ARG_ON_ERROR = 17, // "onError argument"
- S_ARG_ON_NULL = 18, // "onNull argument"
- S_ARG_OPTIONS = 19, // "options argument"
- S_ARG_PIPELINE = 20, // "pipeline argument"
- S_ARG_REGEX = 21, // "regex argument"
- S_ARG_REPLACEMENT = 22, // "replacement argument"
- S_ARG_SIZE = 23, // "size argument"
- S_ARG_TIMEZONE = 24, // "timezone argument"
- S_ARG_TO = 25, // "to argument"
- S_ASIN = 26, // ASIN
- S_ASINH = 27, // ASINH
- S_ATAN = 28, // ATAN
- S_ATAN2 = 29, // ATAN2
- S_ATANH = 30, // ATANH
- S_BOOL_FALSE = 31, // "false"
- S_BOOL_TRUE = 32, // "true"
- S_CEIL = 33, // CEIL
- S_COMMENT = 34, // COMMENT
- S_CMP = 35, // CMP
- S_CONCAT = 36, // CONCAT
- S_CONST_EXPR = 37, // CONST_EXPR
- S_CONVERT = 38, // CONVERT
- S_COS = 39, // COS
- S_COSH = 40, // COSH
- S_DATE_FROM_STRING = 41, // DATE_FROM_STRING
- S_DATE_TO_STRING = 42, // DATE_TO_STRING
- S_DECIMAL_NEGATIVE_ONE = 43, // "-1 (decimal)"
- S_DECIMAL_ONE = 44, // "1 (decimal)"
- S_DECIMAL_ZERO = 45, // "zero (decimal)"
- S_DEGREES_TO_RADIANS = 46, // DEGREES_TO_RADIANS
- S_DIVIDE = 47, // DIVIDE
- S_DOUBLE_NEGATIVE_ONE = 48, // "-1 (double)"
- S_DOUBLE_ONE = 49, // "1 (double)"
- S_DOUBLE_ZERO = 50, // "zero (double)"
- S_END_ARRAY = 51, // "end of array"
- S_END_OBJECT = 52, // "end of object"
- S_EQ = 53, // EQ
- S_EXISTS = 54, // EXISTS
- S_EXPONENT = 55, // EXPONENT
- S_FLOOR = 56, // FLOOR
- S_GEO_NEAR_DISTANCE = 57, // "geoNearDistance"
- S_GEO_NEAR_POINT = 58, // "geoNearPoint"
- S_GT = 59, // GT
- S_GTE = 60, // GTE
- S_ID = 61, // ID
- S_INDEX_OF_BYTES = 62, // INDEX_OF_BYTES
- S_INDEX_OF_CP = 63, // INDEX_OF_CP
- S_INDEX_KEY = 64, // "indexKey"
- S_INT_NEGATIVE_ONE = 65, // "-1 (int)"
- S_INT_ONE = 66, // "1 (int)"
- S_INT_ZERO = 67, // "zero (int)"
- S_LITERAL = 68, // LITERAL
- S_LN = 69, // LN
- S_LOG = 70, // LOG
- S_LOGTEN = 71, // LOGTEN
- S_LONG_NEGATIVE_ONE = 72, // "-1 (long)"
- S_LONG_ONE = 73, // "1 (long)"
- S_LONG_ZERO = 74, // "zero (long)"
- S_LT = 75, // LT
- S_LTE = 76, // LTE
- S_LTRIM = 77, // LTRIM
- S_META = 78, // META
- S_MOD = 79, // MOD
- S_MULTIPLY = 80, // MULTIPLY
- S_NE = 81, // NE
- S_NOR = 82, // NOR
- S_NOT = 83, // NOT
- S_OR = 84, // OR
- S_POW = 85, // POW
- S_RADIANS_TO_DEGREES = 86, // RADIANS_TO_DEGREES
- S_RAND_VAL = 87, // "randVal"
- S_RECORD_ID = 88, // "recordId"
- S_REGEX_FIND = 89, // REGEX_FIND
- S_REGEX_FIND_ALL = 90, // REGEX_FIND_ALL
- S_REGEX_MATCH = 91, // REGEX_MATCH
- S_REPLACE_ALL = 92, // REPLACE_ALL
- S_REPLACE_ONE = 93, // REPLACE_ONE
- S_ROUND = 94, // ROUND
- S_RTRIM = 95, // RTRIM
- S_SEARCH_HIGHLIGHTS = 96, // "searchHighlights"
- S_SEARCH_SCORE = 97, // "searchScore"
- S_SET_DIFFERENCE = 98, // "setDifference"
- S_SET_EQUALS = 99, // "setEquals"
- S_SET_INTERSECTION = 100, // "setIntersection"
- S_SET_IS_SUBSET = 101, // "setIsSubset"
- S_SET_UNION = 102, // "setUnion"
- S_SLICE = 103, // "slice"
- S_SORT_KEY = 104, // "sortKey"
- S_SIN = 105, // SIN
- S_SINH = 106, // SINH
- S_SPLIT = 107, // SPLIT
- S_SQRT = 108, // SQRT
- S_STAGE_INHIBIT_OPTIMIZATION = 109, // STAGE_INHIBIT_OPTIMIZATION
- S_STAGE_LIMIT = 110, // STAGE_LIMIT
- S_STAGE_PROJECT = 111, // STAGE_PROJECT
- S_STAGE_SAMPLE = 112, // STAGE_SAMPLE
- S_STAGE_SKIP = 113, // STAGE_SKIP
- S_STAGE_UNION_WITH = 114, // STAGE_UNION_WITH
- S_START_ARRAY = 115, // "array"
- S_START_OBJECT = 116, // "object"
- S_STR_CASE_CMP = 117, // STR_CASE_CMP
- S_STR_LEN_BYTES = 118, // STR_LEN_BYTES
- S_STR_LEN_CP = 119, // STR_LEN_CP
- S_SUBSTR = 120, // SUBSTR
- S_SUBSTR_BYTES = 121, // SUBSTR_BYTES
- S_SUBSTR_CP = 122, // SUBSTR_CP
- S_SUBTRACT = 123, // SUBTRACT
- S_TAN = 124, // TAN
- S_TANH = 125, // TANH
- S_TEXT_SCORE = 126, // "textScore"
- S_TO_BOOL = 127, // TO_BOOL
- S_TO_DATE = 128, // TO_DATE
- S_TO_DECIMAL = 129, // TO_DECIMAL
- S_TO_DOUBLE = 130, // TO_DOUBLE
- S_TO_INT = 131, // TO_INT
- S_TO_LONG = 132, // TO_LONG
- S_TO_LOWER = 133, // TO_LOWER
- S_TO_OBJECT_ID = 134, // TO_OBJECT_ID
- S_TO_STRING = 135, // TO_STRING
- S_TO_UPPER = 136, // TO_UPPER
- S_TRIM = 137, // TRIM
- S_TRUNC = 138, // TRUNC
- S_TYPE = 139, // TYPE
- S_FIELDNAME = 140, // "fieldname"
- S_DOTTED_FIELDNAME = 141, // "fieldname containing dotted path"
- S_DOLLAR_PREF_FIELDNAME = 142, // "$-prefixed fieldname"
- S_STRING = 143, // "string"
- S_DOLLAR_STRING = 144, // "$-prefixed string"
- S_DOLLAR_DOLLAR_STRING = 145, // "$$-prefixed string"
- S_BINARY = 146, // "BinData"
- S_UNDEFINED = 147, // "undefined"
- S_OBJECT_ID = 148, // "ObjectID"
- S_DATE_LITERAL = 149, // "Date"
- S_JSNULL = 150, // "null"
- S_REGEX = 151, // "regex"
- S_DB_POINTER = 152, // "dbPointer"
- S_JAVASCRIPT = 153, // "Code"
- S_SYMBOL = 154, // "Symbol"
- S_JAVASCRIPT_W_SCOPE = 155, // "CodeWScope"
- S_INT_OTHER = 156, // "arbitrary integer"
- S_LONG_OTHER = 157, // "arbitrary long"
- S_DOUBLE_OTHER = 158, // "arbitrary double"
- S_DECIMAL_OTHER = 159, // "arbitrary decimal"
- S_TIMESTAMP = 160, // "Timestamp"
- S_MIN_KEY = 161, // "minKey"
- S_MAX_KEY = 162, // "maxKey"
- S_START_PIPELINE = 163, // START_PIPELINE
- S_START_MATCH = 164, // START_MATCH
- S_START_SORT = 165, // START_SORT
- S_YYACCEPT = 166, // $accept
- S_aggregationProjectionFieldname = 167, // aggregationProjectionFieldname
- S_projectionFieldname = 168, // projectionFieldname
- S_expressionFieldname = 169, // expressionFieldname
- S_stageAsUserFieldname = 170, // stageAsUserFieldname
- S_argAsUserFieldname = 171, // argAsUserFieldname
- S_argAsProjectionPath = 172, // argAsProjectionPath
- S_aggExprAsUserFieldname = 173, // aggExprAsUserFieldname
- S_invariableUserFieldname = 174, // invariableUserFieldname
- S_sortFieldname = 175, // sortFieldname
- S_idAsUserFieldname = 176, // idAsUserFieldname
- S_idAsProjectionPath = 177, // idAsProjectionPath
- S_valueFieldname = 178, // valueFieldname
- S_predFieldname = 179, // predFieldname
- S_projectField = 180, // projectField
- S_projectionObjectField = 181, // projectionObjectField
- S_expressionField = 182, // expressionField
- S_valueField = 183, // valueField
- S_arg = 184, // arg
- S_dbPointer = 185, // dbPointer
- S_javascript = 186, // javascript
- S_symbol = 187, // symbol
- S_javascriptWScope = 188, // javascriptWScope
- S_int = 189, // int
- S_timestamp = 190, // timestamp
- S_long = 191, // long
- S_double = 192, // double
- S_decimal = 193, // decimal
- S_minKey = 194, // minKey
- S_maxKey = 195, // maxKey
- S_value = 196, // value
- S_string = 197, // string
- S_aggregationFieldPath = 198, // aggregationFieldPath
- S_binary = 199, // binary
- S_undefined = 200, // undefined
- S_objectId = 201, // objectId
- S_bool = 202, // bool
- S_date = 203, // date
- S_null = 204, // null
- S_regex = 205, // regex
- S_simpleValue = 206, // simpleValue
- S_compoundValue = 207, // compoundValue
- S_valueArray = 208, // valueArray
- S_valueObject = 209, // valueObject
- S_valueFields = 210, // valueFields
- S_variable = 211, // variable
- S_typeArray = 212, // typeArray
- S_typeValue = 213, // typeValue
- S_pipeline = 214, // pipeline
- S_stageList = 215, // stageList
- S_stage = 216, // stage
- S_inhibitOptimization = 217, // inhibitOptimization
- S_unionWith = 218, // unionWith
- S_skip = 219, // skip
- S_limit = 220, // limit
- S_project = 221, // project
- S_sample = 222, // sample
- S_projectFields = 223, // projectFields
- S_projectionObjectFields = 224, // projectionObjectFields
- S_topLevelProjection = 225, // topLevelProjection
- S_projection = 226, // projection
- S_projectionObject = 227, // projectionObject
- S_num = 228, // num
- S_expression = 229, // expression
- S_compoundNonObjectExpression = 230, // compoundNonObjectExpression
- S_exprFixedTwoArg = 231, // exprFixedTwoArg
- S_exprFixedThreeArg = 232, // exprFixedThreeArg
- S_arrayManipulation = 233, // arrayManipulation
- S_slice = 234, // slice
- S_expressionArray = 235, // expressionArray
- S_expressionObject = 236, // expressionObject
- S_expressionFields = 237, // expressionFields
- S_maths = 238, // maths
- S_meta = 239, // meta
- S_add = 240, // add
- S_boolExprs = 241, // boolExprs
- S_and = 242, // and
- S_or = 243, // or
- S_not = 244, // not
- S_literalEscapes = 245, // literalEscapes
- S_const = 246, // const
- S_literal = 247, // literal
- S_stringExps = 248, // stringExps
- S_concat = 249, // concat
- S_dateFromString = 250, // dateFromString
- S_dateToString = 251, // dateToString
- S_indexOfBytes = 252, // indexOfBytes
- S_indexOfCP = 253, // indexOfCP
- S_ltrim = 254, // ltrim
- S_regexFind = 255, // regexFind
- S_regexFindAll = 256, // regexFindAll
- S_regexMatch = 257, // regexMatch
- S_regexArgs = 258, // regexArgs
- S_replaceOne = 259, // replaceOne
- S_replaceAll = 260, // replaceAll
- S_rtrim = 261, // rtrim
- S_split = 262, // split
- S_strLenBytes = 263, // strLenBytes
- S_strLenCP = 264, // strLenCP
- S_strcasecmp = 265, // strcasecmp
- S_substr = 266, // substr
- S_substrBytes = 267, // substrBytes
- S_substrCP = 268, // substrCP
- S_toLower = 269, // toLower
- S_toUpper = 270, // toUpper
- S_trim = 271, // trim
- S_compExprs = 272, // compExprs
- S_cmp = 273, // cmp
- S_eq = 274, // eq
- S_gt = 275, // gt
- S_gte = 276, // gte
- S_lt = 277, // lt
- S_lte = 278, // lte
- S_ne = 279, // ne
- S_typeExpression = 280, // typeExpression
- S_convert = 281, // convert
- S_toBool = 282, // toBool
- S_toDate = 283, // toDate
- S_toDecimal = 284, // toDecimal
- S_toDouble = 285, // toDouble
- S_toInt = 286, // toInt
- S_toLong = 287, // toLong
- S_toObjectId = 288, // toObjectId
- S_toString = 289, // toString
- S_type = 290, // type
- S_abs = 291, // abs
- S_ceil = 292, // ceil
- S_divide = 293, // divide
- S_exponent = 294, // exponent
- S_floor = 295, // floor
- S_ln = 296, // ln
- S_log = 297, // log
- S_logten = 298, // logten
- S_mod = 299, // mod
- S_multiply = 300, // multiply
- S_pow = 301, // pow
- S_round = 302, // round
- S_sqrt = 303, // sqrt
- S_subtract = 304, // subtract
- S_trunc = 305, // trunc
- S_onErrorArg = 306, // onErrorArg
- S_onNullArg = 307, // onNullArg
- S_formatArg = 308, // formatArg
- S_timezoneArg = 309, // timezoneArg
- S_charsArg = 310, // charsArg
- S_optionsArg = 311, // optionsArg
- S_expressions = 312, // expressions
- S_values = 313, // values
- S_exprZeroToTwo = 314, // exprZeroToTwo
- S_setExpression = 315, // setExpression
- S_allElementsTrue = 316, // allElementsTrue
- S_anyElementTrue = 317, // anyElementTrue
- S_setDifference = 318, // setDifference
- S_setEquals = 319, // setEquals
- S_setIntersection = 320, // setIntersection
- S_setIsSubset = 321, // setIsSubset
- S_setUnion = 322, // setUnion
- S_trig = 323, // trig
- S_sin = 324, // sin
- S_cos = 325, // cos
- S_tan = 326, // tan
- S_sinh = 327, // sinh
- S_cosh = 328, // cosh
- S_tanh = 329, // tanh
- S_asin = 330, // asin
- S_acos = 331, // acos
- S_atan = 332, // atan
- S_asinh = 333, // asinh
- S_acosh = 334, // acosh
- S_atanh = 335, // atanh
- S_atan2 = 336, // atan2
- S_degreesToRadians = 337, // degreesToRadians
- S_radiansToDegrees = 338, // radiansToDegrees
- S_nonArrayExpression = 339, // nonArrayExpression
- S_nonArrayCompoundExpression = 340, // nonArrayCompoundExpression
- S_nonArrayNonObjCompoundExpression = 341, // nonArrayNonObjCompoundExpression
- S_expressionSingletonArray = 342, // expressionSingletonArray
- S_singleArgExpression = 343, // singleArgExpression
- S_match = 344, // match
- S_predicates = 345, // predicates
- S_compoundMatchExprs = 346, // compoundMatchExprs
- S_predValue = 347, // predValue
- S_additionalExprs = 348, // additionalExprs
- S_predicate = 349, // predicate
- S_logicalExpr = 350, // logicalExpr
- S_operatorExpression = 351, // operatorExpression
- S_notExpr = 352, // notExpr
- S_existsExpr = 353, // existsExpr
- S_typeExpr = 354, // typeExpr
- S_commentExpr = 355, // commentExpr
- S_logicalExprField = 356, // logicalExprField
- S_typeValues = 357, // typeValues
- S_sortSpecs = 358, // sortSpecs
- S_specList = 359, // specList
- S_metaSort = 360, // metaSort
- S_oneOrNegOne = 361, // oneOrNegOne
- S_metaSortKeyword = 362, // metaSortKeyword
- S_sortSpec = 363, // sortSpec
- S_start = 364, // start
- S_START_ORDERED_OBJECT = 365, // START_ORDERED_OBJECT
- S_366_1 = 366 // $@1
+ S_ARG_DAY = 14, // "day argument"
+ S_ARG_FILTER = 15, // "filter"
+ S_ARG_FIND = 16, // "find argument"
+ S_ARG_FORMAT = 17, // "format argument"
+ S_ARG_HOUR = 18, // "hour argument"
+ S_ARG_INPUT = 19, // "input argument"
+ S_ARG_ISO_8601 = 20, // "ISO 8601 argument"
+ S_ARG_ISO_DAY_OF_WEEK = 21, // "ISO day of week argument"
+ S_ARG_ISO_WEEK = 22, // "ISO week argument"
+ S_ARG_ISO_WEEK_YEAR = 23, // "ISO week year argument"
+ S_ARG_MILLISECOND = 24, // "millisecond argument"
+ S_ARG_MINUTE = 25, // "minute argument"
+ S_ARG_MONTH = 26, // "month argument"
+ S_ARG_ON_ERROR = 27, // "onError argument"
+ S_ARG_ON_NULL = 28, // "onNull argument"
+ S_ARG_OPTIONS = 29, // "options argument"
+ S_ARG_PIPELINE = 30, // "pipeline argument"
+ S_ARG_REGEX = 31, // "regex argument"
+ S_ARG_REPLACEMENT = 32, // "replacement argument"
+ S_ARG_SECOND = 33, // "second argument"
+ S_ARG_SIZE = 34, // "size argument"
+ S_ARG_TIMEZONE = 35, // "timezone argument"
+ S_ARG_TO = 36, // "to argument"
+ S_ASIN = 37, // ASIN
+ S_ASINH = 38, // ASINH
+ S_ATAN = 39, // ATAN
+ S_ARG_YEAR = 40, // "year argument"
+ S_ATAN2 = 41, // ATAN2
+ S_ATANH = 42, // ATANH
+ S_BOOL_FALSE = 43, // "false"
+ S_BOOL_TRUE = 44, // "true"
+ S_CEIL = 45, // CEIL
+ S_COMMENT = 46, // COMMENT
+ S_CMP = 47, // CMP
+ S_CONCAT = 48, // CONCAT
+ S_CONST_EXPR = 49, // CONST_EXPR
+ S_CONVERT = 50, // CONVERT
+ S_COS = 51, // COS
+ S_COSH = 52, // COSH
+ S_DATE_FROM_PARTS = 53, // DATE_FROM_PARTS
+ S_DATE_FROM_STRING = 54, // DATE_FROM_STRING
+ S_DATE_TO_PARTS = 55, // DATE_TO_PARTS
+ S_DATE_TO_STRING = 56, // DATE_TO_STRING
+ S_DAY_OF_MONTH = 57, // DAY_OF_MONTH
+ S_DAY_OF_WEEK = 58, // DAY_OF_WEEK
+ S_DAY_OF_YEAR = 59, // DAY_OF_YEAR
+ S_DECIMAL_NEGATIVE_ONE = 60, // "-1 (decimal)"
+ S_DECIMAL_ONE = 61, // "1 (decimal)"
+ S_DECIMAL_ZERO = 62, // "zero (decimal)"
+ S_DEGREES_TO_RADIANS = 63, // DEGREES_TO_RADIANS
+ S_DIVIDE = 64, // DIVIDE
+ S_DOUBLE_NEGATIVE_ONE = 65, // "-1 (double)"
+ S_DOUBLE_ONE = 66, // "1 (double)"
+ S_DOUBLE_ZERO = 67, // "zero (double)"
+ S_END_ARRAY = 68, // "end of array"
+ S_END_OBJECT = 69, // "end of object"
+ S_EQ = 70, // EQ
+ S_EXISTS = 71, // EXISTS
+ S_EXPONENT = 72, // EXPONENT
+ S_FLOOR = 73, // FLOOR
+ S_GEO_NEAR_DISTANCE = 74, // "geoNearDistance"
+ S_GEO_NEAR_POINT = 75, // "geoNearPoint"
+ S_GT = 76, // GT
+ S_GTE = 77, // GTE
+ S_HOUR = 78, // HOUR
+ S_ID = 79, // ID
+ S_INDEX_OF_BYTES = 80, // INDEX_OF_BYTES
+ S_INDEX_OF_CP = 81, // INDEX_OF_CP
+ S_INDEX_KEY = 82, // "indexKey"
+ S_INT_NEGATIVE_ONE = 83, // "-1 (int)"
+ S_INT_ONE = 84, // "1 (int)"
+ S_INT_ZERO = 85, // "zero (int)"
+ S_ISO_DAY_OF_WEEK = 86, // ISO_DAY_OF_WEEK
+ S_ISO_WEEK = 87, // ISO_WEEK
+ S_ISO_WEEK_YEAR = 88, // ISO_WEEK_YEAR
+ S_LITERAL = 89, // LITERAL
+ S_LN = 90, // LN
+ S_LOG = 91, // LOG
+ S_LOGTEN = 92, // LOGTEN
+ S_LONG_NEGATIVE_ONE = 93, // "-1 (long)"
+ S_LONG_ONE = 94, // "1 (long)"
+ S_LONG_ZERO = 95, // "zero (long)"
+ S_LT = 96, // LT
+ S_LTE = 97, // LTE
+ S_LTRIM = 98, // LTRIM
+ S_META = 99, // META
+ S_MILLISECOND = 100, // MILLISECOND
+ S_MINUTE = 101, // MINUTE
+ S_MOD = 102, // MOD
+ S_MONTH = 103, // MONTH
+ S_MULTIPLY = 104, // MULTIPLY
+ S_NE = 105, // NE
+ S_NOR = 106, // NOR
+ S_NOT = 107, // NOT
+ S_OR = 108, // OR
+ S_POW = 109, // POW
+ S_RADIANS_TO_DEGREES = 110, // RADIANS_TO_DEGREES
+ S_RAND_VAL = 111, // "randVal"
+ S_RECORD_ID = 112, // "recordId"
+ S_REGEX_FIND = 113, // REGEX_FIND
+ S_REGEX_FIND_ALL = 114, // REGEX_FIND_ALL
+ S_REGEX_MATCH = 115, // REGEX_MATCH
+ S_REPLACE_ALL = 116, // REPLACE_ALL
+ S_REPLACE_ONE = 117, // REPLACE_ONE
+ S_ROUND = 118, // ROUND
+ S_RTRIM = 119, // RTRIM
+ S_SEARCH_HIGHLIGHTS = 120, // "searchHighlights"
+ S_SEARCH_SCORE = 121, // "searchScore"
+ S_SECOND = 122, // SECOND
+ S_SET_DIFFERENCE = 123, // "setDifference"
+ S_SET_EQUALS = 124, // "setEquals"
+ S_SET_INTERSECTION = 125, // "setIntersection"
+ S_SET_IS_SUBSET = 126, // "setIsSubset"
+ S_SET_UNION = 127, // "setUnion"
+ S_SLICE = 128, // "slice"
+ S_SORT_KEY = 129, // "sortKey"
+ S_SIN = 130, // SIN
+ S_SINH = 131, // SINH
+ S_SPLIT = 132, // SPLIT
+ S_SQRT = 133, // SQRT
+ S_STAGE_INHIBIT_OPTIMIZATION = 134, // STAGE_INHIBIT_OPTIMIZATION
+ S_STAGE_LIMIT = 135, // STAGE_LIMIT
+ S_STAGE_PROJECT = 136, // STAGE_PROJECT
+ S_STAGE_SAMPLE = 137, // STAGE_SAMPLE
+ S_STAGE_SKIP = 138, // STAGE_SKIP
+ S_STAGE_UNION_WITH = 139, // STAGE_UNION_WITH
+ S_START_ARRAY = 140, // "array"
+ S_START_OBJECT = 141, // "object"
+ S_STR_CASE_CMP = 142, // STR_CASE_CMP
+ S_STR_LEN_BYTES = 143, // STR_LEN_BYTES
+ S_STR_LEN_CP = 144, // STR_LEN_CP
+ S_SUBSTR = 145, // SUBSTR
+ S_SUBSTR_BYTES = 146, // SUBSTR_BYTES
+ S_SUBSTR_CP = 147, // SUBSTR_CP
+ S_SUBTRACT = 148, // SUBTRACT
+ S_TAN = 149, // TAN
+ S_TANH = 150, // TANH
+ S_TEXT_SCORE = 151, // "textScore"
+ S_TO_BOOL = 152, // TO_BOOL
+ S_TO_DATE = 153, // TO_DATE
+ S_TO_DECIMAL = 154, // TO_DECIMAL
+ S_TO_DOUBLE = 155, // TO_DOUBLE
+ S_TO_INT = 156, // TO_INT
+ S_TO_LONG = 157, // TO_LONG
+ S_TO_LOWER = 158, // TO_LOWER
+ S_TO_OBJECT_ID = 159, // TO_OBJECT_ID
+ S_TO_STRING = 160, // TO_STRING
+ S_TO_UPPER = 161, // TO_UPPER
+ S_TRIM = 162, // TRIM
+ S_TRUNC = 163, // TRUNC
+ S_TYPE = 164, // TYPE
+ S_WEEK = 165, // WEEK
+ S_YEAR = 166, // YEAR
+ S_FIELDNAME = 167, // "fieldname"
+ S_DOTTED_FIELDNAME = 168, // "fieldname containing dotted path"
+ S_DOLLAR_PREF_FIELDNAME = 169, // "$-prefixed fieldname"
+ S_STRING = 170, // "string"
+ S_DOLLAR_STRING = 171, // "$-prefixed string"
+ S_DOLLAR_DOLLAR_STRING = 172, // "$$-prefixed string"
+ S_BINARY = 173, // "BinData"
+ S_UNDEFINED = 174, // "undefined"
+ S_OBJECT_ID = 175, // "ObjectID"
+ S_DATE_LITERAL = 176, // "Date"
+ S_JSNULL = 177, // "null"
+ S_REGEX = 178, // "regex"
+ S_DB_POINTER = 179, // "dbPointer"
+ S_JAVASCRIPT = 180, // "Code"
+ S_SYMBOL = 181, // "Symbol"
+ S_JAVASCRIPT_W_SCOPE = 182, // "CodeWScope"
+ S_INT_OTHER = 183, // "arbitrary integer"
+ S_LONG_OTHER = 184, // "arbitrary long"
+ S_DOUBLE_OTHER = 185, // "arbitrary double"
+ S_DECIMAL_OTHER = 186, // "arbitrary decimal"
+ S_TIMESTAMP = 187, // "Timestamp"
+ S_MIN_KEY = 188, // "minKey"
+ S_MAX_KEY = 189, // "maxKey"
+ S_START_PIPELINE = 190, // START_PIPELINE
+ S_START_MATCH = 191, // START_MATCH
+ S_START_SORT = 192, // START_SORT
+ S_YYACCEPT = 193, // $accept
+ S_aggregationProjectionFieldname = 194, // aggregationProjectionFieldname
+ S_projectionFieldname = 195, // projectionFieldname
+ S_expressionFieldname = 196, // expressionFieldname
+ S_stageAsUserFieldname = 197, // stageAsUserFieldname
+ S_argAsUserFieldname = 198, // argAsUserFieldname
+ S_argAsProjectionPath = 199, // argAsProjectionPath
+ S_aggExprAsUserFieldname = 200, // aggExprAsUserFieldname
+ S_invariableUserFieldname = 201, // invariableUserFieldname
+ S_sortFieldname = 202, // sortFieldname
+ S_idAsUserFieldname = 203, // idAsUserFieldname
+ S_idAsProjectionPath = 204, // idAsProjectionPath
+ S_valueFieldname = 205, // valueFieldname
+ S_predFieldname = 206, // predFieldname
+ S_projectField = 207, // projectField
+ S_projectionObjectField = 208, // projectionObjectField
+ S_expressionField = 209, // expressionField
+ S_valueField = 210, // valueField
+ S_arg = 211, // arg
+ S_dbPointer = 212, // dbPointer
+ S_javascript = 213, // javascript
+ S_symbol = 214, // symbol
+ S_javascriptWScope = 215, // javascriptWScope
+ S_int = 216, // int
+ S_timestamp = 217, // timestamp
+ S_long = 218, // long
+ S_double = 219, // double
+ S_decimal = 220, // decimal
+ S_minKey = 221, // minKey
+ S_maxKey = 222, // maxKey
+ S_value = 223, // value
+ S_string = 224, // string
+ S_aggregationFieldPath = 225, // aggregationFieldPath
+ S_binary = 226, // binary
+ S_undefined = 227, // undefined
+ S_objectId = 228, // objectId
+ S_bool = 229, // bool
+ S_date = 230, // date
+ S_null = 231, // null
+ S_regex = 232, // regex
+ S_simpleValue = 233, // simpleValue
+ S_compoundValue = 234, // compoundValue
+ S_valueArray = 235, // valueArray
+ S_valueObject = 236, // valueObject
+ S_valueFields = 237, // valueFields
+ S_variable = 238, // variable
+ S_typeArray = 239, // typeArray
+ S_typeValue = 240, // typeValue
+ S_pipeline = 241, // pipeline
+ S_stageList = 242, // stageList
+ S_stage = 243, // stage
+ S_inhibitOptimization = 244, // inhibitOptimization
+ S_unionWith = 245, // unionWith
+ S_skip = 246, // skip
+ S_limit = 247, // limit
+ S_project = 248, // project
+ S_sample = 249, // sample
+ S_projectFields = 250, // projectFields
+ S_projectionObjectFields = 251, // projectionObjectFields
+ S_topLevelProjection = 252, // topLevelProjection
+ S_projection = 253, // projection
+ S_projectionObject = 254, // projectionObject
+ S_num = 255, // num
+ S_expression = 256, // expression
+ S_compoundNonObjectExpression = 257, // compoundNonObjectExpression
+ S_exprFixedTwoArg = 258, // exprFixedTwoArg
+ S_exprFixedThreeArg = 259, // exprFixedThreeArg
+ S_arrayManipulation = 260, // arrayManipulation
+ S_slice = 261, // slice
+ S_expressionArray = 262, // expressionArray
+ S_expressionObject = 263, // expressionObject
+ S_expressionFields = 264, // expressionFields
+ S_maths = 265, // maths
+ S_meta = 266, // meta
+ S_add = 267, // add
+ S_boolExprs = 268, // boolExprs
+ S_and = 269, // and
+ S_or = 270, // or
+ S_not = 271, // not
+ S_literalEscapes = 272, // literalEscapes
+ S_const = 273, // const
+ S_literal = 274, // literal
+ S_stringExps = 275, // stringExps
+ S_concat = 276, // concat
+ S_dateFromString = 277, // dateFromString
+ S_dateToString = 278, // dateToString
+ S_indexOfBytes = 279, // indexOfBytes
+ S_indexOfCP = 280, // indexOfCP
+ S_ltrim = 281, // ltrim
+ S_regexFind = 282, // regexFind
+ S_regexFindAll = 283, // regexFindAll
+ S_regexMatch = 284, // regexMatch
+ S_regexArgs = 285, // regexArgs
+ S_replaceOne = 286, // replaceOne
+ S_replaceAll = 287, // replaceAll
+ S_rtrim = 288, // rtrim
+ S_split = 289, // split
+ S_strLenBytes = 290, // strLenBytes
+ S_strLenCP = 291, // strLenCP
+ S_strcasecmp = 292, // strcasecmp
+ S_substr = 293, // substr
+ S_substrBytes = 294, // substrBytes
+ S_substrCP = 295, // substrCP
+ S_toLower = 296, // toLower
+ S_toUpper = 297, // toUpper
+ S_trim = 298, // trim
+ S_compExprs = 299, // compExprs
+ S_cmp = 300, // cmp
+ S_eq = 301, // eq
+ S_gt = 302, // gt
+ S_gte = 303, // gte
+ S_lt = 304, // lt
+ S_lte = 305, // lte
+ S_ne = 306, // ne
+ S_dateExps = 307, // dateExps
+ S_dateFromParts = 308, // dateFromParts
+ S_dateToParts = 309, // dateToParts
+ S_dayOfMonth = 310, // dayOfMonth
+ S_dayOfWeek = 311, // dayOfWeek
+ S_dayOfYear = 312, // dayOfYear
+ S_hour = 313, // hour
+ S_isoDayOfWeek = 314, // isoDayOfWeek
+ S_isoWeek = 315, // isoWeek
+ S_isoWeekYear = 316, // isoWeekYear
+ S_millisecond = 317, // millisecond
+ S_minute = 318, // minute
+ S_month = 319, // month
+ S_second = 320, // second
+ S_week = 321, // week
+ S_year = 322, // year
+ S_typeExpression = 323, // typeExpression
+ S_convert = 324, // convert
+ S_toBool = 325, // toBool
+ S_toDate = 326, // toDate
+ S_toDecimal = 327, // toDecimal
+ S_toDouble = 328, // toDouble
+ S_toInt = 329, // toInt
+ S_toLong = 330, // toLong
+ S_toObjectId = 331, // toObjectId
+ S_toString = 332, // toString
+ S_type = 333, // type
+ S_abs = 334, // abs
+ S_ceil = 335, // ceil
+ S_divide = 336, // divide
+ S_exponent = 337, // exponent
+ S_floor = 338, // floor
+ S_ln = 339, // ln
+ S_log = 340, // log
+ S_logten = 341, // logten
+ S_mod = 342, // mod
+ S_multiply = 343, // multiply
+ S_pow = 344, // pow
+ S_round = 345, // round
+ S_sqrt = 346, // sqrt
+ S_subtract = 347, // subtract
+ S_trunc = 348, // trunc
+ S_onErrorArg = 349, // onErrorArg
+ S_onNullArg = 350, // onNullArg
+ S_formatArg = 351, // formatArg
+ S_timezoneArg = 352, // timezoneArg
+ S_charsArg = 353, // charsArg
+ S_optionsArg = 354, // optionsArg
+ S_hourArg = 355, // hourArg
+ S_minuteArg = 356, // minuteArg
+ S_secondArg = 357, // secondArg
+ S_millisecondArg = 358, // millisecondArg
+ S_dayArg = 359, // dayArg
+ S_isoWeekArg = 360, // isoWeekArg
+ S_iso8601Arg = 361, // iso8601Arg
+ S_monthArg = 362, // monthArg
+ S_isoDayOfWeekArg = 363, // isoDayOfWeekArg
+ S_expressions = 364, // expressions
+ S_values = 365, // values
+ S_exprZeroToTwo = 366, // exprZeroToTwo
+ S_setExpression = 367, // setExpression
+ S_allElementsTrue = 368, // allElementsTrue
+ S_anyElementTrue = 369, // anyElementTrue
+ S_setDifference = 370, // setDifference
+ S_setEquals = 371, // setEquals
+ S_setIntersection = 372, // setIntersection
+ S_setIsSubset = 373, // setIsSubset
+ S_setUnion = 374, // setUnion
+ S_trig = 375, // trig
+ S_sin = 376, // sin
+ S_cos = 377, // cos
+ S_tan = 378, // tan
+ S_sinh = 379, // sinh
+ S_cosh = 380, // cosh
+ S_tanh = 381, // tanh
+ S_asin = 382, // asin
+ S_acos = 383, // acos
+ S_atan = 384, // atan
+ S_asinh = 385, // asinh
+ S_acosh = 386, // acosh
+ S_atanh = 387, // atanh
+ S_atan2 = 388, // atan2
+ S_degreesToRadians = 389, // degreesToRadians
+ S_radiansToDegrees = 390, // radiansToDegrees
+ S_nonArrayExpression = 391, // nonArrayExpression
+ S_nonArrayCompoundExpression = 392, // nonArrayCompoundExpression
+ S_nonArrayNonObjCompoundExpression = 393, // nonArrayNonObjCompoundExpression
+ S_expressionSingletonArray = 394, // expressionSingletonArray
+ S_singleArgExpression = 395, // singleArgExpression
+ S_nonArrayNonObjExpression = 396, // nonArrayNonObjExpression
+ S_match = 397, // match
+ S_predicates = 398, // predicates
+ S_compoundMatchExprs = 399, // compoundMatchExprs
+ S_predValue = 400, // predValue
+ S_additionalExprs = 401, // additionalExprs
+ S_predicate = 402, // predicate
+ S_logicalExpr = 403, // logicalExpr
+ S_operatorExpression = 404, // operatorExpression
+ S_notExpr = 405, // notExpr
+ S_existsExpr = 406, // existsExpr
+ S_typeExpr = 407, // typeExpr
+ S_commentExpr = 408, // commentExpr
+ S_logicalExprField = 409, // logicalExprField
+ S_typeValues = 410, // typeValues
+ S_sortSpecs = 411, // sortSpecs
+ S_specList = 412, // specList
+ S_metaSort = 413, // metaSort
+ S_oneOrNegOne = 414, // oneOrNegOne
+ S_metaSortKeyword = 415, // metaSortKeyword
+ S_sortSpec = 416, // sortSpec
+ S_start = 417, // start
+ S_START_ORDERED_OBJECT = 418 // START_ORDERED_OBJECT
};
};
@@ -1366,6 +1471,22 @@ public:
case symbol_kind::S_lt: // lt
case symbol_kind::S_lte: // lte
case symbol_kind::S_ne: // ne
+ case symbol_kind::S_dateExps: // dateExps
+ case symbol_kind::S_dateFromParts: // dateFromParts
+ case symbol_kind::S_dateToParts: // dateToParts
+ case symbol_kind::S_dayOfMonth: // dayOfMonth
+ case symbol_kind::S_dayOfWeek: // dayOfWeek
+ case symbol_kind::S_dayOfYear: // dayOfYear
+ case symbol_kind::S_hour: // hour
+ case symbol_kind::S_isoDayOfWeek: // isoDayOfWeek
+ case symbol_kind::S_isoWeek: // isoWeek
+ case symbol_kind::S_isoWeekYear: // isoWeekYear
+ case symbol_kind::S_millisecond: // millisecond
+ case symbol_kind::S_minute: // minute
+ case symbol_kind::S_month: // month
+ case symbol_kind::S_second: // second
+ case symbol_kind::S_week: // week
+ case symbol_kind::S_year: // year
case symbol_kind::S_typeExpression: // typeExpression
case symbol_kind::S_convert: // convert
case symbol_kind::S_toBool: // toBool
@@ -1422,6 +1543,7 @@ public:
S_nonArrayNonObjCompoundExpression: // nonArrayNonObjCompoundExpression
case symbol_kind::S_expressionSingletonArray: // expressionSingletonArray
case symbol_kind::S_singleArgExpression: // singleArgExpression
+ case symbol_kind::S_nonArrayNonObjExpression: // nonArrayNonObjExpression
case symbol_kind::S_match: // match
case symbol_kind::S_predicates: // predicates
case symbol_kind::S_compoundMatchExprs: // compoundMatchExprs
@@ -1507,6 +1629,15 @@ public:
case symbol_kind::S_timezoneArg: // timezoneArg
case symbol_kind::S_charsArg: // charsArg
case symbol_kind::S_optionsArg: // optionsArg
+ case symbol_kind::S_hourArg: // hourArg
+ case symbol_kind::S_minuteArg: // minuteArg
+ case symbol_kind::S_secondArg: // secondArg
+ case symbol_kind::S_millisecondArg: // millisecondArg
+ case symbol_kind::S_dayArg: // dayArg
+ case symbol_kind::S_isoWeekArg: // isoWeekArg
+ case symbol_kind::S_iso8601Arg: // iso8601Arg
+ case symbol_kind::S_monthArg: // monthArg
+ case symbol_kind::S_isoDayOfWeekArg: // isoDayOfWeekArg
case symbol_kind::S_predicate: // predicate
case symbol_kind::S_logicalExpr: // logicalExpr
case symbol_kind::S_operatorExpression: // operatorExpression
@@ -1861,6 +1992,22 @@ public:
case symbol_kind::S_lt: // lt
case symbol_kind::S_lte: // lte
case symbol_kind::S_ne: // ne
+ case symbol_kind::S_dateExps: // dateExps
+ case symbol_kind::S_dateFromParts: // dateFromParts
+ case symbol_kind::S_dateToParts: // dateToParts
+ case symbol_kind::S_dayOfMonth: // dayOfMonth
+ case symbol_kind::S_dayOfWeek: // dayOfWeek
+ case symbol_kind::S_dayOfYear: // dayOfYear
+ case symbol_kind::S_hour: // hour
+ case symbol_kind::S_isoDayOfWeek: // isoDayOfWeek
+ case symbol_kind::S_isoWeek: // isoWeek
+ case symbol_kind::S_isoWeekYear: // isoWeekYear
+ case symbol_kind::S_millisecond: // millisecond
+ case symbol_kind::S_minute: // minute
+ case symbol_kind::S_month: // month
+ case symbol_kind::S_second: // second
+ case symbol_kind::S_week: // week
+ case symbol_kind::S_year: // year
case symbol_kind::S_typeExpression: // typeExpression
case symbol_kind::S_convert: // convert
case symbol_kind::S_toBool: // toBool
@@ -1917,6 +2064,7 @@ public:
S_nonArrayNonObjCompoundExpression: // nonArrayNonObjCompoundExpression
case symbol_kind::S_expressionSingletonArray: // expressionSingletonArray
case symbol_kind::S_singleArgExpression: // singleArgExpression
+ case symbol_kind::S_nonArrayNonObjExpression: // nonArrayNonObjExpression
case symbol_kind::S_match: // match
case symbol_kind::S_predicates: // predicates
case symbol_kind::S_compoundMatchExprs: // compoundMatchExprs
@@ -2002,6 +2150,15 @@ public:
case symbol_kind::S_timezoneArg: // timezoneArg
case symbol_kind::S_charsArg: // charsArg
case symbol_kind::S_optionsArg: // optionsArg
+ case symbol_kind::S_hourArg: // hourArg
+ case symbol_kind::S_minuteArg: // minuteArg
+ case symbol_kind::S_secondArg: // secondArg
+ case symbol_kind::S_millisecondArg: // millisecondArg
+ case symbol_kind::S_dayArg: // dayArg
+ case symbol_kind::S_isoWeekArg: // isoWeekArg
+ case symbol_kind::S_iso8601Arg: // iso8601Arg
+ case symbol_kind::S_monthArg: // monthArg
+ case symbol_kind::S_isoDayOfWeekArg: // isoDayOfWeekArg
case symbol_kind::S_predicate: // predicate
case symbol_kind::S_logicalExpr: // logicalExpr
case symbol_kind::S_operatorExpression: // operatorExpression
@@ -2124,17 +2281,25 @@ public:
tok == token::ADD || tok == token::ALL_ELEMENTS_TRUE || tok == token::AND ||
tok == token::ANY_ELEMENT_TRUE || tok == token::ARG_CHARS ||
tok == token::ARG_COLL || tok == token::ARG_DATE || tok == token::ARG_DATE_STRING ||
- tok == token::ARG_FIND || tok == token::ARG_FORMAT || tok == token::ARG_INPUT ||
- tok == token::ARG_ON_ERROR || tok == token::ARG_ON_NULL ||
- tok == token::ARG_OPTIONS || tok == token::ARG_PIPELINE ||
- tok == token::ARG_REGEX || tok == token::ARG_REPLACEMENT ||
+ tok == token::ARG_DAY || tok == token::ARG_FILTER || tok == token::ARG_FIND ||
+ tok == token::ARG_FORMAT || tok == token::ARG_HOUR || tok == token::ARG_INPUT ||
+ tok == token::ARG_ISO_8601 || tok == token::ARG_ISO_DAY_OF_WEEK ||
+ tok == token::ARG_ISO_WEEK || tok == token::ARG_ISO_WEEK_YEAR ||
+ tok == token::ARG_MILLISECOND || tok == token::ARG_MINUTE ||
+ tok == token::ARG_MONTH || tok == token::ARG_ON_ERROR ||
+ tok == token::ARG_ON_NULL || tok == token::ARG_OPTIONS ||
+ tok == token::ARG_PIPELINE || tok == token::ARG_REGEX ||
+ tok == token::ARG_REPLACEMENT || tok == token::ARG_SECOND ||
tok == token::ARG_SIZE || tok == token::ARG_TIMEZONE || tok == token::ARG_TO ||
tok == token::ASIN || tok == token::ASINH || tok == token::ATAN ||
- tok == token::ATAN2 || tok == token::ATANH || tok == token::BOOL_FALSE ||
- tok == token::BOOL_TRUE || tok == token::CEIL || tok == token::COMMENT ||
- tok == token::CMP || tok == token::CONCAT || tok == token::CONST_EXPR ||
- tok == token::CONVERT || tok == token::COS || tok == token::COSH ||
- tok == token::DATE_FROM_STRING || tok == token::DATE_TO_STRING ||
+ tok == token::ARG_YEAR || tok == token::ATAN2 || tok == token::ATANH ||
+ tok == token::BOOL_FALSE || tok == token::BOOL_TRUE || tok == token::CEIL ||
+ tok == token::COMMENT || tok == token::CMP || tok == token::CONCAT ||
+ tok == token::CONST_EXPR || tok == token::CONVERT || tok == token::COS ||
+ tok == token::COSH || tok == token::DATE_FROM_PARTS ||
+ tok == token::DATE_FROM_STRING || tok == token::DATE_TO_PARTS ||
+ tok == token::DATE_TO_STRING || tok == token::DAY_OF_MONTH ||
+ tok == token::DAY_OF_WEEK || tok == token::DAY_OF_YEAR ||
tok == token::DECIMAL_NEGATIVE_ONE || tok == token::DECIMAL_ONE ||
tok == token::DECIMAL_ZERO || tok == token::DEGREES_TO_RADIANS ||
tok == token::DIVIDE || tok == token::DOUBLE_NEGATIVE_ONE ||
@@ -2142,37 +2307,40 @@ public:
tok == token::END_OBJECT || tok == token::EQ || tok == token::EXISTS ||
tok == token::EXPONENT || tok == token::FLOOR || tok == token::GEO_NEAR_DISTANCE ||
tok == token::GEO_NEAR_POINT || tok == token::GT || tok == token::GTE ||
- tok == token::ID || tok == token::INDEX_OF_BYTES || tok == token::INDEX_OF_CP ||
- tok == token::INDEX_KEY || tok == token::INT_NEGATIVE_ONE ||
- tok == token::INT_ONE || tok == token::INT_ZERO || tok == token::LITERAL ||
- tok == token::LN || tok == token::LOG || tok == token::LOGTEN ||
- tok == token::LONG_NEGATIVE_ONE || tok == token::LONG_ONE ||
- tok == token::LONG_ZERO || tok == token::LT || tok == token::LTE ||
- tok == token::LTRIM || tok == token::META || tok == token::MOD ||
- tok == token::MULTIPLY || tok == token::NE || tok == token::NOR ||
- tok == token::NOT || tok == token::OR || tok == token::POW ||
+ tok == token::HOUR || tok == token::ID || tok == token::INDEX_OF_BYTES ||
+ tok == token::INDEX_OF_CP || tok == token::INDEX_KEY ||
+ tok == token::INT_NEGATIVE_ONE || tok == token::INT_ONE || tok == token::INT_ZERO ||
+ tok == token::ISO_DAY_OF_WEEK || tok == token::ISO_WEEK ||
+ tok == token::ISO_WEEK_YEAR || tok == token::LITERAL || tok == token::LN ||
+ tok == token::LOG || tok == token::LOGTEN || tok == token::LONG_NEGATIVE_ONE ||
+ tok == token::LONG_ONE || tok == token::LONG_ZERO || tok == token::LT ||
+ tok == token::LTE || tok == token::LTRIM || tok == token::META ||
+ tok == token::MILLISECOND || tok == token::MINUTE || tok == token::MOD ||
+ tok == token::MONTH || tok == token::MULTIPLY || tok == token::NE ||
+ tok == token::NOR || tok == token::NOT || tok == token::OR || tok == token::POW ||
tok == token::RADIANS_TO_DEGREES || tok == token::RAND_VAL ||
tok == token::RECORD_ID || tok == token::REGEX_FIND ||
tok == token::REGEX_FIND_ALL || tok == token::REGEX_MATCH ||
tok == token::REPLACE_ALL || tok == token::REPLACE_ONE || tok == token::ROUND ||
tok == token::RTRIM || tok == token::SEARCH_HIGHLIGHTS ||
- tok == token::SEARCH_SCORE || tok == token::SET_DIFFERENCE ||
- tok == token::SET_EQUALS || tok == token::SET_INTERSECTION ||
- tok == token::SET_IS_SUBSET || tok == token::SET_UNION || tok == token::SLICE ||
- tok == token::SORT_KEY || tok == token::SIN || tok == token::SINH ||
- tok == token::SPLIT || tok == token::SQRT ||
- tok == token::STAGE_INHIBIT_OPTIMIZATION || tok == token::STAGE_LIMIT ||
- tok == token::STAGE_PROJECT || tok == token::STAGE_SAMPLE ||
- tok == token::STAGE_SKIP || tok == token::STAGE_UNION_WITH ||
- tok == token::START_ARRAY || tok == token::START_OBJECT ||
- tok == token::STR_CASE_CMP || tok == token::STR_LEN_BYTES ||
- tok == token::STR_LEN_CP || tok == token::SUBSTR || tok == token::SUBSTR_BYTES ||
- tok == token::SUBSTR_CP || tok == token::SUBTRACT || tok == token::TAN ||
- tok == token::TANH || tok == token::TEXT_SCORE || tok == token::TO_BOOL ||
- tok == token::TO_DATE || tok == token::TO_DECIMAL || tok == token::TO_DOUBLE ||
- tok == token::TO_INT || tok == token::TO_LONG || tok == token::TO_LOWER ||
- tok == token::TO_OBJECT_ID || tok == token::TO_STRING || tok == token::TO_UPPER ||
- tok == token::TRIM || tok == token::TRUNC || tok == token::TYPE ||
+ tok == token::SEARCH_SCORE || tok == token::SECOND ||
+ tok == token::SET_DIFFERENCE || tok == token::SET_EQUALS ||
+ tok == token::SET_INTERSECTION || tok == token::SET_IS_SUBSET ||
+ tok == token::SET_UNION || tok == token::SLICE || tok == token::SORT_KEY ||
+ tok == token::SIN || tok == token::SINH || tok == token::SPLIT ||
+ tok == token::SQRT || tok == token::STAGE_INHIBIT_OPTIMIZATION ||
+ tok == token::STAGE_LIMIT || tok == token::STAGE_PROJECT ||
+ tok == token::STAGE_SAMPLE || tok == token::STAGE_SKIP ||
+ tok == token::STAGE_UNION_WITH || tok == token::START_ARRAY ||
+ tok == token::START_OBJECT || tok == token::STR_CASE_CMP ||
+ tok == token::STR_LEN_BYTES || tok == token::STR_LEN_CP || tok == token::SUBSTR ||
+ tok == token::SUBSTR_BYTES || tok == token::SUBSTR_CP || tok == token::SUBTRACT ||
+ tok == token::TAN || tok == token::TANH || tok == token::TEXT_SCORE ||
+ tok == token::TO_BOOL || tok == token::TO_DATE || tok == token::TO_DECIMAL ||
+ tok == token::TO_DOUBLE || tok == token::TO_INT || tok == token::TO_LONG ||
+ tok == token::TO_LOWER || tok == token::TO_OBJECT_ID || tok == token::TO_STRING ||
+ tok == token::TO_UPPER || tok == token::TRIM || tok == token::TRUNC ||
+ tok == token::TYPE || tok == token::WEEK || tok == token::YEAR ||
tok == token::START_PIPELINE || tok == token::START_MATCH ||
tok == token::START_SORT);
}
@@ -2184,17 +2352,25 @@ public:
tok == token::ADD || tok == token::ALL_ELEMENTS_TRUE || tok == token::AND ||
tok == token::ANY_ELEMENT_TRUE || tok == token::ARG_CHARS ||
tok == token::ARG_COLL || tok == token::ARG_DATE || tok == token::ARG_DATE_STRING ||
- tok == token::ARG_FIND || tok == token::ARG_FORMAT || tok == token::ARG_INPUT ||
- tok == token::ARG_ON_ERROR || tok == token::ARG_ON_NULL ||
- tok == token::ARG_OPTIONS || tok == token::ARG_PIPELINE ||
- tok == token::ARG_REGEX || tok == token::ARG_REPLACEMENT ||
+ tok == token::ARG_DAY || tok == token::ARG_FILTER || tok == token::ARG_FIND ||
+ tok == token::ARG_FORMAT || tok == token::ARG_HOUR || tok == token::ARG_INPUT ||
+ tok == token::ARG_ISO_8601 || tok == token::ARG_ISO_DAY_OF_WEEK ||
+ tok == token::ARG_ISO_WEEK || tok == token::ARG_ISO_WEEK_YEAR ||
+ tok == token::ARG_MILLISECOND || tok == token::ARG_MINUTE ||
+ tok == token::ARG_MONTH || tok == token::ARG_ON_ERROR ||
+ tok == token::ARG_ON_NULL || tok == token::ARG_OPTIONS ||
+ tok == token::ARG_PIPELINE || tok == token::ARG_REGEX ||
+ tok == token::ARG_REPLACEMENT || tok == token::ARG_SECOND ||
tok == token::ARG_SIZE || tok == token::ARG_TIMEZONE || tok == token::ARG_TO ||
tok == token::ASIN || tok == token::ASINH || tok == token::ATAN ||
- tok == token::ATAN2 || tok == token::ATANH || tok == token::BOOL_FALSE ||
- tok == token::BOOL_TRUE || tok == token::CEIL || tok == token::COMMENT ||
- tok == token::CMP || tok == token::CONCAT || tok == token::CONST_EXPR ||
- tok == token::CONVERT || tok == token::COS || tok == token::COSH ||
- tok == token::DATE_FROM_STRING || tok == token::DATE_TO_STRING ||
+ tok == token::ARG_YEAR || tok == token::ATAN2 || tok == token::ATANH ||
+ tok == token::BOOL_FALSE || tok == token::BOOL_TRUE || tok == token::CEIL ||
+ tok == token::COMMENT || tok == token::CMP || tok == token::CONCAT ||
+ tok == token::CONST_EXPR || tok == token::CONVERT || tok == token::COS ||
+ tok == token::COSH || tok == token::DATE_FROM_PARTS ||
+ tok == token::DATE_FROM_STRING || tok == token::DATE_TO_PARTS ||
+ tok == token::DATE_TO_STRING || tok == token::DAY_OF_MONTH ||
+ tok == token::DAY_OF_WEEK || tok == token::DAY_OF_YEAR ||
tok == token::DECIMAL_NEGATIVE_ONE || tok == token::DECIMAL_ONE ||
tok == token::DECIMAL_ZERO || tok == token::DEGREES_TO_RADIANS ||
tok == token::DIVIDE || tok == token::DOUBLE_NEGATIVE_ONE ||
@@ -2202,37 +2378,40 @@ public:
tok == token::END_OBJECT || tok == token::EQ || tok == token::EXISTS ||
tok == token::EXPONENT || tok == token::FLOOR || tok == token::GEO_NEAR_DISTANCE ||
tok == token::GEO_NEAR_POINT || tok == token::GT || tok == token::GTE ||
- tok == token::ID || tok == token::INDEX_OF_BYTES || tok == token::INDEX_OF_CP ||
- tok == token::INDEX_KEY || tok == token::INT_NEGATIVE_ONE ||
- tok == token::INT_ONE || tok == token::INT_ZERO || tok == token::LITERAL ||
- tok == token::LN || tok == token::LOG || tok == token::LOGTEN ||
- tok == token::LONG_NEGATIVE_ONE || tok == token::LONG_ONE ||
- tok == token::LONG_ZERO || tok == token::LT || tok == token::LTE ||
- tok == token::LTRIM || tok == token::META || tok == token::MOD ||
- tok == token::MULTIPLY || tok == token::NE || tok == token::NOR ||
- tok == token::NOT || tok == token::OR || tok == token::POW ||
+ tok == token::HOUR || tok == token::ID || tok == token::INDEX_OF_BYTES ||
+ tok == token::INDEX_OF_CP || tok == token::INDEX_KEY ||
+ tok == token::INT_NEGATIVE_ONE || tok == token::INT_ONE || tok == token::INT_ZERO ||
+ tok == token::ISO_DAY_OF_WEEK || tok == token::ISO_WEEK ||
+ tok == token::ISO_WEEK_YEAR || tok == token::LITERAL || tok == token::LN ||
+ tok == token::LOG || tok == token::LOGTEN || tok == token::LONG_NEGATIVE_ONE ||
+ tok == token::LONG_ONE || tok == token::LONG_ZERO || tok == token::LT ||
+ tok == token::LTE || tok == token::LTRIM || tok == token::META ||
+ tok == token::MILLISECOND || tok == token::MINUTE || tok == token::MOD ||
+ tok == token::MONTH || tok == token::MULTIPLY || tok == token::NE ||
+ tok == token::NOR || tok == token::NOT || tok == token::OR || tok == token::POW ||
tok == token::RADIANS_TO_DEGREES || tok == token::RAND_VAL ||
tok == token::RECORD_ID || tok == token::REGEX_FIND ||
tok == token::REGEX_FIND_ALL || tok == token::REGEX_MATCH ||
tok == token::REPLACE_ALL || tok == token::REPLACE_ONE || tok == token::ROUND ||
tok == token::RTRIM || tok == token::SEARCH_HIGHLIGHTS ||
- tok == token::SEARCH_SCORE || tok == token::SET_DIFFERENCE ||
- tok == token::SET_EQUALS || tok == token::SET_INTERSECTION ||
- tok == token::SET_IS_SUBSET || tok == token::SET_UNION || tok == token::SLICE ||
- tok == token::SORT_KEY || tok == token::SIN || tok == token::SINH ||
- tok == token::SPLIT || tok == token::SQRT ||
- tok == token::STAGE_INHIBIT_OPTIMIZATION || tok == token::STAGE_LIMIT ||
- tok == token::STAGE_PROJECT || tok == token::STAGE_SAMPLE ||
- tok == token::STAGE_SKIP || tok == token::STAGE_UNION_WITH ||
- tok == token::START_ARRAY || tok == token::START_OBJECT ||
- tok == token::STR_CASE_CMP || tok == token::STR_LEN_BYTES ||
- tok == token::STR_LEN_CP || tok == token::SUBSTR || tok == token::SUBSTR_BYTES ||
- tok == token::SUBSTR_CP || tok == token::SUBTRACT || tok == token::TAN ||
- tok == token::TANH || tok == token::TEXT_SCORE || tok == token::TO_BOOL ||
- tok == token::TO_DATE || tok == token::TO_DECIMAL || tok == token::TO_DOUBLE ||
- tok == token::TO_INT || tok == token::TO_LONG || tok == token::TO_LOWER ||
- tok == token::TO_OBJECT_ID || tok == token::TO_STRING || tok == token::TO_UPPER ||
- tok == token::TRIM || tok == token::TRUNC || tok == token::TYPE ||
+ tok == token::SEARCH_SCORE || tok == token::SECOND ||
+ tok == token::SET_DIFFERENCE || tok == token::SET_EQUALS ||
+ tok == token::SET_INTERSECTION || tok == token::SET_IS_SUBSET ||
+ tok == token::SET_UNION || tok == token::SLICE || tok == token::SORT_KEY ||
+ tok == token::SIN || tok == token::SINH || tok == token::SPLIT ||
+ tok == token::SQRT || tok == token::STAGE_INHIBIT_OPTIMIZATION ||
+ tok == token::STAGE_LIMIT || tok == token::STAGE_PROJECT ||
+ tok == token::STAGE_SAMPLE || tok == token::STAGE_SKIP ||
+ tok == token::STAGE_UNION_WITH || tok == token::START_ARRAY ||
+ tok == token::START_OBJECT || tok == token::STR_CASE_CMP ||
+ tok == token::STR_LEN_BYTES || tok == token::STR_LEN_CP || tok == token::SUBSTR ||
+ tok == token::SUBSTR_BYTES || tok == token::SUBSTR_CP || tok == token::SUBTRACT ||
+ tok == token::TAN || tok == token::TANH || tok == token::TEXT_SCORE ||
+ tok == token::TO_BOOL || tok == token::TO_DATE || tok == token::TO_DECIMAL ||
+ tok == token::TO_DOUBLE || tok == token::TO_INT || tok == token::TO_LONG ||
+ tok == token::TO_LOWER || tok == token::TO_OBJECT_ID || tok == token::TO_STRING ||
+ tok == token::TO_UPPER || tok == token::TRIM || tok == token::TRUNC ||
+ tok == token::TYPE || tok == token::WEEK || tok == token::YEAR ||
tok == token::START_PIPELINE || tok == token::START_MATCH ||
tok == token::START_SORT);
}
@@ -2625,6 +2804,24 @@ public:
}
#endif
#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_ARG_DAY(location_type l) {
+ return symbol_type(token::ARG_DAY, std::move(l));
+ }
+#else
+ static symbol_type make_ARG_DAY(const location_type& l) {
+ return symbol_type(token::ARG_DAY, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_ARG_FILTER(location_type l) {
+ return symbol_type(token::ARG_FILTER, std::move(l));
+ }
+#else
+ static symbol_type make_ARG_FILTER(const location_type& l) {
+ return symbol_type(token::ARG_FILTER, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
static symbol_type make_ARG_FIND(location_type l) {
return symbol_type(token::ARG_FIND, std::move(l));
}
@@ -2643,6 +2840,15 @@ public:
}
#endif
#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_ARG_HOUR(location_type l) {
+ return symbol_type(token::ARG_HOUR, std::move(l));
+ }
+#else
+ static symbol_type make_ARG_HOUR(const location_type& l) {
+ return symbol_type(token::ARG_HOUR, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
static symbol_type make_ARG_INPUT(location_type l) {
return symbol_type(token::ARG_INPUT, std::move(l));
}
@@ -2652,6 +2858,69 @@ public:
}
#endif
#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_ARG_ISO_8601(location_type l) {
+ return symbol_type(token::ARG_ISO_8601, std::move(l));
+ }
+#else
+ static symbol_type make_ARG_ISO_8601(const location_type& l) {
+ return symbol_type(token::ARG_ISO_8601, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_ARG_ISO_DAY_OF_WEEK(location_type l) {
+ return symbol_type(token::ARG_ISO_DAY_OF_WEEK, std::move(l));
+ }
+#else
+ static symbol_type make_ARG_ISO_DAY_OF_WEEK(const location_type& l) {
+ return symbol_type(token::ARG_ISO_DAY_OF_WEEK, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_ARG_ISO_WEEK(location_type l) {
+ return symbol_type(token::ARG_ISO_WEEK, std::move(l));
+ }
+#else
+ static symbol_type make_ARG_ISO_WEEK(const location_type& l) {
+ return symbol_type(token::ARG_ISO_WEEK, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_ARG_ISO_WEEK_YEAR(location_type l) {
+ return symbol_type(token::ARG_ISO_WEEK_YEAR, std::move(l));
+ }
+#else
+ static symbol_type make_ARG_ISO_WEEK_YEAR(const location_type& l) {
+ return symbol_type(token::ARG_ISO_WEEK_YEAR, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_ARG_MILLISECOND(location_type l) {
+ return symbol_type(token::ARG_MILLISECOND, std::move(l));
+ }
+#else
+ static symbol_type make_ARG_MILLISECOND(const location_type& l) {
+ return symbol_type(token::ARG_MILLISECOND, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_ARG_MINUTE(location_type l) {
+ return symbol_type(token::ARG_MINUTE, std::move(l));
+ }
+#else
+ static symbol_type make_ARG_MINUTE(const location_type& l) {
+ return symbol_type(token::ARG_MINUTE, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_ARG_MONTH(location_type l) {
+ return symbol_type(token::ARG_MONTH, std::move(l));
+ }
+#else
+ static symbol_type make_ARG_MONTH(const location_type& l) {
+ return symbol_type(token::ARG_MONTH, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
static symbol_type make_ARG_ON_ERROR(location_type l) {
return symbol_type(token::ARG_ON_ERROR, std::move(l));
}
@@ -2706,6 +2975,15 @@ public:
}
#endif
#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_ARG_SECOND(location_type l) {
+ return symbol_type(token::ARG_SECOND, std::move(l));
+ }
+#else
+ static symbol_type make_ARG_SECOND(const location_type& l) {
+ return symbol_type(token::ARG_SECOND, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
static symbol_type make_ARG_SIZE(location_type l) {
return symbol_type(token::ARG_SIZE, std::move(l));
}
@@ -2760,6 +3038,15 @@ public:
}
#endif
#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_ARG_YEAR(location_type l) {
+ return symbol_type(token::ARG_YEAR, std::move(l));
+ }
+#else
+ static symbol_type make_ARG_YEAR(const location_type& l) {
+ return symbol_type(token::ARG_YEAR, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
static symbol_type make_ATAN2(location_type l) {
return symbol_type(token::ATAN2, std::move(l));
}
@@ -2868,6 +3155,15 @@ public:
}
#endif
#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_DATE_FROM_PARTS(location_type l) {
+ return symbol_type(token::DATE_FROM_PARTS, std::move(l));
+ }
+#else
+ static symbol_type make_DATE_FROM_PARTS(const location_type& l) {
+ return symbol_type(token::DATE_FROM_PARTS, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
static symbol_type make_DATE_FROM_STRING(location_type l) {
return symbol_type(token::DATE_FROM_STRING, std::move(l));
}
@@ -2877,6 +3173,15 @@ public:
}
#endif
#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_DATE_TO_PARTS(location_type l) {
+ return symbol_type(token::DATE_TO_PARTS, std::move(l));
+ }
+#else
+ static symbol_type make_DATE_TO_PARTS(const location_type& l) {
+ return symbol_type(token::DATE_TO_PARTS, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
static symbol_type make_DATE_TO_STRING(location_type l) {
return symbol_type(token::DATE_TO_STRING, std::move(l));
}
@@ -2886,6 +3191,33 @@ public:
}
#endif
#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_DAY_OF_MONTH(location_type l) {
+ return symbol_type(token::DAY_OF_MONTH, std::move(l));
+ }
+#else
+ static symbol_type make_DAY_OF_MONTH(const location_type& l) {
+ return symbol_type(token::DAY_OF_MONTH, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_DAY_OF_WEEK(location_type l) {
+ return symbol_type(token::DAY_OF_WEEK, std::move(l));
+ }
+#else
+ static symbol_type make_DAY_OF_WEEK(const location_type& l) {
+ return symbol_type(token::DAY_OF_WEEK, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_DAY_OF_YEAR(location_type l) {
+ return symbol_type(token::DAY_OF_YEAR, std::move(l));
+ }
+#else
+ static symbol_type make_DAY_OF_YEAR(const location_type& l) {
+ return symbol_type(token::DAY_OF_YEAR, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
static symbol_type make_DECIMAL_NEGATIVE_ONE(location_type l) {
return symbol_type(token::DECIMAL_NEGATIVE_ONE, std::move(l));
}
@@ -3048,6 +3380,15 @@ public:
}
#endif
#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_HOUR(location_type l) {
+ return symbol_type(token::HOUR, std::move(l));
+ }
+#else
+ static symbol_type make_HOUR(const location_type& l) {
+ return symbol_type(token::HOUR, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
static symbol_type make_ID(location_type l) {
return symbol_type(token::ID, std::move(l));
}
@@ -3111,6 +3452,33 @@ public:
}
#endif
#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_ISO_DAY_OF_WEEK(location_type l) {
+ return symbol_type(token::ISO_DAY_OF_WEEK, std::move(l));
+ }
+#else
+ static symbol_type make_ISO_DAY_OF_WEEK(const location_type& l) {
+ return symbol_type(token::ISO_DAY_OF_WEEK, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_ISO_WEEK(location_type l) {
+ return symbol_type(token::ISO_WEEK, std::move(l));
+ }
+#else
+ static symbol_type make_ISO_WEEK(const location_type& l) {
+ return symbol_type(token::ISO_WEEK, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_ISO_WEEK_YEAR(location_type l) {
+ return symbol_type(token::ISO_WEEK_YEAR, std::move(l));
+ }
+#else
+ static symbol_type make_ISO_WEEK_YEAR(const location_type& l) {
+ return symbol_type(token::ISO_WEEK_YEAR, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
static symbol_type make_LITERAL(location_type l) {
return symbol_type(token::LITERAL, std::move(l));
}
@@ -3210,6 +3578,24 @@ public:
}
#endif
#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_MILLISECOND(location_type l) {
+ return symbol_type(token::MILLISECOND, std::move(l));
+ }
+#else
+ static symbol_type make_MILLISECOND(const location_type& l) {
+ return symbol_type(token::MILLISECOND, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_MINUTE(location_type l) {
+ return symbol_type(token::MINUTE, std::move(l));
+ }
+#else
+ static symbol_type make_MINUTE(const location_type& l) {
+ return symbol_type(token::MINUTE, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
static symbol_type make_MOD(location_type l) {
return symbol_type(token::MOD, std::move(l));
}
@@ -3219,6 +3605,15 @@ public:
}
#endif
#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_MONTH(location_type l) {
+ return symbol_type(token::MONTH, std::move(l));
+ }
+#else
+ static symbol_type make_MONTH(const location_type& l) {
+ return symbol_type(token::MONTH, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
static symbol_type make_MULTIPLY(location_type l) {
return symbol_type(token::MULTIPLY, std::move(l));
}
@@ -3381,6 +3776,15 @@ public:
}
#endif
#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_SECOND(location_type l) {
+ return symbol_type(token::SECOND, std::move(l));
+ }
+#else
+ static symbol_type make_SECOND(const location_type& l) {
+ return symbol_type(token::SECOND, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
static symbol_type make_SET_DIFFERENCE(location_type l) {
return symbol_type(token::SET_DIFFERENCE, std::move(l));
}
@@ -3759,6 +4163,24 @@ public:
}
#endif
#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_WEEK(location_type l) {
+ return symbol_type(token::WEEK, std::move(l));
+ }
+#else
+ static symbol_type make_WEEK(const location_type& l) {
+ return symbol_type(token::WEEK, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
+ static symbol_type make_YEAR(location_type l) {
+ return symbol_type(token::YEAR, std::move(l));
+ }
+#else
+ static symbol_type make_YEAR(const location_type& l) {
+ return symbol_type(token::YEAR, l);
+ }
+#endif
+#if 201103L <= YY_CPLUSPLUS
static symbol_type make_FIELDNAME(std::string v, location_type l) {
return symbol_type(token::FIELDNAME, std::move(v), std::move(l));
}
@@ -4052,7 +4474,7 @@ private:
static bool yy_table_value_is_error_(int yyvalue);
static const short yypact_ninf_;
- static const signed char yytable_ninf_;
+ static const short yytable_ninf_;
/// Convert a scanner token kind \a t to a symbol kind.
/// In theory \a t should be a token_kind_type, but character literals
@@ -4301,8 +4723,8 @@ private:
/// Constants.
enum {
- yylast_ = 3340, ///< Last index in yytable_.
- yynnts_ = 201, ///< Number of nonterminal symbols.
+ yylast_ = 3982, ///< Last index in yytable_.
+ yynnts_ = 226, ///< Number of nonterminal symbols.
yyfinal_ = 11 ///< Termination state number.
};
@@ -4440,6 +4862,22 @@ ParserGen::basic_symbol<Base>::basic_symbol(const basic_symbol& that)
case symbol_kind::S_lt: // lt
case symbol_kind::S_lte: // lte
case symbol_kind::S_ne: // ne
+ case symbol_kind::S_dateExps: // dateExps
+ case symbol_kind::S_dateFromParts: // dateFromParts
+ case symbol_kind::S_dateToParts: // dateToParts
+ case symbol_kind::S_dayOfMonth: // dayOfMonth
+ case symbol_kind::S_dayOfWeek: // dayOfWeek
+ case symbol_kind::S_dayOfYear: // dayOfYear
+ case symbol_kind::S_hour: // hour
+ case symbol_kind::S_isoDayOfWeek: // isoDayOfWeek
+ case symbol_kind::S_isoWeek: // isoWeek
+ case symbol_kind::S_isoWeekYear: // isoWeekYear
+ case symbol_kind::S_millisecond: // millisecond
+ case symbol_kind::S_minute: // minute
+ case symbol_kind::S_month: // month
+ case symbol_kind::S_second: // second
+ case symbol_kind::S_week: // week
+ case symbol_kind::S_year: // year
case symbol_kind::S_typeExpression: // typeExpression
case symbol_kind::S_convert: // convert
case symbol_kind::S_toBool: // toBool
@@ -4495,6 +4933,7 @@ ParserGen::basic_symbol<Base>::basic_symbol(const basic_symbol& that)
case symbol_kind::S_nonArrayNonObjCompoundExpression: // nonArrayNonObjCompoundExpression
case symbol_kind::S_expressionSingletonArray: // expressionSingletonArray
case symbol_kind::S_singleArgExpression: // singleArgExpression
+ case symbol_kind::S_nonArrayNonObjExpression: // nonArrayNonObjExpression
case symbol_kind::S_match: // match
case symbol_kind::S_predicates: // predicates
case symbol_kind::S_compoundMatchExprs: // compoundMatchExprs
@@ -4579,6 +5018,15 @@ ParserGen::basic_symbol<Base>::basic_symbol(const basic_symbol& that)
case symbol_kind::S_timezoneArg: // timezoneArg
case symbol_kind::S_charsArg: // charsArg
case symbol_kind::S_optionsArg: // optionsArg
+ case symbol_kind::S_hourArg: // hourArg
+ case symbol_kind::S_minuteArg: // minuteArg
+ case symbol_kind::S_secondArg: // secondArg
+ case symbol_kind::S_millisecondArg: // millisecondArg
+ case symbol_kind::S_dayArg: // dayArg
+ case symbol_kind::S_isoWeekArg: // isoWeekArg
+ case symbol_kind::S_iso8601Arg: // iso8601Arg
+ case symbol_kind::S_monthArg: // monthArg
+ case symbol_kind::S_isoDayOfWeekArg: // isoDayOfWeekArg
case symbol_kind::S_predicate: // predicate
case symbol_kind::S_logicalExpr: // logicalExpr
case symbol_kind::S_operatorExpression: // operatorExpression
@@ -4749,6 +5197,22 @@ void ParserGen::basic_symbol<Base>::move(basic_symbol& s) {
case symbol_kind::S_lt: // lt
case symbol_kind::S_lte: // lte
case symbol_kind::S_ne: // ne
+ case symbol_kind::S_dateExps: // dateExps
+ case symbol_kind::S_dateFromParts: // dateFromParts
+ case symbol_kind::S_dateToParts: // dateToParts
+ case symbol_kind::S_dayOfMonth: // dayOfMonth
+ case symbol_kind::S_dayOfWeek: // dayOfWeek
+ case symbol_kind::S_dayOfYear: // dayOfYear
+ case symbol_kind::S_hour: // hour
+ case symbol_kind::S_isoDayOfWeek: // isoDayOfWeek
+ case symbol_kind::S_isoWeek: // isoWeek
+ case symbol_kind::S_isoWeekYear: // isoWeekYear
+ case symbol_kind::S_millisecond: // millisecond
+ case symbol_kind::S_minute: // minute
+ case symbol_kind::S_month: // month
+ case symbol_kind::S_second: // second
+ case symbol_kind::S_week: // week
+ case symbol_kind::S_year: // year
case symbol_kind::S_typeExpression: // typeExpression
case symbol_kind::S_convert: // convert
case symbol_kind::S_toBool: // toBool
@@ -4804,6 +5268,7 @@ void ParserGen::basic_symbol<Base>::move(basic_symbol& s) {
case symbol_kind::S_nonArrayNonObjCompoundExpression: // nonArrayNonObjCompoundExpression
case symbol_kind::S_expressionSingletonArray: // expressionSingletonArray
case symbol_kind::S_singleArgExpression: // singleArgExpression
+ case symbol_kind::S_nonArrayNonObjExpression: // nonArrayNonObjExpression
case symbol_kind::S_match: // match
case symbol_kind::S_predicates: // predicates
case symbol_kind::S_compoundMatchExprs: // compoundMatchExprs
@@ -4888,6 +5353,15 @@ void ParserGen::basic_symbol<Base>::move(basic_symbol& s) {
case symbol_kind::S_timezoneArg: // timezoneArg
case symbol_kind::S_charsArg: // charsArg
case symbol_kind::S_optionsArg: // optionsArg
+ case symbol_kind::S_hourArg: // hourArg
+ case symbol_kind::S_minuteArg: // minuteArg
+ case symbol_kind::S_secondArg: // secondArg
+ case symbol_kind::S_millisecondArg: // millisecondArg
+ case symbol_kind::S_dayArg: // dayArg
+ case symbol_kind::S_isoWeekArg: // isoWeekArg
+ case symbol_kind::S_iso8601Arg: // iso8601Arg
+ case symbol_kind::S_monthArg: // monthArg
+ case symbol_kind::S_isoDayOfWeekArg: // isoDayOfWeekArg
case symbol_kind::S_predicate: // predicate
case symbol_kind::S_logicalExpr: // logicalExpr
case symbol_kind::S_operatorExpression: // operatorExpression
@@ -4958,7 +5432,7 @@ inline ParserGen::symbol_kind_type ParserGen::by_kind::type_get() const YY_NOEXC
#line 57 "grammar.yy"
} // namespace mongo
-#line 6147 "parser_gen.hpp"
+#line 6761 "parser_gen.hpp"
#endif // !YY_YY_PARSER_GEN_HPP_INCLUDED
diff --git a/src/mongo/db/pipeline/expression.h b/src/mongo/db/pipeline/expression.h
index aea07890df1..74ed09c8dfa 100644
--- a/src/mongo/db/pipeline/expression.h
+++ b/src/mongo/db/pipeline/expression.h
@@ -1138,6 +1138,19 @@ private:
class ExpressionDateFromParts final : public Expression {
public:
+ ExpressionDateFromParts(ExpressionContext* const expCtx,
+ boost::intrusive_ptr<Expression> year,
+ boost::intrusive_ptr<Expression> month,
+ boost::intrusive_ptr<Expression> day,
+ boost::intrusive_ptr<Expression> hour,
+ boost::intrusive_ptr<Expression> minute,
+ boost::intrusive_ptr<Expression> second,
+ boost::intrusive_ptr<Expression> millisecond,
+ boost::intrusive_ptr<Expression> isoWeekYear,
+ boost::intrusive_ptr<Expression> isoWeek,
+ boost::intrusive_ptr<Expression> isoDayOfWeek,
+ boost::intrusive_ptr<Expression> timeZone);
+
boost::intrusive_ptr<Expression> optimize() final;
Value serialize(bool explain) const final;
Value evaluate(const Document& root, Variables* variables) const final;
@@ -1154,19 +1167,6 @@ protected:
void _doAddDependencies(DepsTracker* deps) const final;
private:
- ExpressionDateFromParts(ExpressionContext* const expCtx,
- boost::intrusive_ptr<Expression> year,
- boost::intrusive_ptr<Expression> month,
- boost::intrusive_ptr<Expression> day,
- boost::intrusive_ptr<Expression> hour,
- boost::intrusive_ptr<Expression> minute,
- boost::intrusive_ptr<Expression> second,
- boost::intrusive_ptr<Expression> millisecond,
- boost::intrusive_ptr<Expression> isoWeekYear,
- boost::intrusive_ptr<Expression> isoWeek,
- boost::intrusive_ptr<Expression> isoDayOfWeek,
- boost::intrusive_ptr<Expression> timeZone);
-
/**
* This function checks whether a field is a number.
*
@@ -1219,6 +1219,14 @@ private:
class ExpressionDateToParts final : public Expression {
public:
+ /**
+ * The iso8601 argument controls whether to output ISO8601 elements or natural calendar.
+ */
+ ExpressionDateToParts(ExpressionContext* const expCtx,
+ boost::intrusive_ptr<Expression> date,
+ boost::intrusive_ptr<Expression> timeZone,
+ boost::intrusive_ptr<Expression> iso8601);
+
boost::intrusive_ptr<Expression> optimize() final;
Value serialize(bool explain) const final;
Value evaluate(const Document& root, Variables* variables) const final;
@@ -1235,14 +1243,6 @@ protected:
void _doAddDependencies(DepsTracker* deps) const final;
private:
- /**
- * The iso8601 argument controls whether to output ISO8601 elements or natural calendar.
- */
- ExpressionDateToParts(ExpressionContext* const expCtx,
- boost::intrusive_ptr<Expression> date,
- boost::intrusive_ptr<Expression> timeZone,
- boost::intrusive_ptr<Expression> iso8601);
-
boost::optional<int> evaluateIso8601Flag(const Document& root, Variables* variables) const;
boost::intrusive_ptr<Expression>& _date;