示例#1
0
文件: AST.cs 项目: shunchuan/cnpl
            public override IValue Execute(ActuatorBase state)
            {
                IValue value = new BooleanValue(false);

                state.BreakLoop = true;
                return(value);
            }
示例#2
0
文件: AST.cs 项目: shunchuan/cnpl
            public override IValue Execute(ActuatorBase state)
            {
                var v1 = mExpression1.Execute(state);
                var v2 = mExpression2.Execute(state);

                return(new IntegerValue(v1.AsInteger() % v2.AsInteger()));
            }
示例#3
0
文件: AST.cs 项目: shunchuan/cnpl
            public override IValue Execute(ActuatorBase state)
            {
                state.FunctionTable[Name] = (IValue[] args) =>
                {
                    var vt    = state.VariableTable;
                    var bp    = state.BreakProgram;
                    var newVT = new Dictionary <string, IValue>();
                    var i     = 0;
                    foreach (var pn in Parameters)
                    {
                        if (i < args.Length)
                        {
                            newVT[pn] = args[i++];
                        }
                        else
                        {
                            newVT[pn] = new IntegerValue(0);
                        }
                    }

                    state.VariableTable = newVT;
                    try
                    {
                        state.BreakProgram = false;
                        return(mBlockStatement.Execute(state));
                    }
                    finally
                    {
                        state.VariableTable = vt;
                        state.BreakProgram  = bp;
                    }
                };
                return(new BooleanValue(true));
            }
示例#4
0
文件: AST.cs 项目: shunchuan/cnpl
            public override IValue Execute(ActuatorBase state)
            {
                var v1 = mExpression1.Execute(state);
                var v2 = mExpression2.Execute(state);

                return(v1.VNEquals(v2));
            }
示例#5
0
文件: AST.cs 项目: shunchuan/cnpl
            public override IValue Execute(ActuatorBase state)
            {
                var v1 = mExpression1.Execute(state);
                var v2 = mExpression2.Execute(state);

                return(new BooleanValue(v1.AsBoolean() || v2.AsBoolean()));
            }
示例#6
0
文件: AST.cs 项目: shunchuan/cnpl
            public override IValue Execute(ActuatorBase state)
            {
                var v = Value.Execute(state);

                state.VariableTable[Name] = v;
                return(v);
            }
示例#7
0
文件: AST.cs 项目: shunchuan/cnpl
            public override IValue Execute(ActuatorBase state)
            {
                var r = (int)(Row.Execute(state).AsReal());
                var c = (int)(Col.Execute(state).AsReal());

                return(new ArrayValue(r, c, Value));
            }
示例#8
0
文件: AST.cs 项目: shunchuan/cnpl
            public override IValue Execute(ActuatorBase state)
            {
                IValue value     = mCount.Execute(state);
                long   c         = (long)value.AsReal();
                long   i         = 0;
                var    indexName = string.IsNullOrEmpty(IndexName) ? $"<index>" : IndexName;

                state.VariableTable[indexName] = new IntegerValue(i);
                while (i < c)
                {
                    value = mLoopBlock.Execute(state);
                    ++i;
                    c = (long)(mCount.Execute(state).AsReal());
                    if (state.BreakLoop)
                    {
                        state.BreakLoop = false;
                        break;
                    }

                    if (state.BreakProgram)
                    {
                        break;
                    }
                    state.VariableTable[indexName] = new IntegerValue(i);
                    value = mCount.Execute(state);
                    c     = (long)value.AsReal();
                }
                return(value);
            }
示例#9
0
文件: AST.cs 项目: shunchuan/cnpl
            public override IValue Execute(ActuatorBase state)
            {
                IValue value;

                if (state.VariableTable.TryGetValue(Name, out value))
                {
                    return(value);
                }
                return(new IntegerValue(0));
            }
示例#10
0
文件: AST.cs 项目: shunchuan/cnpl
            public override IValue Execute(ActuatorBase state)
            {
                var a = mExpression1.Execute(state);
                var b = mExpression2.Execute(state);

                if (a.Is(ValueType.Integer) && b.Is(ValueType.Integer))
                {
                    return(new IntegerValue(a.AsInteger() / b.AsInteger()));
                }
                return(new RealValue(a.AsReal() / b.AsReal()));
            }
示例#11
0
文件: AST.cs 项目: shunchuan/cnpl
            public override IValue Execute(ActuatorBase state)
            {
                if (!state.VariableTable.ContainsKey(Name))
                {
                    return(new IntegerValue(0));
                }
                var value = Value.Execute(state);

                state.VariableTable[Name] = value;
                return(value);
            }
示例#12
0
文件: AST.cs 项目: shunchuan/cnpl
            public override IValue Execute(ActuatorBase state)
            {
                IValue value = null;

                if (mExpression != null)
                {
                    value = mExpression.Execute(state);
                }
                else
                {
                    value = new BooleanValue(false);
                }
                state.BreakProgram = true;
                return(value);
            }
示例#13
0
文件: AST.cs 项目: shunchuan/cnpl
            public IValue Execute(ActuatorBase state)
            {
                IValue value = new IntegerValue(0);

                foreach (var s in mStatements)
                {
                    value = s.Execute(state);
                    if (state.BreakProgram)
                    {
                        state.BreakProgram = false;
                        break;
                    }
                }
                return(value);
            }
示例#14
0
文件: AST.cs 项目: shunchuan/cnpl
            public override IValue Execute(ActuatorBase state)
            {
                IValue value;

                if (state.VariableTable.TryGetValue(Name, out value) && value is ArrayValue)
                {
                    var row = (int)mRow.Execute(state).AsReal();
                    var col = (int)mCol.Execute(state).AsReal();
                    var v   = Value.Execute(state);
                    var arr = value as ArrayValue;
                    arr.SetValue(row, col, v);
                    return(v);
                }
                return(new IntegerValue(0));
            }
示例#15
0
文件: AST.cs 项目: shunchuan/cnpl
            public override IValue Execute(ActuatorBase state)
            {
                var a = mExpression1.Execute(state);
                var b = mExpression2.Execute(state);

                if (a.Is(ValueType.String) || b.Is(ValueType.String))
                {
                    return(new BooleanValue(a.AsString().Length > b.AsString().Length));
                }
                else if (a.Is(ValueType.Real) || b.Is(ValueType.Real))
                {
                    return(new BooleanValue(a.AsReal() > b.AsReal()));
                }
                return(new BooleanValue(a.AsInteger() < b.AsInteger()));
            }
示例#16
0
文件: AST.cs 项目: shunchuan/cnpl
            public override IValue Execute(ActuatorBase state)
            {
                var a = mExpression1.Execute(state);
                var b = mExpression2.Execute(state);

                if (a.Is(ValueType.String) || b.Is(ValueType.String))
                {
                    return(new StringValue(a.AsString().TrimEnd() + b.AsString().TrimStart()));
                }
                else if (a.Is(ValueType.Real) || b.Is(ValueType.Real))
                {
                    return(new RealValue(a.AsReal() - b.AsReal()));
                }
                return(new IntegerValue(a.AsInteger() - b.AsInteger()));
            }
示例#17
0
 protected StepTaskEntityBase(ISequenceStep step, SlaveContext context, int sequenceIndex)
 {
     this.Context       = context;
     this.StepData      = step;
     this.Result        = StepResult.NotAvailable;
     this.SequenceIndex = sequenceIndex;
     this.Actuator      = ActuatorBase.GetActuator(step, context, sequenceIndex);
     this.Coroutine     = null;
     // 只有在断言失败和调用异常都配置为终止执行时,该步骤才会被判断为失败后终止
     if (null != StepData && StepData.HasSubSteps)
     {
         this.SubStepRoot = ModuleUtils.CreateSubStepModelChain(StepData.SubSteps, Context, sequenceIndex);
     }
     BreakIfFailed = (null == StepData) || (StepData.AssertFailedAction == FailedAction.Terminate &&
                                            StepData.InvokeErrorAction == FailedAction.Terminate);
 }
示例#18
0
文件: AST.cs 项目: shunchuan/cnpl
            public override IValue Execute(ActuatorBase state)
            {
                IValue value;

                if (state.VariableTable.TryGetValue(Name, out value))
                {
                    if (value.GetType() == typeof(ArrayValue))
                    {
                        var row = (int)mRow.Execute(state).AsReal();
                        var col = (int)mCol.Execute(state).AsReal();
                        return((value as ArrayValue).GetValue(row, col));
                    }
                    return(value);
                }
                return(new IntegerValue(0));
            }
示例#19
0
文件: AST.cs 项目: shunchuan/cnpl
            public override IValue Execute(ActuatorBase state)
            {
                IValue value = new IntegerValue(0);

                foreach (var s in mStatements)
                {
                    value = s.Execute(state);
                    if (state.BreakProgram)
                    {
                        break;
                    }
                    if (state.BreakLoop)
                    {
                        break;
                    }
                }
                return(value);
            }
示例#20
0
文件: AST.cs 项目: shunchuan/cnpl
            public override IValue Execute(ActuatorBase state)
            {
                Func <IValue[], IValue> func;
                var parameters = new IValue[mParameters.Length];
                int idx        = 0;

                foreach (var p in mParameters)
                {
                    parameters[idx++] = p.Execute(state);
                }

                if (state.FunctionTable.TryGetValue(Name, out func))
                {
                    return(func.Invoke(parameters));
                }
                else
                {
                    throw new Exception($"函数未找到:{Name}");
                }
            }
示例#21
0
文件: AST.cs 项目: shunchuan/cnpl
            public override IValue Execute(ActuatorBase state)
            {
                IValue value;

                if (mConditional.Execute(state).AsBoolean())
                {
                    value = mTrueBlock.Execute(state);
                }
                else
                {
                    if (mFalseBlock != null)
                    {
                        value = mFalseBlock.Execute(state);
                    }
                    else
                    {
                        value = new BooleanValue(false);
                    }
                }
                return(value);
            }
示例#22
0
文件: AST.cs 项目: shunchuan/cnpl
            public override IValue Execute(ActuatorBase state)
            {
                IValue value = mConditional.Execute(state);

                while (value.AsBoolean())
                {
                    value = mLoopBlock.Execute(state);

                    if (state.BreakLoop)
                    {
                        state.BreakLoop = false;
                        break;
                    }

                    if (state.BreakProgram)
                    {
                        break;
                    }
                    value = mConditional.Execute(state);
                }
                return(value);
            }
示例#23
0
文件: AST.cs 项目: shunchuan/cnpl
 public override IValue Execute(ActuatorBase state)
 {
     return(Value);
 }
示例#24
0
文件: AST.cs 项目: shunchuan/cnpl
 public abstract IValue Execute(ActuatorBase state);