public bool Load(Dsl.ISyntaxComponent dsl, Interpreter interpreter) { m_Interpreter = interpreter; m_Dsl = dsl; Dsl.ValueData valueData = dsl as Dsl.ValueData; if (null != valueData) { return(Load(valueData)); } else { Dsl.FunctionData funcData = dsl as Dsl.FunctionData; if (null != funcData) { if (funcData.HaveParam()) { var callData = funcData; bool ret = Load(callData); if (!ret) { int num = callData.GetParamNum(); List <IExpression> args = new List <IExpression>(); for (int ix = 0; ix < num; ++ix) { Dsl.ISyntaxComponent param = callData.GetParam(ix); args.Add(interpreter.Load(param)); } return(Load(args)); } return(ret); } else { return(Load(funcData)); } } else { Dsl.StatementData statementData = dsl as Dsl.StatementData; if (null != statementData) { return(Load(statementData)); } } } return(false); }
public IExpression Load(Dsl.ISyntaxComponent comp) { Dsl.ValueData valueData = comp as Dsl.ValueData; Dsl.FunctionData funcData = null; if (null != valueData) { int idType = valueData.GetIdType(); if (idType == Dsl.ValueData.ID_TOKEN) { string id = valueData.GetId(); if (id == "true" || id == "false") { ConstGet constExp = new ConstGet(); constExp.Load(comp, this); return(constExp); } else { NamedVarGet varExp = new NamedVarGet(); varExp.Load(comp, this); return(varExp); } } else { ConstGet constExp = new ConstGet(); constExp.Load(comp, this); return(constExp); } } else { funcData = comp as Dsl.FunctionData; if (null != funcData && funcData.HaveParam()) { var callData = funcData; string op = callData.GetId(); if (op == "=") //赋值 { IExpression exp = null; string name = callData.GetParamId(0); exp = new NamedVarSet(); if (null != exp) { exp.Load(comp, this); } else { //error Log("Interpreter error, {0} line {1}", callData.ToScriptString(false), callData.GetLine()); } return(exp); } } } IExpression ret = null; string expId = comp.GetId(); if (null != funcData && !funcData.IsHighOrder && m_Funcs.ContainsKey(expId)) { ret = new FuncCallExp(); } else { IExpressionFactory factory; if (m_Apis.TryGetValue(expId, out factory)) { ret = factory.Create(); } } if (null != ret) { if (!ret.Load(comp, this)) { //error Log("Interpreter error, {0} line {1}", comp.ToScriptString(false), comp.GetLine()); } } else { //error Log("Interpreter error, {0} line {1}", comp.ToScriptString(false), comp.GetLine()); } return(ret); }