private void CalcInitValue(Dsl.ISyntaxComponent param)
        {
            IStoryValue val = StoryValueManager.Instance.CalcValue(param);

            if (null != val)
            {
                //对初始化即能求得值的函数,不需要再记录函数表达式,直接转换为常量值。
                if (val.HaveValue)
                {
                    SetValue(val.Value);
                }
                else
                {
                    SetProxy(val);
                }
            }
            else if (param is Dsl.ValueData)
            {
                string id     = param.GetId();
                int    idType = param.GetIdType();
                if (idType == Dsl.ValueData.NUM_TOKEN)
                {
                    if (id.StartsWith("0x"))
                    {
                        SetValue(uint.Parse(id.Substring(2), System.Globalization.NumberStyles.HexNumber));
                    }
                    else if (id.IndexOf('.') >= 0 || id.IndexOf('e') > 0 || id.IndexOf('E') > 0)
                    {
                        SetValue(float.Parse(id, System.Globalization.NumberStyles.Float));
                    }
                    else
                    {
                        SetValue(int.Parse(id, System.Globalization.NumberStyles.Integer));
                    }
                }
                else if (idType == Dsl.ValueData.ID_TOKEN && (id == "true" || id == "false"))
                {
                    SetValue(id == "true");
                }
                else
                {
                    SetValue(id);
                }
            }
            else
            {
#if DEBUG
                string err = string.Format("Unknown value, id:{0} line:{1}", param.GetId(), param.GetLine());
                throw new Exception(err);
#else
                GameFramework.LogSystem.Error("Unknown value, id:{0}", param.GetId());
#endif
            }
        }
 public void Init(Dsl.ISyntaxComponent config, SkillInstance instance)
 {
     m_Name = config.GetId();
     Dsl.CallData callData = config as Dsl.CallData;
     if (null != callData)
     {
         Load(callData, instance);
     }
     else
     {
         Dsl.FunctionData funcData = config as Dsl.FunctionData;
         if (null != funcData)
         {
             Load(funcData, instance);
         }
         else
         {
             Dsl.StatementData statementData = config as Dsl.StatementData;
             if (null != statementData)
             {
                 Load(statementData, instance);
             }
             else
             {
                 //error
             }
         }
     }
     InitProperties();
 }
        public ISkillTriger CreateTriger(Dsl.ISyntaxComponent trigerConfig, SkillInstance instance)
        {
            ISkillTriger        triger  = null;
            string              type    = trigerConfig.GetId();
            ISkillTrigerFactory factory = GetFactory(type);

            if (null != factory)
            {
                try {
                    triger = factory.Create();
                    triger.Init(trigerConfig, instance);
                } catch (Exception ex) {
                    GameFramework.LogSystem.Error("triger:{0} line:{1} failed.", trigerConfig.ToScriptString(false), trigerConfig.GetLine());
                    throw ex;
                }
            }
            else
            {
#if !DEBUG
                GameFramework.LogSystem.Error("CreateTriger failed, type:{0}", type);
#endif
            }
            if (null != triger)
            {
                GameFramework.LogSystem.Debug("CreateTriger, type:{0} triger:{1}", type, triger.GetType().Name);
            }
            else
            {
#if !DEBUG
                GameFramework.LogSystem.Error("CreateTriger failed, type:{0}", type);
#endif
            }
            return(triger);
        }
        public void Set(Dsl.ISyntaxComponent p)
        {
            string val  = p.GetId();
            int    type = p.GetIdType();

            if (!string.IsNullOrEmpty(val))
            {
                if (type == Dsl.CallData.NUM_TOKEN)
                {
                    m_Key = string.Empty;
                    if (val.IndexOf('.') >= 0)
                    {
                        m_Value = Convert.ChangeType(val, typeof(float));
                    }
                    else
                    {
                        m_Value = Convert.ChangeType(val, typeof(int));
                    }
                }
                else
                {
                    m_Key = val;
                }
            }
        }
示例#5
0
 protected override bool Load(Dsl.CallData callData)
 {
     Dsl.ISyntaxComponent param1 = callData.GetParam(0);
     Dsl.ISyntaxComponent param2 = callData.GetParam(1);
     m_Variables = Calculator.NamedVariables;
     m_VarId     = param1.GetId();
     m_Op        = Calculator.Load(param2);
     return(true);
 }
示例#6
0
        internal static string GetParamIdAfterRemoveParenthesis(Dsl.ISyntaxComponent comp, int ix, out Dsl.ISyntaxComponent param)
        {
            var data = comp as Dsl.FunctionData;

            if (null != data && data.GetParamNum() > ix)
            {
                param = RemoveParenthesis(data.GetParam(ix));
                return(param.GetId());
            }
            param = null;
            return(string.Empty);
        }
 public bool Init(Dsl.ISyntaxComponent config)
 {
     m_Comments = m_Params.InitFromDsl(config, 0, true);
     m_Config   = config;
     m_Id       = config.GetId();
     if (GameFramework.GlobalVariables.Instance.IsDevice)
     {
         //在设备上不保留配置信息了
         m_Comments = null;
         m_Config   = null;
     }
     return(config is Dsl.FunctionData);
 }
 static public int GetId(IntPtr l)
 {
     try {
         Dsl.ISyntaxComponent self = (Dsl.ISyntaxComponent)checkSelf(l);
         var ret = self.GetId();
         pushValue(l, true);
         pushValue(l, ret);
         return(2);
     }
     catch (Exception e) {
         return(error(l, e));
     }
 }
示例#9
0
        public bool Init(Dsl.ISyntaxComponent config)
        {
            bool ret = true;

            m_Config = config;
            m_Id     = config.GetId();
            Dsl.FunctionData funcData = config as Dsl.FunctionData;
            if (null != funcData)
            {
                Load(funcData);
            }
            else
            {
                Dsl.StatementData statementData = config as Dsl.StatementData;
                if (null != statementData)
                {
                    int funcNum  = statementData.GetFunctionNum();
                    var lastFunc = statementData.Last;
                    var id       = lastFunc.GetId();
                    if (funcNum >= 2 && (id == "comment" || id == "comments"))
                    {
                        m_Comments = lastFunc;
                        statementData.Functions.RemoveAt(funcNum - 1);
                        if (statementData.GetFunctionNum() == 1)
                        {
                            funcData = statementData.GetFunction(0);
                            ret      = Load(funcData);
                        }
                        else
                        {
                            ret = Load(statementData);
                        }
                    }
                    else
                    {
                        ret = Load(statementData);
                    }
                }
                else
                {
                    //keyword
                }
            }
            if (GameFramework.GlobalVariables.Instance.IsDevice)
            {
                //在设备上不保留配置信息了
                m_Comments = null;
                m_Config   = null;
            }
            return(ret);
        }
示例#10
0
 public void InitFromDsl(Dsl.ISyntaxComponent param)
 {
     Dsl.ValueData valueData = param as Dsl.ValueData;
     if (null != valueData)
     {
         string id     = param.GetId();
         int    idType = param.GetIdType();
         if (idType == Dsl.ValueData.ID_TOKEN && id.StartsWith("$"))
         {
             if (0 == id.CompareTo("$$"))
             {
                 SetArgument(c_Iterator);
             }
             else
             {
                 string idName = id.Substring(1);
                 if (idName.Length > 0 && char.IsDigit(idName[0]))
                 {
                     SetArgument(int.Parse(idName));
                 }
                 else
                 {
                     SetStack(id);
                 }
             }
         }
         else if (idType == Dsl.ValueData.ID_TOKEN && id.StartsWith("@"))
         {
             if (id.StartsWith("@@"))
             {
                 SetGlobal(id);
             }
             else
             {
                 SetLocal(id);
             }
         }
         else
         {
             CalcInitValue(param);
         }
     }
     else
     {
         CalcInitValue(param);
     }
 }
        public void Set(Dsl.ISyntaxComponent p)
        {
            string val  = p.GetId();
            int    type = p.GetIdType();

            if (!string.IsNullOrEmpty(val))
            {
                if (type == Dsl.FunctionData.NUM_TOKEN)
                {
                    m_Key   = string.Empty;
                    m_Value = (T)Convert.ChangeType(val, typeof(T));
                }
                else
                {
                    m_Key = val;
                }
            }
        }
示例#12
0
        internal static string CalcTypeString(Dsl.ISyntaxComponent comp)
        {
            string ret = comp.GetId();
            var    cd  = comp as Dsl.FunctionData;

            if (null != cd && cd.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PERIOD)
            {
                string prefix;
                if (cd.IsHighOrder)
                {
                    prefix = CalcTypeString(cd.LowerOrderFunction);
                }
                else
                {
                    prefix = cd.GetId();
                }
                ret = prefix + "." + cd.GetParamId(0);
            }
            return(ret);
        }
示例#13
0
        public IStoryValue <object> CalcValue(Dsl.ISyntaxComponent param)
        {
            lock (m_Lock) {
                if (param.IsValid() && param.GetId().Length == 0)
                {
                    //处理括弧
                    Dsl.CallData callData = param as Dsl.CallData;
                    if (null != callData)
                    {
                        switch (callData.GetParamClass())
                        {
                        case (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PARENTHESIS:
                            if (callData.GetParamNum() > 0)
                            {
                                int ct = callData.GetParamNum();
                                return(CalcValue(callData.GetParam(ct - 1)));
                            }
                            else
                            {
                                //不支持的语法
                                return(null);
                            }

                        case (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_BRACKET: {
                            IStoryValue <object> ret     = null;
                            IStoryValueFactory   factory = GetFactory("jsonarray");
                            if (null != factory)
                            {
                                try {
                                    ret = factory.Build();
                                    ret.InitFromDsl(param);
                                } catch (Exception ex) {
                                    GameFramework.LogSystem.Error("value:{0} line:{1} failed.", param.ToScriptString(), param.GetLine());
                                    throw ex;
                                }
                            }
                            return(ret);
                        }

                        default:
                            return(null);
                        }
                    }
                    else
                    {
                        Dsl.FunctionData funcData = param as Dsl.FunctionData;
                        if (null != funcData && funcData.HaveStatement())
                        {
                            callData = funcData.Call;
                            if (null == callData || !callData.HaveParam())
                            {
                                IStoryValue <object> ret     = null;
                                IStoryValueFactory   factory = GetFactory("jsonobject");
                                if (null != factory)
                                {
                                    try {
                                        ret = factory.Build();
                                        ret.InitFromDsl(param);
                                    } catch (Exception ex) {
                                        GameFramework.LogSystem.Error("value:{0} line:{1} failed.", param.ToScriptString(), param.GetLine());
                                        throw ex;
                                    }
                                }
                                return(ret);
                            }
                            else
                            {
                                //不支持的语法
                                return(null);
                            }
                        }
                        else
                        {
                            //不支持的语法
                            return(null);
                        }
                    }
                }
                else
                {
                    Dsl.CallData callData = param as Dsl.CallData;
                    if (null != callData)
                    {
                        Dsl.CallData innerCall = callData.Call;
                        if (callData.IsHighOrder && callData.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PARENTHESIS && (
                                innerCall.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PERIOD ||
                                innerCall.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_BRACKET ||
                                innerCall.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PERIOD_BRACE ||
                                innerCall.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PERIOD_BRACKET ||
                                innerCall.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PERIOD_PARENTHESIS
                                ))
                        {
                            //obj.member(a,b,...) or obj[member](a,b,...) or obj.(member)(a,b,...) or obj.[member](a,b,...) or obj.{member}(a,b,...) -> dotnetcall(obj,member,a,b,...)
                            Dsl.CallData newCall = new Dsl.CallData();
                            newCall.Name = new Dsl.ValueData("dotnetcall", Dsl.ValueData.ID_TOKEN);
                            newCall.SetParamClass((int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PARENTHESIS);
                            if (innerCall.IsHighOrder)
                            {
                                newCall.Params.Add(innerCall.Call);
                                newCall.Params.Add(innerCall.GetParam(0));
                                for (int i = 0; i < callData.GetParamNum(); ++i)
                                {
                                    Dsl.ISyntaxComponent p = callData.Params[i];
                                    newCall.Params.Add(p);
                                }
                            }
                            else
                            {
                                newCall.Params.Add(innerCall.Name);
                                newCall.Params.Add(innerCall.GetParam(0));
                                for (int i = 0; i < callData.GetParamNum(); ++i)
                                {
                                    Dsl.ISyntaxComponent p = callData.Params[i];
                                    newCall.Params.Add(p);
                                }
                            }
                            return(CalcValue(newCall));
                        }
                        else if (callData.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PERIOD ||
                                 callData.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_BRACKET ||
                                 callData.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PERIOD_BRACE ||
                                 callData.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PERIOD_BRACKET ||
                                 callData.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PERIOD_PARENTHESIS)
                        {
                            //obj.property or obj[property] or obj.(property) or obj.[property] or obj.{property} -> dotnetget(obj,property)
                            Dsl.CallData newCall = new Dsl.CallData();
                            newCall.Name = new Dsl.ValueData("dotnetget", Dsl.ValueData.ID_TOKEN);
                            newCall.SetParamClass((int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PARENTHESIS);
                            if (callData.IsHighOrder)
                            {
                                newCall.Params.Add(callData.Call);
                                newCall.Params.Add(callData.GetParam(0));
                            }
                            else
                            {
                                newCall.Params.Add(callData.Name);
                                newCall.Params.Add(callData.GetParam(0));
                            }
                            return(CalcValue(newCall));
                        }
                    }
                    IStoryValue <object> ret   = null;
                    string             id      = param.GetId();
                    IStoryValueFactory factory = GetFactory(id);
                    if (null != factory)
                    {
                        try {
                            ret = factory.Build();
                            ret.InitFromDsl(param);
                        } catch (Exception ex) {
                            GameFramework.LogSystem.Error("value:{0} line:{1} failed.", param.ToScriptString(), param.GetLine());
                            throw ex;
                        }
                    }
                    return(ret);
                }
            }
        }
        public IStoryValue CalcValue(Dsl.ISyntaxComponent param)
        {
            lock (m_Lock) {
                Dsl.FunctionData callData = param as Dsl.FunctionData;
                if (null != callData && callData.IsValid() && callData.GetId().Length == 0 && !callData.IsHighOrder && (callData.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PARENTHESIS || callData.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_BRACKET))
                {
                    //处理圆括弧与方括弧
                    switch (callData.GetParamClass())
                    {
                    case (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PARENTHESIS:
                        if (callData.GetParamNum() > 0)
                        {
                            int ct = callData.GetParamNum();
                            return(CalcValue(callData.GetParam(ct - 1)));
                        }
                        else
                        {
                            return(null);
                        }

                    case (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_BRACKET: {
                        IStoryValue        ret     = null;
                        IStoryValueFactory factory = GetFactory("array");
                        if (null != factory)
                        {
                            try {
                                ret = factory.Build();
                                ret.InitFromDsl(param);
                            }
                            catch (Exception ex) {
                                var msg = string.Format("[LoadStory] value:{0} line:{1} failed.", param.ToScriptString(false), param.GetLine());
                                throw new Exception(msg, ex);
                            }
                        }
                        return(ret);
                    }

                    default:
                        return(null);
                    }
                }
                else
                {
                    Dsl.FunctionData funcData = param as Dsl.FunctionData;
                    if (null != funcData && funcData.HaveStatement())
                    {
                        //处理大括弧
                        callData = funcData;
                        if (null == callData || !callData.HaveParam())
                        {
                            IStoryValue        ret     = null;
                            IStoryValueFactory factory = GetFactory("hashtable");
                            if (null != factory)
                            {
                                try {
                                    ret = factory.Build();
                                    ret.InitFromDsl(param);
                                }
                                catch (Exception ex) {
                                    var msg = string.Format("[LoadStory] value:{0} line:{1} failed.", param.ToScriptString(false), param.GetLine());
                                    throw new Exception(msg, ex);
                                }
                            }
                            return(ret);
                        }
                        else
                        {
                            //不支持的语法
                            return(null);
                        }
                    }
                    else
                    {
                        if (null != callData)
                        {
                            Dsl.FunctionData innerCall = callData.LowerOrderFunction;
                            if (callData.IsHighOrder && callData.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PARENTHESIS && (
                                    innerCall.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PERIOD ||
                                    innerCall.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_BRACKET ||
                                    innerCall.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PERIOD_BRACE ||
                                    innerCall.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PERIOD_BRACKET ||
                                    innerCall.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PERIOD_PARENTHESIS
                                    ))
                            {
                                //obj.member(a,b,...) or obj[member](a,b,...) or obj.(member)(a,b,...) or obj.[member](a,b,...) or obj.{member}(a,b,...) -> dotnetcall(obj,member,a,b,...)
                                string method = innerCall.GetParamId(0);
                                string apiName;
                                if (method == "orderby" || method == "orderbydesc" || method == "where" || method == "top")
                                {
                                    apiName = "linq";
                                }
                                else
                                {
                                    apiName = "dotnetcall";
                                }
                                Dsl.FunctionData newCall = new Dsl.FunctionData();
                                newCall.Name = new Dsl.ValueData(apiName, Dsl.ValueData.ID_TOKEN);
                                newCall.SetParamClass((int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PARENTHESIS);
                                if (innerCall.IsHighOrder)
                                {
                                    newCall.Params.Add(innerCall.LowerOrderFunction);
                                    newCall.Params.Add(ObjectMemberConverter.Convert(innerCall.GetParam(0), innerCall.GetParamClass()));
                                    for (int i = 0; i < callData.GetParamNum(); ++i)
                                    {
                                        Dsl.ISyntaxComponent p = callData.Params[i];
                                        newCall.Params.Add(p);
                                    }
                                }
                                else
                                {
                                    newCall.Params.Add(innerCall.Name);
                                    newCall.Params.Add(ObjectMemberConverter.Convert(innerCall.GetParam(0), innerCall.GetParamClass()));
                                    for (int i = 0; i < callData.GetParamNum(); ++i)
                                    {
                                        Dsl.ISyntaxComponent p = callData.Params[i];
                                        newCall.Params.Add(p);
                                    }
                                }
                                return(CalcValue(newCall));
                            }
                            else if (callData.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PERIOD ||
                                     callData.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_BRACKET ||
                                     callData.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PERIOD_BRACE ||
                                     callData.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PERIOD_BRACKET ||
                                     callData.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PERIOD_PARENTHESIS)
                            {
                                //obj.property or obj[property] or obj.(property) or obj.[property] or obj.{property} -> dotnetget(obj,property)
                                Dsl.FunctionData newCall = new Dsl.FunctionData();
                                newCall.Name = new Dsl.ValueData("dotnetget", Dsl.ValueData.ID_TOKEN);
                                newCall.SetParamClass((int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PARENTHESIS);
                                if (callData.IsHighOrder)
                                {
                                    newCall.Params.Add(callData.LowerOrderFunction);
                                    newCall.Params.Add(ObjectMemberConverter.Convert(callData.GetParam(0), callData.GetParamClass()));
                                }
                                else
                                {
                                    newCall.Params.Add(callData.Name);
                                    newCall.Params.Add(ObjectMemberConverter.Convert(callData.GetParam(0), callData.GetParamClass()));
                                }
                                return(CalcValue(newCall));
                            }
                        }
                        IStoryValue ret = null;
                        string      id  = param.GetId();
                        if (param.GetIdType() == Dsl.ValueData.ID_TOKEN)
                        {
                            IStoryValueFactory factory = GetFactory(id);
                            if (null != factory)
                            {
                                try {
                                    ret = factory.Build();
                                    ret.InitFromDsl(param);
                                }
                                catch (Exception ex) {
                                    var msg = string.Format("[LoadStory] value:{0}[{1}] line:{2} failed.", id, param.ToScriptString(false), param.GetLine());
                                    throw new Exception(msg, ex);
                                }
                            }
                            else
                            {
#if DEBUG
                                string err = string.Format("[LoadStory] value:{0}[{1}] line:{2} failed.", id, param.ToScriptString(false), param.GetLine());
                                GameFramework.LogSystem.Error("{0}", err);
                                throw new Exception(err);
#else
                                GameFramework.LogSystem.Error("[LoadStory] value:{0} line:{1} failed.", id, param.GetLine());
#endif
                            }
                        }
                        return(ret);
                    }
                }
            }
        }
        public static void FirstParse(Dsl.ISyntaxComponent dslInfo)
        {
            string id = dslInfo.GetId();

            if (id == "command")
            {
                StorySystem.CommonCommands.CompositeCommand cmd = new CommonCommands.CompositeCommand();
                cmd.InitSharedData();
                var first = dslInfo as Dsl.FunctionData;
                if (null != first)
                {
                    cmd.Name = first.Call.GetParamId(0);
                }
                else
                {
                    var statement = dslInfo as Dsl.StatementData;
                    if (null != statement)
                    {
                        first    = statement.First;
                        cmd.Name = first.Call.GetParamId(0);
                        for (int i = 1; i < statement.GetFunctionNum(); ++i)
                        {
                            var funcData = statement.GetFunction(i);
                            var fid      = funcData.GetId();
                            if (fid == "args")
                            {
                                for (int ix = 0; ix < funcData.Call.GetParamNum(); ++ix)
                                {
                                    cmd.ArgNames.Add(funcData.Call.GetParamId(ix));
                                }
                            }
                            else if (fid == "opts")
                            {
                                for (int ix = 0; ix < funcData.GetStatementNum(); ++ix)
                                {
                                    var fcomp = funcData.GetStatement(ix);
                                    var fcd   = fcomp as Dsl.CallData;
                                    if (null != fcd)
                                    {
                                        cmd.OptArgs.Add(fcd.GetId(), fcd.GetParam(0));
                                    }
                                }
                            }
                            else if (fid == "body")
                            {
                            }
                            else
                            {
                                LogSystem.Error("Command {0} unknown part '{1}'", cmd.Name, fid);
                            }
                        }
                    }
                }
                //注册
                StoryCommandManager.Instance.RegisterCommandFactory(cmd.Name, new CommonCommands.CompositeCommandFactory(cmd), true);
            }
            else if (id == "value")
            {
                StorySystem.CommonValues.CompositeValue val = new CommonValues.CompositeValue();
                val.InitSharedData();
                var first = dslInfo as Dsl.FunctionData;
                if (null != first)
                {
                    val.Name = first.Call.GetParamId(0);
                }
                else
                {
                    var statement = dslInfo as Dsl.StatementData;
                    if (null != statement)
                    {
                        first    = statement.First;
                        val.Name = first.Call.GetParamId(0);
                        for (int i = 1; i < statement.GetFunctionNum(); ++i)
                        {
                            var funcData = statement.GetFunction(i);
                            var fid      = funcData.GetId();
                            if (fid == "args")
                            {
                                for (int ix = 0; ix < funcData.Call.GetParamNum(); ++ix)
                                {
                                    val.ArgNames.Add(funcData.Call.GetParamId(ix));
                                }
                            }
                            else if (fid == "ret")
                            {
                                val.ReturnName = funcData.Call.GetParamId(0);
                            }
                            else if (fid == "opts")
                            {
                                for (int ix = 0; ix < funcData.GetStatementNum(); ++ix)
                                {
                                    var fcomp = funcData.GetStatement(ix);
                                    var fcd   = fcomp as Dsl.CallData;
                                    if (null != fcd)
                                    {
                                        val.OptArgs.Add(fcd.GetId(), fcd.GetParam(0));
                                    }
                                }
                            }
                            else if (fid == "body")
                            {
                            }
                            else
                            {
                                LogSystem.Error("Value {0} unknown part '{1}'", val.Name, fid);
                            }
                        }
                    }
                }
                //注册
                StoryValueManager.Instance.RegisterValueFactory(val.Name, new CommonValues.CompositeValueFactory(val), true);
            }
        }
示例#16
0
        public IStoryCommand CreateCommand(Dsl.ISyntaxComponent commandConfig)
        {
            IStoryCommand command = null;

            lock (m_Lock) {
                Dsl.StatementData statementData = commandConfig as Dsl.StatementData;
                if (null != statementData)
                {
                    Dsl.FunctionData func;
                    if (DslSyntaxTransformer.TryTransformCommandLineLikeSyntax(statementData, out func))
                    {
                        commandConfig = func;
                    }
                }
                Dsl.FunctionData callData = commandConfig as Dsl.FunctionData;
                if (null != callData)
                {
                    if (callData.IsHighOrder)
                    {
                        Dsl.FunctionData innerCall = callData.LowerOrderFunction;
                        if (innerCall.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PERIOD ||
                            innerCall.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_BRACKET ||
                            innerCall.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PERIOD_BRACE ||
                            innerCall.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PERIOD_BRACKET ||
                            innerCall.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PERIOD_PARENTHESIS)
                        {
                            if (callData.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PARENTHESIS)
                            {
                                //obj.member(a,b,...) or obj[member](a,b,...) or obj.(member)(a,b,...) or obj.[member](a,b,...) or obj.{member}(a,b,...) -> execinstance(obj,member,a,b,...)
                                Dsl.FunctionData newCall = new Dsl.FunctionData();
                                if (innerCall.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PERIOD)
                                {
                                    newCall.Name = new Dsl.ValueData("dotnetexec", Dsl.ValueData.ID_TOKEN);
                                }
                                else
                                {
                                    newCall.Name = new Dsl.ValueData("collectionexec", Dsl.ValueData.ID_TOKEN);
                                }
                                newCall.SetParamClass((int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PARENTHESIS);
                                if (innerCall.IsHighOrder)
                                {
                                    newCall.Params.Add(innerCall.LowerOrderFunction);
                                    newCall.Params.Add(ObjectMemberConverter.Convert(innerCall.GetParam(0), innerCall.GetParamClass()));
                                    for (int i = 0; i < callData.GetParamNum(); ++i)
                                    {
                                        Dsl.ISyntaxComponent p = callData.Params[i];
                                        newCall.Params.Add(p);
                                    }
                                }
                                else
                                {
                                    newCall.Params.Add(innerCall.Name);
                                    newCall.Params.Add(ObjectMemberConverter.Convert(innerCall.GetParam(0), innerCall.GetParamClass()));
                                    for (int i = 0; i < callData.GetParamNum(); ++i)
                                    {
                                        Dsl.ISyntaxComponent p = callData.Params[i];
                                        newCall.Params.Add(p);
                                    }
                                }
                                return(CreateCommand(newCall));
                            }
                        }
                    }
                    else if (callData.GetId() == "=")
                    {
                        Dsl.FunctionData innerCall = callData.GetParam(0) as Dsl.FunctionData;
                        if (null != innerCall && (innerCall.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PERIOD ||
                                                  innerCall.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_BRACKET ||
                                                  innerCall.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PERIOD_BRACE ||
                                                  innerCall.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PERIOD_BRACKET ||
                                                  innerCall.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PERIOD_PARENTHESIS))
                        {
                            //obj.property = val  or obj[property] = val or obj.(property) = val or obj.[property] = val or obj.{property} = val -> setinstance(obj,property,val)
                            Dsl.FunctionData newCall = new Dsl.FunctionData();
                            if (innerCall.GetParamClass() == (int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PERIOD)
                            {
                                newCall.Name = new Dsl.ValueData("dotnetset", Dsl.ValueData.ID_TOKEN);
                            }
                            else
                            {
                                newCall.Name = new Dsl.ValueData("collectionset", Dsl.ValueData.ID_TOKEN);
                            }
                            newCall.SetParamClass((int)Dsl.FunctionData.ParamClassEnum.PARAM_CLASS_PARENTHESIS);
                            if (innerCall.IsHighOrder)
                            {
                                newCall.Params.Add(innerCall.LowerOrderFunction);
                                newCall.Params.Add(ObjectMemberConverter.Convert(innerCall.GetParam(0), innerCall.GetParamClass()));
                                newCall.Params.Add(callData.GetParam(1));
                            }
                            else
                            {
                                newCall.Params.Add(innerCall.Name);
                                newCall.Params.Add(ObjectMemberConverter.Convert(innerCall.GetParam(0), innerCall.GetParamClass()));
                                newCall.Params.Add(callData.GetParam(1));
                            }
                            return(CreateCommand(newCall));
                        }
                    }
                }
                string type = commandConfig.GetId();
                if (commandConfig.GetIdType() == Dsl.ValueData.ID_TOKEN && type != "true" && type != "false")
                {
                    IStoryCommandFactory factory = GetFactory(type);
                    if (null != factory)
                    {
                        try {
                            command = factory.Create();
                            if (!command.Init(commandConfig))
                            {
                                GameFramework.LogSystem.Error("[LoadStory] command:{0}[{1}] line:{2} failed.", type, commandConfig.ToScriptString(false), commandConfig.GetLine());
                            }
                        }
                        catch (Exception ex) {
                            var msg = string.Format("[LoadStory] command:{0}[{1}] line:{2} failed.", type, commandConfig.ToScriptString(false), commandConfig.GetLine());
                            throw new Exception(msg, ex);
                        }
                    }
                    else
                    {
#if DEBUG
                        string err = string.Format("[LoadStory] CreateCommand failed, line:{0} command:{1}[{2}]", commandConfig.GetLine(), type, commandConfig.ToScriptString(false));
                        GameFramework.LogSystem.Error("{0}", err);
                        throw new Exception(err);
#else
                        GameFramework.LogSystem.Error("[LoadStory] CreateCommand failed, type:{0} line:{1}", type, commandConfig.GetLine());
#endif
                    }
                    if (null != command)
                    {
                        //GameFramework.LogSystem.Debug("[LoadStory] CreateCommand, type:{0} command:{1}", type, command.GetType().Name);
                    }
                    else
                    {
#if DEBUG
                        string err = string.Format("[LoadStory] CreateCommand failed, line:{0} command:{1}[{2}]", commandConfig.GetLine(), type, commandConfig.ToScriptString(false));
                        GameFramework.LogSystem.Error("{0}", err);
                        throw new Exception(err);
#else
                        GameFramework.LogSystem.Error("[LoadStory] CreateCommand failed, type:{0} line:{1}", type, commandConfig.GetLine());
#endif
                    }
                }
            }
            return(command);
        }
        public IStoryCommand CreateCommand(Dsl.ISyntaxComponent commandConfig)
        {
            Dsl.CallData callData = commandConfig as Dsl.CallData;
            if (null != callData)
            {
                if (callData.IsHighOrder)
                {
                    Dsl.CallData innerCall = callData.Call;
                    if (innerCall.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PERIOD ||
                        innerCall.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_BRACKET ||
                        innerCall.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PERIOD_BRACE ||
                        innerCall.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PERIOD_BRACKET ||
                        innerCall.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PERIOD_PARENTHESIS)
                    {
                        if (callData.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PARENTHESIS)
                        {
                            //obj.member(a,b,...) or obj[member](a,b,...) or obj.(member)(a,b,...) or obj.[member](a,b,...) or obj.{member}(a,b,...) -> execinstance(obj,member,a,b,...)
                            Dsl.CallData newCall = new Dsl.CallData();
                            newCall.Name = new Dsl.ValueData("dotnetexec", Dsl.ValueData.ID_TOKEN);
                            newCall.SetParamClass((int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PARENTHESIS);
                            if (innerCall.IsHighOrder)
                            {
                                newCall.Params.Add(innerCall.Call);
                                newCall.Params.Add(innerCall.GetParam(0));
                                for (int i = 0; i < callData.GetParamNum(); ++i)
                                {
                                    Dsl.ISyntaxComponent p = callData.Params[i];
                                    newCall.Params.Add(p);
                                }
                            }
                            else
                            {
                                newCall.Params.Add(innerCall.Name);
                                newCall.Params.Add(innerCall.GetParam(0));
                                for (int i = 0; i < callData.GetParamNum(); ++i)
                                {
                                    Dsl.ISyntaxComponent p = callData.Params[i];
                                    newCall.Params.Add(p);
                                }
                            }
                            return(CreateCommand(newCall));
                        }
                    }
                }
                else if ((callData.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_OPERATOR ||
                          callData.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_BRACKET ||
                          callData.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PERIOD_BRACE ||
                          callData.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PERIOD_BRACKET ||
                          callData.GetParamClass() == (int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PERIOD_PARENTHESIS) &&
                         callData.GetId() == "=")
                {
                    Dsl.CallData innerCall = callData.GetParam(0) as Dsl.CallData;
                    if (null != innerCall)
                    {
                        //obj.property = val  or obj[property] = val or obj.(property) = val or obj.[property] = val or obj.{property} = val -> setinstance(obj,property,val)
                        Dsl.CallData newCall = new Dsl.CallData();
                        newCall.Name = new Dsl.ValueData("dotnetset", Dsl.ValueData.ID_TOKEN);
                        newCall.SetParamClass((int)Dsl.CallData.ParamClassEnum.PARAM_CLASS_PARENTHESIS);
                        if (innerCall.IsHighOrder)
                        {
                            newCall.Params.Add(innerCall.Call);
                            newCall.Params.Add(innerCall.GetParam(0));
                            newCall.Params.Add(callData.GetParam(1));
                        }
                        else
                        {
                            newCall.Params.Add(innerCall.Name);
                            newCall.Params.Add(innerCall.GetParam(0));
                            newCall.Params.Add(callData.GetParam(1));
                        }
                        return(CreateCommand(newCall));
                    }
                }
            }
            IStoryCommand command = null;
            string        type    = commandConfig.GetId();

            if (commandConfig.GetIdType() == Dsl.ValueData.ID_TOKEN)
            {
                IStoryCommandFactory factory = GetFactory(type);
                if (null != factory)
                {
                    try {
                        command = factory.Create();
                        if (!command.Init(commandConfig))
                        {
                            GameFramework.LogSystem.Error("[LoadStory] command:{0}[{1}] line:{2} failed.", type, commandConfig.ToScriptString(false), commandConfig.GetLine());
                        }
                    } catch (Exception ex) {
                        GameFramework.LogSystem.Error("[LoadStory] command:{0}[{1}] line:{2} failed.", type, commandConfig.ToScriptString(false), commandConfig.GetLine());
                        throw ex;
                    }
                }
                else
                {
#if DEBUG
                    string err = string.Format("[LoadStory] CreateCommand failed, line:{0} command:{1}[{2}]", commandConfig.GetLine(), type, commandConfig.ToScriptString(false));
                    GameFramework.LogSystem.Error("{0}", err);
                    throw new Exception(err);
#else
                    GameFramework.LogSystem.Error("[LoadStory] CreateCommand failed, type:{0} line:{1}", type, commandConfig.GetLine());
#endif
                }
                if (null != command)
                {
                    //GameFramework.LogSystem.Debug("[LoadStory] CreateCommand, type:{0} command:{1}", type, command.GetType().Name);
                }
                else
                {
#if DEBUG
                    string err = string.Format("[LoadStory] CreateCommand failed, line:{0} command:{1}[{2}]", commandConfig.GetLine(), type, commandConfig.ToScriptString(false));
                    GameFramework.LogSystem.Error("{0}", err);
                    throw new Exception(err);
#else
                    GameFramework.LogSystem.Error("[LoadStory] CreateCommand failed, type:{0} line:{1}", type, commandConfig.GetLine());
#endif
                }
            }
            return(command);
        }
 public void Set(Dsl.ISyntaxComponent p)
 {
     m_KeyOrValue = p.GetId();
 }
    public static void Import(string path, string name, ModelImporter importer)
    {
        Dsl.DslFile file = new Dsl.DslFile();
        if (file.Load(path, (string msg) => { Debug.Log(msg); }))
        {
            Dsl.ISyntaxComponent dslInfo  = null;
            Dsl.FunctionData     funcData = null;
            if (file.DslInfos.Count == 1)
            {
                dslInfo  = file.DslInfos[0];
                funcData = dslInfo as Dsl.FunctionData;
                var stData = dslInfo as Dsl.StatementData;
                if (null == funcData && null != stData)
                {
                    funcData = stData.First;
                }
            }
            else
            {
                foreach (var info in file.DslInfos)
                {
                    if (info.GetId() == "model")
                    {
                        funcData = info as Dsl.FunctionData;
                        var stData = info as Dsl.StatementData;
                        if (null == funcData && null != stData)
                        {
                            funcData = stData.First;
                        }
                        if (null != funcData)
                        {
                            var callData = funcData;
                            if (funcData.IsHighOrder)
                            {
                                callData = funcData.LowerOrderFunction;
                            }
                            if (callData.GetParamId(0) == name)
                            {
                                dslInfo = info;
                                break;
                            }
                        }
                    }
                }
            }
            if (null != dslInfo)
            {
                if (dslInfo.GetId() == "model")
                {
                    List <ModelImporterClipAnimation> list = new List <ModelImporterClipAnimation>();

                    foreach (Dsl.ISyntaxComponent clipInfo in funcData.Params)
                    {
                        var fd = clipInfo as Dsl.FunctionData;
                        if (null != fd)
                        {
                            var cd = fd;
                            if (fd.IsHighOrder)
                            {
                                cd = fd.LowerOrderFunction;
                            }
                            string id = cd.GetId();
                            if (id == "setting")
                            {
                                foreach (var settingInfo in fd.Params)
                                {
                                    var setting = settingInfo as Dsl.FunctionData;
                                    if (null != setting)
                                    {
                                        string key = setting.GetId();
                                        if (key == "import_animation")
                                        {
                                            importer.importAnimation = bool.Parse(setting.GetParamId(0));
                                        }
                                        else if (key == "resample_curves")
                                        {
                                            importer.resampleCurves = bool.Parse(setting.GetParamId(0));
                                        }
                                        else if (key == "animation_compression")
                                        {
                                            importer.animationCompression = GameFramework.Converter.ConvertStrToEnum <UnityEditor.ModelImporterAnimationCompression>(setting.GetParamId(0));
                                        }
                                        else if (key == "rotation_error")
                                        {
                                            importer.animationRotationError = float.Parse(setting.GetParamId(0));
                                        }
                                        else if (key == "position_error")
                                        {
                                            importer.animationPositionError = float.Parse(setting.GetParamId(0));
                                        }
                                        else if (key == "scale_error")
                                        {
                                            importer.animationScaleError = float.Parse(setting.GetParamId(0));
                                        }
                                    }
                                }
                            }
                            else if (id == "clip_animation")
                            {
                                ModelImporterClipAnimation clip = new ModelImporterClipAnimation();
                                clip.name = cd.GetParamId(0);
                                foreach (var settingInfo in fd.Params)
                                {
                                    var setting = settingInfo as Dsl.FunctionData;
                                    if (null != setting)
                                    {
                                        string key = setting.GetId();
                                        if (key == "take_name")
                                        {
                                            clip.takeName = setting.GetParamId(0);
                                        }
                                        else if (key == "first_frame")
                                        {
                                            clip.firstFrame = float.Parse(setting.GetParamId(0));
                                        }
                                        else if (key == "last_frame")
                                        {
                                            clip.lastFrame = float.Parse(setting.GetParamId(0));
                                        }
                                        else if (key == "loop_time")
                                        {
                                            clip.loopTime = bool.Parse(setting.GetParamId(0));
                                        }
                                        else if (key == "loop_pose")
                                        {
                                            clip.loopPose = bool.Parse(setting.GetParamId(0));
                                        }
                                        else if (key == "cycle_offset")
                                        {
                                            clip.cycleOffset = float.Parse(setting.GetParamId(0));
                                        }
                                        else if (key == "additive_reference_pose")
                                        {
                                            clip.hasAdditiveReferencePose = bool.Parse(setting.GetParamId(0));
                                        }
                                        else if (key == "additive_reference_pose_frame")
                                        {
                                            clip.additiveReferencePoseFrame = float.Parse(setting.GetParamId(0));
                                        }
                                    }
                                }
                                list.Add(clip);
                            }
                        }
                    }

                    importer.clipAnimations = list.ToArray();
                    importer.SaveAndReimport();
                }
            }
            else
            {
                EditorUtility.DisplayDialog("提示", "找不到对应名字的数据,如果需要不同名导入,导入数据里只能包含一个model", "ok");
            }
        }
    }
        public static void FinalParse(Dsl.ISyntaxComponent dslInfo)
        {
            string id = dslInfo.GetId();

            if (id == "command")
            {
                string name      = string.Empty;
                var    first     = dslInfo as Dsl.FunctionData;
                var    statement = dslInfo as Dsl.StatementData;
                if (null != first)
                {
                    name = first.Call.GetParamId(0);
                }
                else
                {
                    if (null != statement)
                    {
                        first = statement.First;
                        name  = first.Call.GetParamId(0);
                    }
                }

                IStoryCommandFactory factory = StoryCommandManager.Instance.FindFactory(name);
                if (null != factory)
                {
                    StorySystem.CommonCommands.CompositeCommand cmd = factory.Create() as StorySystem.CommonCommands.CompositeCommand;
                    cmd.InitialCommands.Clear();

                    Dsl.FunctionData bodyFunc = null;
                    if (null != statement)
                    {
                        for (int i = 0; i < statement.GetFunctionNum(); ++i)
                        {
                            var funcData = statement.GetFunction(i);
                            var fid      = funcData.GetId();
                            if (funcData.HaveStatement() && fid != "opts")
                            {
                                bodyFunc = funcData;
                            }
                        }
                    }
                    else
                    {
                        bodyFunc = first;
                    }
                    if (null != bodyFunc)
                    {
                        for (int ix = 0; ix < bodyFunc.GetStatementNum(); ++ix)
                        {
                            Dsl.ISyntaxComponent syntaxComp = bodyFunc.GetStatement(ix);
                            IStoryCommand        sub        = StoryCommandManager.Instance.CreateCommand(syntaxComp);
                            cmd.InitialCommands.Add(sub);
                        }
                    }
                    else
                    {
                        LogSystem.Error("Can't find command {0}'s body", name);
                    }
                }
                else
                {
                    LogSystem.Error("Can't find command {0}'s factory", name);
                }
            }
            else if (id == "value")
            {
                string name      = string.Empty;
                var    first     = dslInfo as Dsl.FunctionData;
                var    statement = dslInfo as Dsl.StatementData;
                if (null != first)
                {
                    name = first.Call.GetParamId(0);
                }
                else
                {
                    if (null != statement)
                    {
                        first = statement.First;
                        name  = first.Call.GetParamId(0);
                    }
                }

                IStoryValueFactory factory = StoryValueManager.Instance.FindFactory(name);
                if (null != factory)
                {
                    StorySystem.CommonValues.CompositeValue val = factory.Build() as StorySystem.CommonValues.CompositeValue;
                    val.InitialCommands.Clear();

                    Dsl.FunctionData bodyFunc = null;
                    if (null != statement)
                    {
                        for (int i = 0; i < statement.GetFunctionNum(); ++i)
                        {
                            var funcData = statement.GetFunction(i);
                            var fid      = funcData.GetId();
                            if (funcData.HaveStatement() && fid != "opts")
                            {
                                bodyFunc = funcData;
                            }
                        }
                    }
                    else
                    {
                        bodyFunc = first;
                    }
                    if (null != bodyFunc)
                    {
                        for (int ix = 0; ix < bodyFunc.GetStatementNum(); ++ix)
                        {
                            Dsl.ISyntaxComponent syntaxComp = bodyFunc.GetStatement(ix);
                            IStoryCommand        sub        = StoryCommandManager.Instance.CreateCommand(syntaxComp);
                            val.InitialCommands.Add(sub);
                        }
                    }
                    else
                    {
                        LogSystem.Error("Can't find value {0}'s body", name);
                    }
                }
                else
                {
                    LogSystem.Error("Can't find value {0}'s factory", name);
                }
            }
        }
示例#21
0
        internal IExpression Load(Dsl.ISyntaxComponent comp)
        {
            Dsl.ValueData valueData = comp as Dsl.ValueData;
            if (null != valueData)
            {
                int idType = valueData.GetIdType();
                if (idType == Dsl.ValueData.ID_TOKEN)
                {
                    NamedVarGet varExp = new NamedVarGet();
                    varExp.Load(comp, this);
                    return(varExp);
                }
                else
                {
                    ConstGet constExp = new ConstGet();
                    constExp.Load(comp, this);
                    return(constExp);
                }
            }
            else
            {
                Dsl.CallData callData = comp as Dsl.CallData;
                if (null != callData)
                {
                    if (!callData.HaveId())
                    {
                        int num = callData.GetParamNum();
                        if (num == 1)
                        {
                            Dsl.ISyntaxComponent param = callData.GetParam(0);
                            return(Load(param));
                        }
                        else
                        {
                            ParenthesisExp exp = new ParenthesisExp();
                            exp.Load(comp, this);
                            return(exp);
                        }
                    }
                    else
                    {
                        string op = callData.GetId();
                        if (op == "=")  //赋值
                        {
                            string      name = callData.GetParamId(0);
                            IExpression exp  = null;
                            if (name == "var")
                            {
                                exp = new VarSet();
                            }
                            else
                            {
                                exp = new NamedVarSet();
                            }
                            if (null != exp)
                            {
                                exp.Load(comp, this);
                            }
                            else
                            {
                                //error
                                Console.WriteLine("DslCalculator error, {0} line {1}", callData.ToScriptString(false), callData.GetLine());
                            }
                            return(exp);
                        }
                    }
                }
            }
            IExpression ret = Create(comp.GetId());

            if (null != ret)
            {
                if (!ret.Load(comp, this))
                {
                    //error
                    Console.WriteLine("DslCalculator error, {0} line {1}", comp.ToScriptString(false), comp.GetLine());
                }
            }
            else
            {
                //error
                Console.WriteLine("DslCalculator error, {0} line {1}", comp.ToScriptString(false), comp.GetLine());
            }
            return(ret);
        }