public ProgramState PushValue(SymbolicValue symbolicValue) { return(new ProgramState( Values, Constraints, ProgramPointVisitCounts, ExpressionStack.Push(symbolicValue), Relationships)); }
/// <summary> /// Visits the given input data node. /// </summary> /// <param name="data">Input data node.</param> public override void PostVisit(InputData.PDDL.PredicateExpression data) { int predicateNameId = IdManager.Predicates.GetId(data.Name, data.Terms.Count); List <ITerm> terms = new List <ITerm>(); data.Terms.ForEach(term => terms.Add(TermsBuilder.Value.Build(term))); ExpressionStack.Push(new PredicateExpression(new Atom(predicateNameId, terms), IdManager)); }
/// <summary> /// Visits the given input data node. /// </summary> /// <param name="data">Input data node.</param> public override void PostVisit(InputData.PDDL.OrExpression data) { List <IExpression> arguments = new List <IExpression>(); for (int i = 0; i < data.Arguments.Count; ++i) { arguments.Add(ExpressionStack.Pop()); } arguments.Reverse(); ExpressionStack.Push(new OrExpression(arguments)); }
/// <summary> /// Visits the given input data node. /// </summary> /// <param name="data">Input data node.</param> public override void PostVisit(InputData.PDDL.NumericFunction data) { int functionNameId = IdManager.Functions.GetId(data.Name, data.Terms.Count); List <ITerm> argumentTerms = new List <ITerm>(); foreach (var term in data.Terms) { argumentTerms.Add(TermsBuilder.Value.Build(term)); } ExpressionStack.Push(new NumericFunction(new Atom(functionNameId, argumentTerms), IdManager)); }
/// <summary> /// Visits the given input data node. /// </summary> /// <param name="data">Input data node.</param> public override void PostVisit(InputData.PDDL.NumericCompareExpression data) { NumericExpressionsBuilder numericExpressionsBuilder = new NumericExpressionsBuilder(IdManager); INumericExpression firstArgument = numericExpressionsBuilder.Build(data.NumericExpression1); INumericExpression secondArgument = numericExpressionsBuilder.Build(data.NumericExpression2); NumericCompareExpression.RelationalOperator relOperator = NumericCompareExpression.RelationalOperator.EQ; switch (data.NumericComparer) { case InputData.PDDL.Traits.NumericComparer.EQ: { relOperator = NumericCompareExpression.RelationalOperator.EQ; break; } case InputData.PDDL.Traits.NumericComparer.LT: { relOperator = NumericCompareExpression.RelationalOperator.LT; break; } case InputData.PDDL.Traits.NumericComparer.LTE: { relOperator = NumericCompareExpression.RelationalOperator.LTE; break; } case InputData.PDDL.Traits.NumericComparer.GT: { relOperator = NumericCompareExpression.RelationalOperator.GT; break; } case InputData.PDDL.Traits.NumericComparer.GTE: { relOperator = NumericCompareExpression.RelationalOperator.GTE; break; } default: { Debug.Assert(false, "Unhandled operator!"); break; } } ExpressionStack.Push(new NumericCompareExpression(relOperator, firstArgument, secondArgument)); }
internal virtual void Push(Expression e) { if (ExpressionStack.Count == 0) { ExpressionStack.Push(e); } else { Expression ex = ExpressionStack.Peek(); if (ex.InnerStack && !ex.InnerStackCompleted) { ex.Push(e); } else { ExpressionStack.Push(e); } } }
/// <summary> /// Visits the given input data node. /// </summary> /// <param name="data">Input data node.</param> public override void PostVisit(InputData.PDDL.ExistsExpression data) { ExpressionStack.Push(new ExistsExpression(new Parameters(data.Parameters, IdManager), ExpressionStack.Pop())); IdManager.Variables.UnregisterLocalParameters(data.Parameters); }
/// <summary> /// Visits the given input data node. /// </summary> /// <param name="data">Input data node.</param> public override void PostVisit(InputData.PDDL.NotExpression data) { ExpressionStack.Push(new NotExpression(ExpressionStack.Pop())); }
public List <List <string> > Generate() { if (variables.Count == 0) { ExpressionStack stack = new ExpressionStack(); foreach (var token in expression) { stack.Push(token); } return(new List <List <string> > { new List <string>() { stack.ForceEval().Result.ToString() } }); } List <List <string> > ret = new List <List <string> >(); // ret.Add(variables.Select(var => var).Prepend("№").ToList()); //DEEP COPY for (int i = 0; i < 2 << (variables.Count - 1); i++) { Dictionary <string, bool> varibaleValues = new Dictionary <string, bool>(); List <string> row = new List <string> { i.ToString() }; foreach (var(variable, j) in variables.Select((variable, j) => (variable, j))) { varibaleValues[variable] = Convert.ToBoolean((i >> (variables.Count - 1 - j)) & 1); row.Add(varibaleValues[variable].ToString()); } ExpressionStack stack = new ExpressionStack(varibaleValues); stack.OnEval = (ExprResult result) => { if (i == 0) { ret[0].Add(result.Expression); } row.Add(result.Result.ToString()); }; foreach (var token in expression) { stack.Push(token); } stack.ForceEval(); ret.Add(row); } return(ret); }
/// <summary> /// Visits the given input data node. /// </summary> /// <param name="data">Input data node.</param> public override void Visit(InputData.PDDL.DurationVariable data) { ExpressionStack.Push(new DurationVariable()); }
/// <summary> /// Visits the given input data node. /// </summary> /// <param name="data">Input data node.</param> public override void Visit(InputData.PDDL.Number data) { ExpressionStack.Push(new Number(data.Value)); }
/// <summary> /// Visits the given input data node. /// </summary> /// <param name="data">Input data node.</param> public override void PostVisit(InputData.PDDL.UnaryMinus data) { ExpressionStack.Push(new UnaryMinus(ExpressionStack.Pop())); }