binaryExpression property
Parser<Expression>
get
binaryExpression
Implementation
Parser<Expression> get binaryExpression =>
token.plusSeparated(binaryOperation).map((sl) {
var l = sl.sequential.toList();
var first = l[0];
var stack = <dynamic>[first];
for (var i = 1; i < l.length; i += 2) {
var op = l[i];
var prec = BinaryExpression.precedenceForOperator(op);
// Reduce: make a binary expression from the three topmost entries.
while ((stack.length > 2) &&
(prec <=
BinaryExpression.precedenceForOperator(
stack[stack.length - 2]))) {
var right = stack.removeLast();
var op = stack.removeLast();
var left = stack.removeLast();
var node = BinaryExpression(op, left, right);
stack.add(node);
}
var node = l[i + 1];
stack.addAll([op, node]);
}
var i = stack.length - 1;
var node = stack[i];
while (i > 1) {
node = BinaryExpression(stack[i - 1], stack[i - 2], node);
i -= 2;
}
return node;
});