public static void Reset() { Flags.Clear(); Vars.Clear(); StringVars.Clear(); ActiveSpellTargets.Clear(); }
//Семантический разбор поля Inputs private void ParseInputs() { Inputs.Clear(); InputsList.Clear(); Vars.Clear(); var inputs = (ListNode <InputNode>) new InputsParsing(Keeper, InputsStr).ResultTree; TablikVar v = null; foreach (var node in inputs.Nodes) { var varCode = node.Token.Text; if (Inputs.ContainsKey(varCode)) { Keeper.AddError("Два входа с одинаковыми именами", node); } else if (varCode.ToLower() == "расчет" || varCode.ToLower() == "calc") { Keeper.AddError("Недопустимое имя входа", node); } switch (node.InputType) { case InputType.Simple: var dt = node.TypeNode == null ? DataType.Real : node.TypeNode.Text.ToDataType(); var at = node.SubTypeNode == null ? ArrayType.Single : node.SubTypeNode.Token.Text.ToArrayType(); var val = node.ValueNode == null ? null : node.ValueNode.Mean; v = new TablikVar(varCode, new SimpleType(dt, at), val); break; case InputType.Param: if (!Module.Params.ContainsKey(node.TypeNode.Text)) { Keeper.AddError("Не найден расчетный параметр", node.TypeNode); } else { var par = Module.Params[node.TypeNode.Text]; if (node.SubTypeNode == null) { if (!par.IsFun) { Keeper.AddError("Параметр без входов не может быть типом данных входа", node.TypeNode); } else { v = new TablikVar(varCode, par); } } else if (!par.Params.ContainsKey(node.SubTypeNode.Text)) { Keeper.AddError("Не найден расчетный подпараметр", node.SubTypeNode); } else { var spar = par.Params[node.SubTypeNode.Text]; if (!spar.IsFun) { Keeper.AddError("Подпараметр без входов не может быть типом данных входа", node.SubTypeNode); } else { v = new TablikVar(varCode, spar); } } } break; case InputType.Signal: string scode = node.TypeNode.Text.Substring(1, node.TypeNode.Text.Length - 2); ObjectTypeBase t = null; foreach (var con in Module.LinkedSources) { if (con.ObjectsTypes.ContainsKey(scode)) { if (t == null) { t = con.ObjectsTypes[scode]; } else { Keeper.AddError("Одинаковый код типа объекта в двух разных источниках", node); } } else if (con.BaseObjectsTypes.ContainsKey(scode)) { if (t == null) { t = con.BaseObjectsTypes[scode]; } else { Keeper.AddError("Одинаковый код типа объекта в двух разных источниках", node); } } } if (t != null) { v = new TablikVar(varCode, t) { MetSignals = new SetS(), MetProps = new SetS() } } ; else { Keeper.AddError("Не найден тип объекта или сигнала", node); } break; } if (v != null) { if (Inputs.ContainsKey(v.Code)) { Keeper.AddError("Два входа с одинаковыми именами", node); } else { if (v.DefaultValue == null && InputsList.Count > 0 && InputsList[InputsList.Count - 1].DefaultValue != null) { Keeper.AddError("Входы со значениямия по умолчанию должны располагаться в конце списка входов", node); } InputsList.Add(Vars.Add(v.Code, Inputs.Add(v.Code, v))); } } } }
private void WriteModule(SynModule mod) { Tab = 1; WriteClassHeader(mod.DirectModule.ModuleName); ClassVars.Clear(); foreach (var v in mod.DirectModule.Vars) { // WriteVar(v); Console.WriteLine("Var:" + v.Name); ClassVars.Add(v.Name); } foreach (var v in mod.DirectModule.StaticVars) { // WriteStaticVar(v); Console.WriteLine("Var:" + v.Name); ClassVars.Add(v.Name); } foreach (var meth in mod.DirectModule.Methods) { AddVars(meth.Code); } foreach (var func in mod.DirectModule.StaticFuncs) { AddVars(func.Code); } foreach (var v in Vars) { bool add = true; foreach (var cv in ClassVars) { if (cv == v) { add = false; break; } } if (add) { ClassVars.Add(v); } } foreach (var cv in ClassVars) { Tab = 2; Write("public dynamic " + cv + " = null;"); } Vars.Clear(); foreach (var meth in mod.DirectModule.Methods) { if (meth.FuncName == mod.DirectModule.ModuleName) { Tab = 3; WriteNewFunc(meth); } else { Tab = 3; WriteFunc(meth); } } Tab = 2; WriteClassFooter(); }
public void ClearScope() { Vars.Clear(); }
public override void SetFieldName(string fieldName) { base.SetFieldName(fieldName); Vars.Clear(); }