Expression Term() { var lhs = Group(); while (true) { var token = Peek(); if (token != null) { if (token.Type == TokenType.Operator && (string)token.Value == "*") { Next(); var rhs = Group(); var ret = new BinOpExpression(); ret.Line = token.Line; ret.Lhs = lhs; ret.Rhs = rhs; ret.Operator = (string)token.Value; lhs = ret; } else if (token.Type == TokenType.Operator && (string)token.Value == "/") { Next(); var rhs = Group(); var ret = new BinOpExpression(); ret.Line = token.Line; ret.Lhs = lhs; ret.Rhs = rhs; ret.Operator = (string)token.Value; lhs = ret; } else if (token.Type == TokenType.Operator) { break; } else if (token.Type == TokenType.RightParentheses) { break; } else if (token.Type == TokenType.Equal || token.Type == TokenType.NewLine) { break; } else { throw new CompileException(string.Format("Invalid token {0}", token.Type), token.Line); } } else { return(lhs); } } return(lhs); }
Expression Term() { var lhs = Group(); while (true) { var token = Peek(); if (token != null) { if (token.Type == TokenType.Operator && ((string)token.Value == "*" || (string)token.Value == "/" || (string)token.Value == "%")) { Next(); var rhs = Group(); var ret = new BinOpExpression(); ret.Line = token.Line; ret.Lhs = lhs; ret.Rhs = rhs; ret.Operator = (string)token.Value; lhs = ret; } else if (token.Type == TokenType.Operator) { break; } else if (token.Type == TokenType.RightParentheses) { break; } else if (token.Type == TokenType.Equal || token.Type == TokenType.NewLine) { break; } else if (token.Type == TokenType.Comma) { break; } else { throw new InvalidTokenException(token.ToString(), token.Line); } } else { return(lhs); } } return(lhs); }