示例#1
0
        /// <summary>
        /// Handles the AST node visit.
        /// </summary>
        /// <param name="astNode">AST node.</param>
        public override void Visit(NumericOpAstNode astNode)
        {
            NumericExpressions arguments = new NumericExpressions();

            astNode.Arguments.ForEach(arg => arguments.Add(MasterExporter.ToNumericExpression(arg)));

            switch (astNode.Operator)
            {
            case Traits.NumericOperator.PLUS:
            {
                ExpressionData = new Plus(arguments);
                break;
            }

            case Traits.NumericOperator.MINUS:
            {
                if (arguments.Count == 1)
                {
                    ExpressionData = new UnaryMinus(arguments[0]);
                }
                else
                {
                    ExpressionData = new Minus(arguments[0], arguments[1]);
                }
                break;
            }

            case Traits.NumericOperator.MUL:
            {
                ExpressionData = new Multiply(arguments);
                break;
            }

            case Traits.NumericOperator.DIV:
            {
                ExpressionData = new Divide(arguments[0], arguments[1]);
                break;
            }

            default:
            {
                Debug.Assert(false);
                break;
            }
            }
        }
示例#2
0
 /// <summary>
 /// Handles the AST node visit.
 /// </summary>
 /// <param name="astNode">AST node.</param>
 public override void Visit(AssignPEffectAstNode astNode)
 {
     if (astNode.AssignOperator == Traits.AssignOperator.ASSIGN && MasterExporter.IsTerm(astNode.Argument2))
     {
         EffectsData.Add(new ObjectAssignEffect((ObjectFunctionTerm)MasterExporter.ToTerm(astNode.Argument1), MasterExporter.ToTerm(astNode.Argument2)));
     }
     else
     {
         EffectsData.Add(new NumericAssignEffect(astNode.AssignOperator, (NumericFunction)MasterExporter.ToNumericExpression(astNode.Argument1), MasterExporter.ToNumericExpression(astNode.Argument2)));
     }
 }
 /// <summary>
 /// Handles the AST node visit.
 /// </summary>
 /// <param name="astNode">AST node.</param>
 public override void Visit(AssignTimedEffectAstNode astNode)
 {
     EffectsData.Add(new AssignTimedEffect(astNode.AssignOperator, (NumericFunction)MasterExporter.ToNumericExpression(astNode.Function), MasterExporter.ToTimedNumericExpression(astNode.Expression)));
 }
示例#4
0
 /// <summary>
 /// Handles the AST node visit.
 /// </summary>
 /// <param name="astNode">AST node.</param>
 public override void Visit(EqualsOpGdAstNode astNode)
 {
     if (MasterExporter.IsNumericExpression(astNode.Argument1) && MasterExporter.IsNumericExpression(astNode.Argument2))
     {
         ExpressionData = new NumericCompareExpression(Traits.NumericComparer.EQ, MasterExporter.ToNumericExpression(astNode.Argument1), MasterExporter.ToNumericExpression(astNode.Argument2));
     }
     else
     {
         ExpressionData = new EqualsExpression(MasterExporter.ToTerm(astNode.Argument1), MasterExporter.ToTerm(astNode.Argument2));
     }
 }
示例#5
0
 /// <summary>
 /// Handles the AST node visit.
 /// </summary>
 /// <param name="astNode">AST node.</param>
 public override void Visit(NumCompGdAstNode astNode)
 {
     ExpressionData = new NumericCompareExpression(astNode.Operator, MasterExporter.ToNumericExpression(astNode.Argument1), MasterExporter.ToNumericExpression(astNode.Argument2));
 }
 /// <summary>
 /// Handles the AST node visit.
 /// </summary>
 /// <param name="astNode">AST node.</param>
 public override void Visit(CompOpSimpleDurationConstraintAstNode astNode)
 {
     ConstraintsData.Add(new CompareDurativeConstraint(astNode.DurationComparer, MasterExporter.ToNumericExpression(astNode.DurationArgument)));
 }