MCPcopy Create free account
hub / github.com/microsoft/SandDance / parseBinaryExpression

Function parseBinaryExpression

docs/app/js/sanddance-app.js:144319–144364  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

144317// 11.10 Binary Bitwise Operators
144318// 11.11 Binary Logical Operators
144319function parseBinaryExpression() {
144320 var marker, markers, expr, token, prec, stack, right, operator, left, i;
144321 marker = lookahead;
144322 left = parseUnaryExpression();
144323 token = lookahead;
144324 prec = binaryPrecedence(token);
144325 if (prec === 0) return left;
144326 token.prec = prec;
144327 lex();
144328 markers = [
144329 marker,
144330 lookahead
144331 ];
144332 right = parseUnaryExpression();
144333 stack = [
144334 left,
144335 token,
144336 right
144337 ];
144338 while((prec = binaryPrecedence(lookahead)) > 0){
144339 // Reduce: make a binary expression from the three topmost entries.
144340 while(stack.length > 2 && prec <= stack[stack.length - 2].prec){
144341 right = stack.pop();
144342 operator = stack.pop().value;
144343 left = stack.pop();
144344 markers.pop();
144345 expr = finishBinaryExpression(operator, left, right);
144346 stack.push(expr);
144347 } // Shift.
144348 token = lex();
144349 token.prec = prec;
144350 stack.push(token);
144351 markers.push(lookahead);
144352 expr = parseUnaryExpression();
144353 stack.push(expr);
144354 } // Final reduce to clean-up the stack.
144355 i = stack.length - 1;
144356 expr = stack[i];
144357 markers.pop();
144358 while(i > 1){
144359 markers.pop();
144360 expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);
144361 i -= 2;
144362 }
144363 return expr;
144364} // 11.12 Conditional Operator
144365function parseConditionalExpression() {
144366 var expr, consequent, alternate;
144367 expr = parseBinaryExpression();

Callers 1

Calls 4

parseUnaryExpressionFunction · 0.70
binaryPrecedenceFunction · 0.70
lexFunction · 0.70
finishBinaryExpressionFunction · 0.70

Tested by

no test coverage detected