parseExpression method
Implementation
Expression? parseExpression(int precedence) {
// Only consume a token if it could potentially be a prefix parselet
for (var type in prefixParselets.keys) {
if (next(type)) {
var left = prefixParselets[type]!.parse(this, _current);
while (precedence < _nextPrecedence()) {
_current = scanner.tokens[++_index];
if (_current!.type == TokenType.slash && peek()?.type == TokenType.gt) {
// Handle `/>`
//
// Don't register this as an infix expression.
// Instead, backtrack, and return the current expression.
_index--;
return left;
}
var infix = infixParselets[_current!.type]!;
var newLeft = infix.parse(this, left, _current);
if (newLeft == null) {
if (_current!.type == TokenType.gt) _index--;
return left;
}
left = newLeft;
}
return left;
}
}
// Nothing was parsed; return null.
return null;
}