in source/web_site/js/connectCCP.js [11099:11172]
nud: function(token) {
var left;
var right;
var expression;
switch (token.type) {
case TOK_LITERAL:
return {type: "Literal", value: token.value};
case TOK_UNQUOTEDIDENTIFIER:
return {type: "Field", name: token.value};
case TOK_QUOTEDIDENTIFIER:
var node = {type: "Field", name: token.value};
if (this._lookahead(0) === TOK_LPAREN) {
throw new Error("Quoted identifier not allowed for function names.");
} else {
return node;
}
break;
case TOK_NOT:
right = this.expression(bindingPower.Not);
return {type: "NotExpression", children: [right]};
case TOK_STAR:
left = {type: "Identity"};
right = null;
if (this._lookahead(0) === TOK_RBRACKET) {
right = {type: "Identity"};
} else {
right = this._parseProjectionRHS(bindingPower.Star);
}
return {type: "ValueProjection", children: [left, right]};
case TOK_FILTER:
return this.led(token.type, {type: "Identity"});
case TOK_LBRACE:
return this._parseMultiselectHash();
case TOK_FLATTEN:
left = {type: TOK_FLATTEN, children: [{type: "Identity"}]};
right = this._parseProjectionRHS(bindingPower.Flatten);
return {type: "Projection", children: [left, right]};
case TOK_LBRACKET:
if (this._lookahead(0) === TOK_NUMBER || this._lookahead(0) === TOK_COLON) {
right = this._parseIndexExpression();
return this._projectIfSlice({type: "Identity"}, right);
} else if (this._lookahead(0) === TOK_STAR &&
this._lookahead(1) === TOK_RBRACKET) {
this._advance();
this._advance();
right = this._parseProjectionRHS(bindingPower.Star);
return {type: "Projection",
children: [{type: "Identity"}, right]};
} else {
return this._parseMultiselectList();
}
break;
case TOK_CURRENT:
return {type: TOK_CURRENT};
case TOK_EXPREF:
expression = this.expression(bindingPower.Expref);
return {type: "ExpressionReference", children: [expression]};
case TOK_LPAREN:
var args = [];
while (this._lookahead(0) !== TOK_RPAREN) {
if (this._lookahead(0) === TOK_CURRENT) {
expression = {type: TOK_CURRENT};
this._advance();
} else {
expression = this.expression(0);
}
args.push(expression);
}
this._match(TOK_RPAREN);
return args[0];
default:
this._errorToken(token);
}
},