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

Function parseBinaryExpression

docs/tests/v2/es6/js/sanddance.js:129258–129307  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

129256
129257
129258function parseBinaryExpression() {
129259 var marker, markers, expr, token, prec, stack, right, operator, left, i;
129260 marker = lookahead;
129261 left = parseUnaryExpression();
129262 token = lookahead;
129263 prec = binaryPrecedence(token);
129264
129265 if (prec === 0) {
129266 return left;
129267 }
129268
129269 token.prec = prec;
129270 lex();
129271 markers = [marker, lookahead];
129272 right = parseUnaryExpression();
129273 stack = [left, token, right];
129274
129275 while ((prec = binaryPrecedence(lookahead)) > 0) {
129276 // Reduce: make a binary expression from the three topmost entries.
129277 while (stack.length > 2 && prec <= stack[stack.length - 2].prec) {
129278 right = stack.pop();
129279 operator = stack.pop().value;
129280 left = stack.pop();
129281 markers.pop();
129282 expr = finishBinaryExpression(operator, left, right);
129283 stack.push(expr);
129284 } // Shift.
129285
129286
129287 token = lex();
129288 token.prec = prec;
129289 stack.push(token);
129290 markers.push(lookahead);
129291 expr = parseUnaryExpression();
129292 stack.push(expr);
129293 } // Final reduce to clean-up the stack.
129294
129295
129296 i = stack.length - 1;
129297 expr = stack[i];
129298 markers.pop();
129299
129300 while (i > 1) {
129301 markers.pop();
129302 expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);
129303 i -= 2;
129304 }
129305
129306 return expr;
129307} // 11.12 Conditional Operator
129308
129309
129310function parseConditionalExpression() {

Callers 1

Calls 4

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

Tested by

no test coverage detected