public ExprConst(LexExpr lex, CalcParam calc) : base(lex, calc) { switch (lex.DataType) { case DataType.Boolean: _moment = new Moment(DataType.Boolean, lex.Code); break; case DataType.Integer: _moment = new Moment(DataType.Integer, lex.Code); break; case DataType.Real: _moment = new Moment(DataType.Real, lex.Code); break; case DataType.Time: _moment = new Moment(DataType.Time, Lex.Code); break; case DataType.String: _moment = new Moment(DataType.String, calc.Strings[int.Parse(Lex.Code)]); break; } if (_moment == null) { _moment = new Moment(DataType.Boolean); } }
//Фабрика для создания Expr разного типа, на входе строка типа Type!Name(DataType,Par,Par,.....) public static Expr New(string s, CalcParam calc) { var lex = new LexExpr(s); switch (lex.Type) { case "const": return(new ExprConst(lex, calc)); case "signal": case "handsignal": return(new ExprSignal(lex, calc)); case "var": case "varuse": return(new ExprVar(lex, calc)); case "fun": return(new ExprFun(lex, calc)); case "calc": case "met": return(new ExprCalc(lex, calc)); case "prev": return(new ExprPrev(lex, calc)); case "grafic": return(new ExprGrafic(lex, calc)); case "op": return(new ExprOp(lex, calc)); } return(new ExprOp(lex, calc)); }
public ExprOp(LexExpr lex, CalcParam calc) : base(lex, calc) { var ss = Lex.Code.Split('_'); CodeFun = ss[0]; if (ss.Length > 1) { LinkAddress = int.Parse(ss[1]); } IsFilterIf = !new HashSet <string> { "void", "owner", "caller", "getelement" }.Contains(CodeFun) && !CodeFun.StartsWith("prev") && !CodeFun.StartsWith("signal") && !CodeFun.StartsWith("take"); }
public ExprFun(LexExpr lex, CalcParam calc) : base(lex, calc) { string fname = lex.Code;//Имя делегата for (int k = 0; k < lex.Pars.Count; k++) { if (lex.Pars[k][0] != '$') { fname += lex.Pars[k].Substring(1); } } Fun = Thread.FunsDic[fname]; }
public ExprSignal(LexExpr lex, CalcParam calc) : base(lex, calc) { var sou = calc.Signals[int.Parse(lex.Code)]; if (calc.Project.SignalsSources.ContainsKey(sou)) { _signal = calc.Project.SignalsSources[sou]; } if (lex.Type == "handsignal") { _handDefaultValue = calc.HandInputValue; } }
public ExprPrev(LexExpr lex, CalcParam calc) : base(lex, calc) { }
public ExprGrafic(LexExpr lex, CalcParam calc) : base(lex, calc) { Grafic = calc.Project.Grafics[lex.Code]; }
protected Expr(LexExpr lex, CalcParam calc) { Lex = lex; CalcParam = calc; }