private GenericExpressionNode Factor(string expression) { // Checks for TokenTypes String, Numeric, Property, ItemMetadata, and ItemList. GenericExpressionNode arg = this.Arg(expression); // If it's one of those, return it. if (arg != null) { return arg; } // If it's not one of those, check for other TokenTypes. Token current = lexer.CurrentToken; if (Same(expression, Token.TokenType.Function)) { if (!Same(expression, Token.TokenType.LeftParenthesis)) { errorPosition = lexer.GetErrorPosition(); ProjectErrorUtilities.VerifyThrowInvalidProject(false, this.conditionAttribute, "UnexpectedTokenInCondition", lexer.IsNextString(), errorPosition); return null; } ArrayList arglist = new ArrayList(); Arglist(expression, arglist); if (!Same(expression, Token.TokenType.RightParenthesis)) { errorPosition = lexer.GetErrorPosition(); ProjectErrorUtilities.VerifyThrowInvalidProject(false, this.conditionAttribute, "UnexpectedTokenInCondition", expression, lexer.IsNextString(), errorPosition); return null; } return new FunctionCallExpressionNode( current.String, arglist); } else if (Same(expression, Token.TokenType.LeftParenthesis)) { GenericExpressionNode child = Expr(expression); if (Same(expression, Token.TokenType.RightParenthesis)) return child; else { errorPosition = lexer.GetErrorPosition(); ProjectErrorUtilities.VerifyThrowInvalidProject(false, this.conditionAttribute, "UnexpectedTokenInCondition", expression, lexer.IsNextString(), errorPosition); } } else if (Same(expression, Token.TokenType.Not)) { OperatorExpressionNode notNode = new NotExpressionNode(); GenericExpressionNode expr = Factor(expression); if (expr == null) { errorPosition = lexer.GetErrorPosition(); ProjectErrorUtilities.VerifyThrowInvalidProject(false, this.conditionAttribute, "UnexpectedTokenInCondition", expression, lexer.IsNextString(), errorPosition); } notNode.LeftChild = expr; return notNode; } else { errorPosition = lexer.GetErrorPosition(); ProjectErrorUtilities.VerifyThrowInvalidProject(false, this.conditionAttribute, "UnexpectedTokenInCondition", expression, lexer.IsNextString(), errorPosition); } return null; }
private GenericExpressionNode Factor(string expression) { // Checks for TokenTypes String, Numeric, Property, ItemMetadata, and ItemList. GenericExpressionNode arg = this.Arg(expression); // If it's one of those, return it. if (arg != null) { return(arg); } // If it's not one of those, check for other TokenTypes. Token current = lexer.CurrentToken; if (Same(expression, Token.TokenType.Function)) { if (!Same(expression, Token.TokenType.LeftParenthesis)) { errorPosition = lexer.GetErrorPosition(); ProjectErrorUtilities.VerifyThrowInvalidProject(false, this.conditionAttribute, "UnexpectedTokenInCondition", lexer.IsNextString(), errorPosition); return(null); } ArrayList arglist = new ArrayList(); Arglist(expression, arglist); if (!Same(expression, Token.TokenType.RightParenthesis)) { errorPosition = lexer.GetErrorPosition(); ProjectErrorUtilities.VerifyThrowInvalidProject(false, this.conditionAttribute, "UnexpectedTokenInCondition", expression, lexer.IsNextString(), errorPosition); return(null); } return(new FunctionCallExpressionNode(current.String, arglist)); } else if (Same(expression, Token.TokenType.LeftParenthesis)) { GenericExpressionNode child = Expr(expression); if (Same(expression, Token.TokenType.RightParenthesis)) { return(child); } else { errorPosition = lexer.GetErrorPosition(); ProjectErrorUtilities.VerifyThrowInvalidProject(false, this.conditionAttribute, "UnexpectedTokenInCondition", expression, lexer.IsNextString(), errorPosition); } } else if (Same(expression, Token.TokenType.Not)) { OperatorExpressionNode notNode = new NotExpressionNode(); GenericExpressionNode expr = Factor(expression); if (expr == null) { errorPosition = lexer.GetErrorPosition(); ProjectErrorUtilities.VerifyThrowInvalidProject(false, this.conditionAttribute, "UnexpectedTokenInCondition", expression, lexer.IsNextString(), errorPosition); } notNode.LeftChild = expr; return(notNode); } else { errorPosition = lexer.GetErrorPosition(); ProjectErrorUtilities.VerifyThrowInvalidProject(false, this.conditionAttribute, "UnexpectedTokenInCondition", expression, lexer.IsNextString(), errorPosition); } return(null); }