private SyntaxExpression ParseBinaryExpression(int parentOperatorPrecedence = 0) { SyntaxExpression left; left = ParseFactorExpression(); while (true) { var precedence = CurrentToken.GetOperatorPrecedence(); if (precedence == 0 || precedence <= parentOperatorPrecedence) { break; } var operatorToken = NextToken(); var right = ParseBinaryExpression(precedence); left = new SyntaxBinaryExpression(left, operatorToken, right); } return(left); }