示例#1
0
        /// <summary>
        /// Visits the given input data node.
        /// </summary>
        /// <param name="data">Input data node.</param>
        public override void PostVisit(InputData.PDDL.EqualsEffect data)
        {
            ITerm firstArgument  = TermsBuilder.Value.Build(data.Term1);
            ITerm secondArgument = TermsBuilder.Value.Build(data.Term2);

            EffectsStack.Push(new EqualsEffect(firstArgument, secondArgument));
        }
示例#2
0
        /// <summary>
        /// Visits the given input data node.
        /// </summary>
        /// <param name="data">Input data node.</param>
        public override void PostVisit(InputData.PDDL.PredicateEffect 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)));

            EffectsStack.Push(new PredicateEffect(new Atom(predicateNameId, terms)));
        }
示例#3
0
        /// <summary>
        /// Builds PDDL effect from the input data.
        /// </summary>
        /// <param name="effect">Input data effect.</param>
        /// <returns>Built effect.</returns>
        public IEffect Build(InputData.PDDL.Effect effect)
        {
            Debug.Assert(EffectsStack.Count == 0);
            EffectsStack.Clear();

            effect.Accept(this);

            Debug.Assert(EffectsStack.Count == 1);
            return(EffectsStack.Pop());
        }
示例#4
0
        /// <summary>
        /// Visits the given input data node.
        /// </summary>
        /// <param name="data">Input data node.</param>
        public override void PostVisit(InputData.PDDL.NumericAssignEffect data)
        {
            int          functionNameId = IdManager.Functions.GetId(data.Function.Name, data.Function.Terms.Count);
            List <ITerm> terms          = new List <ITerm>();

            data.Function.Terms.ForEach(term => terms.Add(TermsBuilder.Value.Build(term)));

            NumericExpressionsBuilder numericExpressionsBuilder = new NumericExpressionsBuilder(IdManager);
            INumericExpression        valueExpression           = numericExpressionsBuilder.Build(data.Value);

            IAtom functionAtom = new Atom(functionNameId, terms);

            IEffect newEffect = null;

            switch (data.AssignOperator)
            {
            case InputData.PDDL.Traits.AssignOperator.ASSIGN:
            {
                newEffect = new NumericAssignEffect(functionAtom, valueExpression, IdManager);
                break;
            }

            case InputData.PDDL.Traits.AssignOperator.INCREASE:
            {
                newEffect = new NumericIncreaseEffect(functionAtom, valueExpression, IdManager);
                break;
            }

            case InputData.PDDL.Traits.AssignOperator.DECREASE:
            {
                newEffect = new NumericDecreaseEffect(functionAtom, valueExpression, IdManager);
                break;
            }

            case InputData.PDDL.Traits.AssignOperator.SCALE_UP:
            {
                newEffect = new NumericScaleUpEffect(functionAtom, valueExpression, IdManager);
                break;
            }

            case InputData.PDDL.Traits.AssignOperator.SCALE_DOWN:
            {
                newEffect = new NumericScaleDownEffect(functionAtom, valueExpression, IdManager);
                break;
            }

            default:
            {
                Debug.Assert(false);
                break;
            }
            }

            EffectsStack.Push(newEffect);
        }
示例#5
0
        /// <summary>
        /// Visits the given input data node.
        /// </summary>
        /// <param name="data">Input data node.</param>
        public override void PostVisit(InputData.PDDL.ObjectAssignEffect data)
        {
            int          functionNameId = IdManager.Functions.GetId(data.Function.Name, data.Function.Terms.Count);
            List <ITerm> terms          = new List <ITerm>();

            data.Function.Terms.ForEach(term => terms.Add(TermsBuilder.Value.Build(term)));

            ITerm valueTerm = TermsBuilder.Value.Build(data.Value);

            EffectsStack.Push(new ObjectAssignEffect(new Atom(functionNameId, terms), valueTerm));
        }
示例#6
0
        /// <summary>
        /// Visits the given input data node.
        /// </summary>
        /// <param name="data">Input data node.</param>
        public override void PostVisit(InputData.PDDL.ForallEffect data)
        {
            List <IEffect> argumentEffects = new List <IEffect>();

            for (int i = 0; i < data.Effects.Count; ++i)
            {
                argumentEffects.Add(EffectsStack.Pop());
            }
            argumentEffects.Reverse();

            EffectsStack.Push(new ForallEffect(new Parameters(data.Parameters, IdManager), argumentEffects));
            IdManager.Variables.UnregisterLocalParameters(data.Parameters);
        }
示例#7
0
        /// <summary>
        /// Visits the given input data node.
        /// </summary>
        /// <param name="data">Input data node.</param>
        public override void PostVisit(InputData.PDDL.WhenEffect data)
        {
            List <PrimitiveEffect> argumentEffects = new List <PrimitiveEffect>();

            for (int i = 0; i < data.Effects.Count; ++i)
            {
                argumentEffects.Add((PrimitiveEffect)EffectsStack.Pop());
            }
            argumentEffects.Reverse();

            ExpressionsBuilder expressionsBuilder = new ExpressionsBuilder(IdManager);
            IExpression        argumentExpression = expressionsBuilder.Build(data.Expression);

            EffectsStack.Push(new WhenEffect(argumentExpression, argumentEffects));
        }
示例#8
0
 /// <summary>
 /// Visits the given input data node.
 /// </summary>
 /// <param name="data">Input data node.</param>
 public override void PostVisit(InputData.PDDL.NotEffect data)
 {
     EffectsStack.Push(new NotEffect((AtomicFormulaEffect)EffectsStack.Pop()));
 }