예제 #1
0
        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);
        }
예제 #2
0
 public SymbolicValue PeekValue(int nth)
 {
     return(ExpressionStack.ToList()[nth]);
 }
예제 #3
0
 public SymbolicValue PeekValue()
 {
     return(ExpressionStack.Peek());
 }
예제 #4
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());
 }
예제 #5
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));
 }
예제 #6
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()));
 }