public IExpression ParseExpression(BindingPower bindingPower) { var prefixParslet = GetPrefixParslet(_curToken.Type); if (prefixParslet == null) { Errors.Add($"No Prefix Parslet for {_curToken.Type}"); return(null); } var leftexp = prefixParslet.Parse(this, _curToken); while (!PeekTokenIs(TokenType.EOF) && bindingPower < PeekBindingPower()) { var infixParslet = GetInfixParslet(_peekToken.Type); if (infixParslet == null) { return(leftexp); } NextToken(); leftexp = infixParslet.Parse(this, leftexp, _curToken); } return(leftexp); }
public IndexExpressionParslet(BindingPower bp) { _bindingPower = bp; }
public ParseCallExpressionParslet(BindingPower bp, bool isRight) { _bindingPower = bp; _isRight = isRight; }
public InfixOperatorParslet(BindingPower bindingPower, bool isRight) { _bindingPower = bindingPower; _isRight = isRight; }