public static TreeNode GetAllTypeNode() { TypeDPTDateTimeNode nodeType = new TypeDPTDateTimeNode(); nodeType.Text = nodeType.KNXMainNumber + "." + nodeType.KNXSubNumber + " " + nodeType.DPTName; nodeType.Nodes.Add(DateTimeNode.GetTypeNode()); return(nodeType); }
public override void Visit(DateTimeNode node) { try { var temp = node.DateTime; } catch (Exception e) { _criticalErrors.Add(e); } }
public void SparqlOperatorApplicationSubtractDateTime1() { DateTimeOffset now = DateTimeOffset.Now; List <IValuedNode> ns = new List <IValuedNode>() { new DateTimeNode(null, now), new TimeSpanNode(null, new TimeSpan(1, 0, 0)) }; IValuedNode expected = new DateTimeNode(null, now.AddHours(-1)); this.TestApplication(SparqlOperatorType.Subtract, ns, expected, false); this.TestStrictApplication(SparqlOperatorType.Subtract, ns, expected, true); }
protected void MethodCallNodeExecuteCall <T>(T objectValue, AbstractSyntaxTreeNode item) { var method = objectValue.GetType().GetMethod(((MethodCallNode)item).Name); if (method != null) { var objectList = new List <object>(); for (int parameterCount = 0; parameterCount < ((MethodCallNode)item).parameterList.Count; parameterCount++) { var parameter = ((MethodCallNode)item).parameterList[parameterCount]; if (parameter is StringNode) { var value = ((StringNode)parameter).Value; DateTime dateTime = new DateTime(); if (DateTime.TryParse(value, out dateTime)) { objectList.Add(dateTime); } else { objectList.Add(value); } } else if (parameter is DateTimeNode) { var value = ((DateTimeNode)parameter).Value; objectList.Add(value); } else if (parameter is BooleanNode) { var value = ((BooleanNode)parameter).Value; objectList.Add(value); } else if (parameter is DoubleNode) { var value = ((DoubleNode)parameter).Value; objectList.Add(value); } else if (parameter is IntegerNode) { var value = ((IntegerNode)parameter).Value; objectList.Add(value); } } var result = method.Invoke(objectValue, objectList.ToArray()); int intOutValue; double doubleOutValue; bool boolOutValue; DateTime dateTimeOutValue; if (result == null) { NullNode nullNode = new NullNode(); valueStack.Push(nullNode); } else if (int.TryParse(result.ToString(), out intOutValue)) { IntegerNode integerNode = new IntegerNode(); integerNode.Value = intOutValue; valueStack.Push(integerNode); } else if (double.TryParse(result.ToString(), out doubleOutValue)) { DoubleNode doubleNode = new DoubleNode(); doubleNode.Value = doubleOutValue; valueStack.Push(doubleNode); } else if (bool.TryParse(result.ToString(), out boolOutValue)) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = boolOutValue; valueStack.Push(booleanNode); } else if (DateTime.TryParse(result.ToString(), out dateTimeOutValue)) { DateTimeNode dateTimeNode = new DateTimeNode(); dateTimeNode.Value = dateTimeOutValue; valueStack.Push(dateTimeNode); } else { StringNode stringNode = new StringNode(); stringNode.Value = result.ToString(); valueStack.Push(stringNode); } } }
/// <summary> /// Visit DateTime node. /// </summary> /// <param name="node">DateTime node that will be visited.</param> public void Visit(DateTimeNode node) { node.Accept(_visitor); }
public void Should_parse_datetime() { DateTimeNode result = (DateTimeNode)Parse("datetime'2000-10-11T10-10-10'"); Assert.Equal(DateTime.ParseExact("2000-10-11T10-10-10", "yyyy-MM-ddThh-mm-ss", null), result.Value); }
public bool Evaluate <T>(List <AbstractSyntaxTreeNode> postfixList, Dictionary <string, AbstractSyntaxTreeNode> symbolTable, T objectValue) { int setNameValue = 0; bool thenNode = false; bool elseNode = false; foreach (var item in postfixList) { if (item is IntegerNode || item is DoubleNode || item is DateTimeNode || item is BooleanNode || item is StringNode || item is NullNode) { valueStack.Push(item); } else if (item is SetNode) { var equalNode = postfixList[setNameValue - 1]; var valueNode = postfixList[setNameValue - 2]; var nameNode = postfixList[setNameValue - 3]; if (equalNode is EqualNode) { var pop = valueStack.Pop(); setList.Add(((VariableNode)nameNode).Name, valueNode); } else { var pop = valueStack.Pop(); var methodValueNode = postfixList[setNameValue - 1]; var methodNode = postfixList[setNameValue - 2]; if (methodNode is VariableNode) { setList.Add(((VariableNode)methodNode).Name, methodValueNode); } } } else if (item is ThenNode) { thenNode = true; } else if (item is ElseNode) { thenNode = false; elseNode = true; } else if (item is VariableNode) { if (symbolTable.ContainsKey(((VariableNode)item).Name)) { var property = objectValue.GetType().GetProperty(((VariableNode)item).Name); if (property != null) { object value = property.GetValue(objectValue, null); int intOutValue; double doubleOutValue; bool boolOutValue; DateTime dateTimeOutValue; if (value == null) { NullNode nullNode = new NullNode(); valueStack.Push(nullNode); } else if (int.TryParse(value.ToString(), out intOutValue)) { IntegerNode integerNode = new IntegerNode(); integerNode.Value = intOutValue; valueStack.Push(integerNode); } else if (double.TryParse(value.ToString(), out doubleOutValue)) { DoubleNode doubleNode = new DoubleNode(); doubleNode.Value = doubleOutValue; valueStack.Push(doubleNode); } else if (bool.TryParse(value.ToString(), out boolOutValue)) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = boolOutValue; valueStack.Push(booleanNode); } else if (DateTime.TryParse(value.ToString(), out dateTimeOutValue)) { DateTimeNode dateTimeNode = new DateTimeNode(); dateTimeNode.Value = dateTimeOutValue; valueStack.Push(dateTimeNode); } else { StringNode stringNode = new StringNode(); stringNode.Value = value.ToString(); valueStack.Push(stringNode); } } } } else if (item is MethodCallNode) { if (!thenNode && !elseNode) { MethodCallNodeExecuteCall(objectValue, item); } else if (thenNode) { var methodNodeName = ((MethodCallNode)item).Name; var list = new List <Tuple <AbstractSyntaxTreeNode, AbstractSyntaxTreeNode> >(); list.Add(new Tuple <AbstractSyntaxTreeNode, AbstractSyntaxTreeNode>(item, item)); thenList.Add(new Tuple <string, string>(methodNodeName, null), list); thenNode = false; } else if (elseNode) { var methodNodeName = ((MethodCallNode)item).Name; var list = new List <Tuple <AbstractSyntaxTreeNode, AbstractSyntaxTreeNode> >(); list.Add(new Tuple <AbstractSyntaxTreeNode, AbstractSyntaxTreeNode>(item, item)); elseList.Add(new Tuple <string, string>(methodNodeName, null), list); elseNode = false; } } else if (item is AddNode) { var secondoperand = valueStack.Pop(); var firstoperand = valueStack.Pop(); if (secondoperand is IntegerNode && firstoperand is IntegerNode) { IntegerNode integerNode = new IntegerNode(); integerNode.Value = ((IntegerNode)firstoperand).Value + ((IntegerNode)secondoperand).Value; valueStack.Push(integerNode); } else if (secondoperand is DoubleNode && firstoperand is DoubleNode) { DoubleNode doubleNode = new DoubleNode(); doubleNode.Value = ((DoubleNode)firstoperand).Value + ((DoubleNode)secondoperand).Value; valueStack.Push(doubleNode); } else if (secondoperand is IntegerNode && firstoperand is DoubleNode) { DoubleNode integerNode = new DoubleNode(); integerNode.Value = ((DoubleNode)firstoperand).Value + ((IntegerNode)secondoperand).Value; valueStack.Push(integerNode); } else if (secondoperand is DoubleNode && firstoperand is IntegerNode) { DoubleNode doubleNode = new DoubleNode(); doubleNode.Value = ((IntegerNode)firstoperand).Value + ((DoubleNode)secondoperand).Value; valueStack.Push(doubleNode); } } else if (item is SubNode) { var secondoperand = valueStack.Pop(); var firstoperand = valueStack.Pop(); if (secondoperand is IntegerNode && firstoperand is IntegerNode) { IntegerNode integerNode = new IntegerNode(); integerNode.Value = ((IntegerNode)firstoperand).Value - ((IntegerNode)secondoperand).Value; valueStack.Push(integerNode); } else if (secondoperand is DoubleNode && firstoperand is DoubleNode) { DoubleNode doubleNode = new DoubleNode(); doubleNode.Value = ((DoubleNode)firstoperand).Value - ((DoubleNode)secondoperand).Value; valueStack.Push(doubleNode); } else if (secondoperand is IntegerNode && firstoperand is DoubleNode) { DoubleNode integerNode = new DoubleNode(); integerNode.Value = ((DoubleNode)firstoperand).Value - ((IntegerNode)secondoperand).Value; valueStack.Push(integerNode); } else if (secondoperand is DoubleNode && firstoperand is IntegerNode) { DoubleNode doubleNode = new DoubleNode(); doubleNode.Value = ((IntegerNode)firstoperand).Value - ((DoubleNode)secondoperand).Value; valueStack.Push(doubleNode); } } else if (item is MulNode) { var secondoperand = valueStack.Pop(); var firstoperand = valueStack.Pop(); if (secondoperand is IntegerNode && firstoperand is IntegerNode) { IntegerNode integerNode = new IntegerNode(); integerNode.Value = ((IntegerNode)firstoperand).Value * ((IntegerNode)secondoperand).Value; valueStack.Push(integerNode); } else if (secondoperand is DoubleNode && firstoperand is DoubleNode) { DoubleNode doubleNode = new DoubleNode(); doubleNode.Value = ((DoubleNode)firstoperand).Value * ((DoubleNode)secondoperand).Value; valueStack.Push(doubleNode); } else if (secondoperand is IntegerNode && firstoperand is DoubleNode) { DoubleNode integerNode = new DoubleNode(); integerNode.Value = ((DoubleNode)firstoperand).Value * ((IntegerNode)secondoperand).Value; valueStack.Push(integerNode); } else if (secondoperand is DoubleNode && firstoperand is IntegerNode) { DoubleNode doubleNode = new DoubleNode(); doubleNode.Value = ((IntegerNode)firstoperand).Value * ((DoubleNode)secondoperand).Value; valueStack.Push(doubleNode); } } else if (item is DivNode) { var secondoperand = valueStack.Pop(); var firstoperand = valueStack.Pop(); if (secondoperand is IntegerNode && firstoperand is IntegerNode) { IntegerNode integerNode = new IntegerNode(); integerNode.Value = ((IntegerNode)firstoperand).Value / ((IntegerNode)secondoperand).Value; valueStack.Push(integerNode); } else if (secondoperand is DoubleNode && firstoperand is DoubleNode) { DoubleNode doubleNode = new DoubleNode(); doubleNode.Value = ((DoubleNode)firstoperand).Value / ((DoubleNode)secondoperand).Value; valueStack.Push(doubleNode); } else if (secondoperand is IntegerNode && firstoperand is DoubleNode) { DoubleNode integerNode = new DoubleNode(); integerNode.Value = ((DoubleNode)firstoperand).Value / ((IntegerNode)secondoperand).Value; valueStack.Push(integerNode); } else if (secondoperand is DoubleNode && firstoperand is IntegerNode) { DoubleNode doubleNode = new DoubleNode(); doubleNode.Value = ((IntegerNode)firstoperand).Value / ((DoubleNode)secondoperand).Value; valueStack.Push(doubleNode); } } else if (item is ModuloNode) { var secondoperand = valueStack.Pop(); var firstoperand = valueStack.Pop(); if (secondoperand is IntegerNode && firstoperand is IntegerNode) { IntegerNode integerNode = new IntegerNode(); integerNode.Value = ((IntegerNode)firstoperand).Value % ((IntegerNode)secondoperand).Value; valueStack.Push(integerNode); } else if (secondoperand is DoubleNode && firstoperand is DoubleNode) { DoubleNode doubleNode = new DoubleNode(); doubleNode.Value = ((DoubleNode)firstoperand).Value % ((DoubleNode)secondoperand).Value; valueStack.Push(doubleNode); } else if (secondoperand is IntegerNode && firstoperand is DoubleNode) { DoubleNode integerNode = new DoubleNode(); integerNode.Value = ((DoubleNode)firstoperand).Value % ((IntegerNode)secondoperand).Value; valueStack.Push(integerNode); } else if (secondoperand is DoubleNode && firstoperand is IntegerNode) { DoubleNode doubleNode = new DoubleNode(); doubleNode.Value = ((IntegerNode)firstoperand).Value % ((DoubleNode)secondoperand).Value; valueStack.Push(doubleNode); } } else if (item is LikeNode) { var secondoperand = valueStack.Pop(); var firstoperand = valueStack.Pop(); if (secondoperand is StringNode && firstoperand is StringNode) { BooleanNode booleanNode = new BooleanNode(); var firstoperatorString = ((StringNode)firstoperand).Value; var secondperatorString = ((StringNode)secondoperand).Value; var result = Like(firstoperatorString, secondperatorString); booleanNode.Value = result; valueStack.Push(booleanNode); } else if (secondoperand is StringNode && firstoperand is IntegerNode) { BooleanNode booleanNode = new BooleanNode(); var firstoperatorString = ((IntegerNode)firstoperand).Value.ToString(); var secondperatorString = ((StringNode)secondoperand).Value; var result = Like(firstoperatorString, secondperatorString); booleanNode.Value = result; valueStack.Push(booleanNode); } else if (secondoperand is StringNode && firstoperand is DoubleNode) { BooleanNode booleanNode = new BooleanNode(); var firstoperatorString = ((DoubleNode)firstoperand).Value.ToString(); var secondperatorString = ((StringNode)secondoperand).Value; var result = Like(firstoperatorString, secondperatorString); booleanNode.Value = result; valueStack.Push(booleanNode); } else if (secondoperand is StringNode && firstoperand is DateTimeNode) { BooleanNode booleanNode = new BooleanNode(); var firstoperatorString = ((DateTimeNode)firstoperand).Value.ToString(); var secondperatorString = ((StringNode)secondoperand).Value; var result = Like(firstoperatorString, secondperatorString); booleanNode.Value = result; valueStack.Push(booleanNode); } } else if (item is EqualNode) { var secondoperand = valueStack.Pop(); var firstoperand = valueStack.Pop(); if (secondoperand is IntegerNode && firstoperand is IntegerNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((IntegerNode)firstoperand).Value == ((IntegerNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DoubleNode && firstoperand is DoubleNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DoubleNode)firstoperand).Value == ((DoubleNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is BooleanNode && firstoperand is BooleanNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((BooleanNode)firstoperand).Value == ((BooleanNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is StringNode && firstoperand is StringNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((StringNode)firstoperand).Value == ((StringNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DateTimeNode && firstoperand is DateTimeNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DateTimeNode)firstoperand).Value == ((DateTimeNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is IntegerNode && firstoperand is DoubleNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DoubleNode)firstoperand).Value == ((IntegerNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DoubleNode && firstoperand is IntegerNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((IntegerNode)firstoperand).Value == ((DoubleNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DateTimeNode && firstoperand is DateTimeNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DateTimeNode)firstoperand).Value == ((DateTimeNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DateTimeNode && firstoperand is StringNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((StringNode)firstoperand).Value == ((DateTimeNode)secondoperand).Value.ToString(); valueStack.Push(booleanNode); } else if (secondoperand is StringNode && firstoperand is DateTimeNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DateTimeNode)firstoperand).Value.ToString() == ((StringNode)secondoperand).Value; valueStack.Push(booleanNode); } } else if (item is UnEqualNode) { var secondoperand = valueStack.Pop(); var firstoperand = valueStack.Pop(); if (secondoperand is IntegerNode && firstoperand is IntegerNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((IntegerNode)firstoperand).Value != ((IntegerNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DoubleNode && firstoperand is DoubleNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DoubleNode)firstoperand).Value != ((DoubleNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is BooleanNode && firstoperand is BooleanNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((BooleanNode)firstoperand).Value != ((BooleanNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is StringNode && firstoperand is StringNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((StringNode)firstoperand).Value != ((StringNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DateTimeNode && firstoperand is DateTimeNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DateTimeNode)firstoperand).Value != ((DateTimeNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is IntegerNode && firstoperand is DoubleNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DoubleNode)firstoperand).Value != ((IntegerNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DoubleNode && firstoperand is IntegerNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((IntegerNode)firstoperand).Value != ((DoubleNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DateTimeNode && firstoperand is DateTimeNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DateTimeNode)firstoperand).Value != ((DateTimeNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DateTimeNode && firstoperand is StringNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((StringNode)firstoperand).Value != ((DateTimeNode)secondoperand).Value.ToString(); valueStack.Push(booleanNode); } else if (secondoperand is StringNode && firstoperand is DateTimeNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DateTimeNode)firstoperand).Value.ToString() != ((StringNode)secondoperand).Value; valueStack.Push(booleanNode); } } else if (item is SmallerThenNode) { var secondoperand = valueStack.Pop(); var firstoperand = valueStack.Pop(); if (secondoperand is IntegerNode && firstoperand is IntegerNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((IntegerNode)firstoperand).Value < ((IntegerNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DoubleNode && firstoperand is DoubleNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DoubleNode)firstoperand).Value < ((DoubleNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is IntegerNode && firstoperand is DoubleNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DoubleNode)firstoperand).Value < ((IntegerNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DoubleNode && firstoperand is IntegerNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((IntegerNode)firstoperand).Value < ((DoubleNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DateTimeNode && firstoperand is DateTimeNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DateTimeNode)firstoperand).Value < ((DateTimeNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DateTimeNode && firstoperand is StringNode) { BooleanNode booleanNode = new BooleanNode(); var str = ((StringNode)firstoperand).Value; booleanNode.Value = DateTime.Parse(str) < ((DateTimeNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is StringNode && firstoperand is DateTimeNode) { BooleanNode booleanNode = new BooleanNode(); var str = ((StringNode)secondoperand).Value; booleanNode.Value = ((DateTimeNode)firstoperand).Value < DateTime.Parse(str); valueStack.Push(booleanNode); } } else if (item is SmallerThenOrEqualNode) { var secondoperand = valueStack.Pop(); var firstoperand = valueStack.Pop(); if (secondoperand is IntegerNode && firstoperand is IntegerNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((IntegerNode)firstoperand).Value <= ((IntegerNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DoubleNode && firstoperand is DoubleNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DoubleNode)firstoperand).Value <= ((DoubleNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is IntegerNode && firstoperand is DoubleNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DoubleNode)firstoperand).Value <= ((IntegerNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DoubleNode && firstoperand is IntegerNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((IntegerNode)firstoperand).Value <= ((DoubleNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DateTimeNode && firstoperand is DateTimeNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DateTimeNode)firstoperand).Value <= ((DateTimeNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DateTimeNode && firstoperand is StringNode) { BooleanNode booleanNode = new BooleanNode(); var str = ((StringNode)firstoperand).Value; booleanNode.Value = DateTime.Parse(str) <= ((DateTimeNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is StringNode && firstoperand is DateTimeNode) { BooleanNode booleanNode = new BooleanNode(); var str = ((StringNode)secondoperand).Value; booleanNode.Value = ((DateTimeNode)firstoperand).Value <= DateTime.Parse(str); valueStack.Push(booleanNode); } } else if (item is GreaterThenNode) { var secondoperand = valueStack.Pop(); var firstoperand = valueStack.Pop(); if (secondoperand is IntegerNode && firstoperand is IntegerNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((IntegerNode)firstoperand).Value > ((IntegerNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DoubleNode && firstoperand is DoubleNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DoubleNode)firstoperand).Value > ((DoubleNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is IntegerNode && firstoperand is DoubleNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DoubleNode)firstoperand).Value > ((IntegerNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DoubleNode && firstoperand is IntegerNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((IntegerNode)firstoperand).Value > ((DoubleNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DateTimeNode && firstoperand is DateTimeNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DateTimeNode)firstoperand).Value > ((DateTimeNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DateTimeNode && firstoperand is StringNode) { BooleanNode booleanNode = new BooleanNode(); var str = ((StringNode)firstoperand).Value; booleanNode.Value = DateTime.Parse(str) > ((DateTimeNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is StringNode && firstoperand is DateTimeNode) { BooleanNode booleanNode = new BooleanNode(); var str = ((StringNode)secondoperand).Value; booleanNode.Value = ((DateTimeNode)firstoperand).Value > DateTime.Parse(str); valueStack.Push(booleanNode); } } else if (item is GreaterThenOrEqualNode) { var secondoperand = valueStack.Pop(); var firstoperand = valueStack.Pop(); if (secondoperand is IntegerNode && firstoperand is IntegerNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((IntegerNode)firstoperand).Value >= ((IntegerNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DoubleNode && firstoperand is DoubleNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DoubleNode)firstoperand).Value >= ((DoubleNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is IntegerNode && firstoperand is DoubleNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DoubleNode)firstoperand).Value >= ((IntegerNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DoubleNode && firstoperand is IntegerNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((IntegerNode)firstoperand).Value >= ((DoubleNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DateTimeNode && firstoperand is DateTimeNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((DateTimeNode)firstoperand).Value >= ((DateTimeNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is DateTimeNode && firstoperand is StringNode) { BooleanNode booleanNode = new BooleanNode(); var str = ((StringNode)firstoperand).Value; booleanNode.Value = DateTime.Parse(str) >= ((DateTimeNode)secondoperand).Value; valueStack.Push(booleanNode); } else if (secondoperand is StringNode && firstoperand is DateTimeNode) { BooleanNode booleanNode = new BooleanNode(); var str = ((StringNode)secondoperand).Value; booleanNode.Value = ((DateTimeNode)firstoperand).Value >= DateTime.Parse(str); valueStack.Push(booleanNode); } } else if (item is IsNode) { var secondoperand = valueStack.Pop(); var firstoperand = valueStack.Pop(); if (secondoperand is NullNode && firstoperand is NullNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = true; valueStack.Push(booleanNode); } else { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = false; valueStack.Push(booleanNode); } } else if (item is OrNode) { var secondoperand = valueStack.Pop(); var firstoperand = valueStack.Pop(); if (secondoperand is BooleanNode && firstoperand is BooleanNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((BooleanNode)firstoperand).Value || ((BooleanNode)secondoperand).Value; valueStack.Push(booleanNode); } } else if (item is AndNode) { var secondoperand = valueStack.Pop(); var firstoperand = valueStack.Pop(); if (secondoperand is BooleanNode && firstoperand is BooleanNode) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = ((BooleanNode)firstoperand).Value && ((BooleanNode)secondoperand).Value; valueStack.Push(booleanNode); } } setNameValue++; } if (valueStack.Count > 0) { var endValue = valueStack.Pop(); if (endValue is BooleanNode) { if (((BooleanNode)endValue).Value) { if (setList.Count > 0) { foreach (var item in setList) { var propertyName = item.Key; var objectToSet = item.Value; var objectCastValue = new object(); if (objectToSet is IntegerNode) { objectCastValue = ((IntegerNode)objectToSet).Value; } else if (objectToSet is DoubleNode) { objectCastValue = ((DoubleNode)objectToSet).Value; } else if (objectToSet is BooleanNode) { objectCastValue = ((BooleanNode)objectToSet).Value; } else if (objectToSet is StringNode) { objectCastValue = ((StringNode)objectToSet).Value; } else if (objectToSet is DateTimeNode) { objectCastValue = ((DateTimeNode)objectToSet).Value; } var property = objectValue.GetType().GetProperty(propertyName); if (property != null) { property.SetValue(objectValue, objectCastValue, null); } else { var method = objectValue.GetType().GetMethod(propertyName); if (method != null) { method.Invoke(objectValue, new object[] { objectCastValue }); } } } } } if (((BooleanNode)endValue).Value) { foreach (var item in thenList) { MethodCallNodeExecuteCall(objectValue, item.Value.First().Item2); } } else { foreach (var item in elseList) { MethodCallNodeExecuteCall(objectValue, item.Value.First().Item2); } } return(((BooleanNode)endValue).Value); } } return(false); }
/// <summary> /// Visit DateTime node. /// </summary> /// <param name="node">DateTime node of AST</param> public abstract void Visit(DateTimeNode node);
public void Visit(DateTimeNode node) { }
/// <summary> /// Performs "DateTime" specific operations. /// </summary> /// <param name="node">The "DateTime" node.</param> public virtual void Visit(DateTimeNode node) { Instructions.Add(new PushDateTimeInstruction(node.DateTime)); }
protected void MethodCallNodeExecuteCall <T>(T objectValue, AbstractSyntaxTreeNode item) { var array = objectValue.GetType().IsArray; if (array) { IEnumerable arrayItems = objectValue as IEnumerable; foreach (var arrayItem in arrayItems) { var arrayMethod = arrayItem.GetType().GetMethod(((MethodCallNode)item).Name); if (arrayMethod != null) { var objectList = new List <object>(); for (int parameterCount = 0; parameterCount < ((MethodCallNode)item).parameterList.Count; parameterCount++) { var parameter = ((MethodCallNode)item).parameterList[parameterCount]; if (parameter is StringNode) { var value = ((StringNode)parameter).Value; DateTime dateTime = new DateTime(); if (DateTime.TryParse(value, out dateTime)) { objectList.Add(dateTime); } else { objectList.Add(value); } } else if (parameter is DateTimeNode) { var value = ((DateTimeNode)parameter).Value; objectList.Add(value); } else if (parameter is BooleanNode) { var value = ((BooleanNode)parameter).Value; objectList.Add(value); } else if (parameter is DoubleNode) { var value = ((DoubleNode)parameter).Value; objectList.Add(value); } else if (parameter is IntegerNode) { var value = ((IntegerNode)parameter).Value; objectList.Add(value); } else if (parameter is ObjectNode) { var value = (ObjectNode)parameter; var name = value.PropertyName; var valueItem = value.ObjectValue.GetType().GetProperty(name).GetValue(value.ObjectValue, null); if (valueItem is int) { objectList.Add((int)valueItem); } else if (valueItem is double) { objectList.Add((double)valueItem); } else if (valueItem is bool) { objectList.Add((bool)valueItem); } else if (valueItem is DateTime) { objectList.Add((DateTime)valueItem); } else if (valueItem is String) { objectList.Add((String)valueItem); } } } var result = arrayMethod.Invoke(arrayItem, objectList.ToArray()); int intOutValue; double doubleOutValue; bool boolOutValue; DateTime dateTimeOutValue; if (result == null) { NullNode nullNode = new NullNode(); valueStack.Push(nullNode); } else if (int.TryParse(result.ToString(), out intOutValue)) { IntegerNode integerNode = new IntegerNode(); integerNode.Value = intOutValue; valueStack.Push(integerNode); } else if (double.TryParse(result.ToString(), out doubleOutValue)) { DoubleNode doubleNode = new DoubleNode(); doubleNode.Value = doubleOutValue; valueStack.Push(doubleNode); } else if (bool.TryParse(result.ToString(), out boolOutValue)) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = boolOutValue; valueStack.Push(booleanNode); } else if (DateTime.TryParse(result.ToString(), out dateTimeOutValue)) { DateTimeNode dateTimeNode = new DateTimeNode(); dateTimeNode.Value = dateTimeOutValue; valueStack.Push(dateTimeNode); } else { StringNode stringNode = new StringNode(); stringNode.Value = result.ToString(); valueStack.Push(stringNode); } } } } var method = objectValue.GetType().GetMethod(((MethodCallNode)item).Name); if (method != null) { var objectList = new List <object>(); for (int parameterCount = 0; parameterCount < ((MethodCallNode)item).parameterList.Count; parameterCount++) { var parameter = ((MethodCallNode)item).parameterList[parameterCount]; if (parameter is StringNode) { var value = ((StringNode)parameter).Value; DateTime dateTime = new DateTime(); if (DateTime.TryParse(value, out dateTime)) { objectList.Add(dateTime); } else { objectList.Add(value); } } else if (parameter is DateTimeNode) { var value = ((DateTimeNode)parameter).Value; objectList.Add(value); } else if (parameter is BooleanNode) { var value = ((BooleanNode)parameter).Value; objectList.Add(value); } else if (parameter is DoubleNode) { var value = ((DoubleNode)parameter).Value; objectList.Add(value); } else if (parameter is IntegerNode) { var value = ((IntegerNode)parameter).Value; objectList.Add(value); } } var result = method.Invoke(objectValue, objectList.ToArray()); int intOutValue; double doubleOutValue; bool boolOutValue; DateTime dateTimeOutValue; if (result == null) { NullNode nullNode = new NullNode(); valueStack.Push(nullNode); } else if (int.TryParse(result.ToString(), out intOutValue)) { IntegerNode integerNode = new IntegerNode(); integerNode.Value = intOutValue; valueStack.Push(integerNode); } else if (double.TryParse(result.ToString(), out doubleOutValue)) { DoubleNode doubleNode = new DoubleNode(); doubleNode.Value = doubleOutValue; valueStack.Push(doubleNode); } else if (bool.TryParse(result.ToString(), out boolOutValue)) { BooleanNode booleanNode = new BooleanNode(); booleanNode.Value = boolOutValue; valueStack.Push(booleanNode); } else if (DateTime.TryParse(result.ToString(), out dateTimeOutValue)) { DateTimeNode dateTimeNode = new DateTimeNode(); dateTimeNode.Value = dateTimeOutValue; valueStack.Push(dateTimeNode); } else { StringNode stringNode = new StringNode(); stringNode.Value = result.ToString(); valueStack.Push(stringNode); } } }