/// <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; } } }
/// <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))); }
/// <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)); } }
/// <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))); }