public ProgramState PushValue(SymbolicValue symbolicValue)
 {
     return(new ProgramState(
                Values,
                Constraints,
                ProgramPointVisitCounts,
                ExpressionStack.Push(symbolicValue),
                Relationships));
 }
示例#2
0
        /// <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));
        }
示例#3
0
        /// <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));
        }
示例#4
0
        /// <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));
        }
示例#5
0
        /// <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));
        }
示例#6
0
 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);
         }
     }
 }
示例#7
0
 /// <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);
 }
示例#8
0
 /// <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);
        }
示例#10
0
 /// <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());
 }
示例#11
0
 /// <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));
 }
示例#12
0
 /// <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()));
 }