in src/aws-client.js [17701:17779]
led: function(tokenName, left) {
var right;
switch(tokenName) {
case TOK_DOT:
var rbp = bindingPower.Dot;
if (this._lookahead(0) !== TOK_STAR) {
right = this._parseDotRHS(rbp);
return {type: "Subexpression", children: [left, right]};
} else {
// Creating a projection.
this._advance();
right = this._parseProjectionRHS(rbp);
return {type: "ValueProjection", children: [left, right]};
}
break;
case TOK_PIPE:
right = this.expression(bindingPower.Pipe);
return {type: TOK_PIPE, children: [left, right]};
case TOK_OR:
right = this.expression(bindingPower.Or);
return {type: "OrExpression", children: [left, right]};
case TOK_AND:
right = this.expression(bindingPower.And);
return {type: "AndExpression", children: [left, right]};
case TOK_LPAREN:
var name = left.name;
var args = [];
var expression, node;
while (this._lookahead(0) !== TOK_RPAREN) {
if (this._lookahead(0) === TOK_CURRENT) {
expression = {type: TOK_CURRENT};
this._advance();
} else {
expression = this.expression(0);
}
if (this._lookahead(0) === TOK_COMMA) {
this._match(TOK_COMMA);
}
args.push(expression);
}
this._match(TOK_RPAREN);
node = {type: "Function", name: name, children: args};
return node;
case TOK_FILTER:
var condition = this.expression(0);
this._match(TOK_RBRACKET);
if (this._lookahead(0) === TOK_FLATTEN) {
right = {type: "Identity"};
} else {
right = this._parseProjectionRHS(bindingPower.Filter);
}
return {type: "FilterProjection", children: [left, right, condition]};
case TOK_FLATTEN:
var leftNode = {type: TOK_FLATTEN, children: [left]};
var rightNode = this._parseProjectionRHS(bindingPower.Flatten);
return {type: "Projection", children: [leftNode, rightNode]};
case TOK_EQ:
case TOK_NE:
case TOK_GT:
case TOK_GTE:
case TOK_LT:
case TOK_LTE:
return this._parseComparator(left, tokenName);
case TOK_LBRACKET:
var token = this._lookaheadToken(0);
if (token.type === TOK_NUMBER || token.type === TOK_COLON) {
right = this._parseIndexExpression();
return this._projectIfSlice(left, right);
} else {
this._match(TOK_STAR);
this._match(TOK_RBRACKET);
right = this._parseProjectionRHS(bindingPower.Star);
return {type: "Projection", children: [left, right]};
}
break;
default:
this._errorToken(this._lookaheadToken(0));
}
},