Пример #1
0
        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);
            }
        }
Пример #2
0
        //Фабрика для создания 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));
        }
Пример #3
0
        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");
        }
Пример #4
0
        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];
        }
Пример #5
0
        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;
            }
        }
Пример #6
0
 public ExprPrev(LexExpr lex, CalcParam calc) : base(lex, calc)
 {
 }
Пример #7
0
 public ExprGrafic(LexExpr lex, CalcParam calc) : base(lex, calc)
 {
     Grafic = calc.Project.Grafics[lex.Code];
 }
Пример #8
0
 protected Expr(LexExpr lex, CalcParam calc)
 {
     Lex       = lex;
     CalcParam = calc;
 }