Beispiel #1
0
        public override dynamic Run(FunctionStruct fs)
        {
            var args = fs.ListArgs;

            if (args.Count < 1)
            {
                throw new Exception($"функция #{FuncsEnum.создатьАВ} принимает 1+ параметров ( сложность арифм. выражения | диапазон | тип | зависимость от кол-ва пермененных) | строка = [ {fs.ToString()} ]");
            }
            try
            {
                // получение параметров
                double range       = args.Count > 1 ? double.Parse(args[1].Replace('.', ',')) : 25;
                bool   isDouble    = args.Count > 2 ? args[2].Trim(' ') == TypesEnum.дробное.ToString() : false;
                int    countofvars = args.Count > 3 ? int.Parse(args[3]) : 1;
                int    finesse     = args.Count > 4 ? int.Parse(args[4]) : 2;
                bool   frac        = args.Count > 5 ? bool.Parse(args[5]) : _makeFrac;
                int    diff        = int.Parse(args[0]);
                // генерация арифм. выражения
                _arithmExpr.MakeAE(diff, range, isDouble, countofvars, finesse, frac);
            }
            catch (Exception ex)
            {
                throw new Exception($"Ошибка во время парсинга аргументов функции #{FuncsEnum.создатьАВ} | строка = [ {fs.Raw} | ошибка = {ex.Message}]");
            }

            // все возвращаемые значения
            return(new List <(string, string)> {
                ("выражение", _arithmExpr.ExpressionMD),
                ("вычисление", _arithmExpr.Expression),
                ("условие", _arithmExpr.Conditions),
                ("код", _arithmExpr.Code)
            });
Beispiel #2
0
        // шаблонный метод
        public List <(string, string)> Call(FunctionStruct fs)
        {
            // вовзвращаемые данные
            List <(string, string)> returningData = new List <(string, string)>();
            // вызов конкретного метода
            var result = Run(fs);

            // создание списка готовых значений
            if (MultypleReturnDatas)
            {
                if (result.ToString() == "table")
                {
                    LuaTable lt = (LuaTable)result;
                    foreach (var k in lt.Keys)
                    {
                        returningData.Add((k.ToString().ToLower(), lt[k].ToString()));
                    }
                }
                else
                {
                    return(result);
                }
            }
            else
            {
                returningData.Add(("0", result));
            }

            return(returningData);
        }
Beispiel #3
0
        public override dynamic Run(FunctionStruct fs)
        {
            // получение кода на lua из аргумента
            StringBuilder s = new StringBuilder(fs.Args);

            if (s[0] == '\"' && s[^ 1] == '\"')
            {
                s[0]   = ' ';
                s[^ 1] = ' ';
Beispiel #4
0
        public override dynamic Run(FunctionStruct fs)
        {
            var args = fs.ListArgs;

            if (args.Count == 3)
            {
                args.Insert(2, TypesEnum.дробное.ToString());
            }
            if (args.Count == 2)
            {
                args.Add(TypesEnum.дробное.ToString());
            }
            return(Next(args, fs.ToString()));
        }
Beispiel #5
0
        // вызов необходимых функций
        public List <(string, string)> WhatToDoWithParam(FunctionStruct fs)
        {
            List <(string, string)> ls = new List <(string, string)>();

            switch (fs.FuncsEnum)
            {
            // если функция вовсе не фукнция, а просто строка - возвращаем ее
            case FuncsEnum.justString:
                ls.Add(("0", fs.Raw));
                break;

            // вызов необходимой функции
            default:
                ls = _f[fs.FuncsEnum].Call(fs);
                break;
            }
            return(ls);
        }
Beispiel #6
0
        public override dynamic Run(FunctionStruct fs)
        {
            // анализ - какой метод необходимо вызвать и из какого модуля
            List <(string, string)> ls = new List <(string, string)>();
            int pos = fs.FullFunctionName.IndexOf('.');

            if (pos == -1)
            {
                ls.Add(("0", fs.Raw)); return(ls);
            }
            string moduleName = fs.FullFunctionName.Substring(0, pos).Replace("\\", "/");
            string funcName   = fs.FullFunctionName.Substring(pos + 1, fs.FullFunctionName.Length - pos - 1);
            // создание кода для вызова метода
            var package = GetPackage(moduleName);

            fs.Args = $"\"{package} local lib = require('{moduleName}');return lib.{funcName}({fs.Args});\"";
            // вызов метода
            return(base.Run(fs));
        }
Beispiel #7
0
        public override dynamic Run(FunctionStruct fs)
        {
            var args = fs.ListArgs;

            return(Next(args, fs.ToString()));
        }
Beispiel #8
0
 public override dynamic Run(FunctionStruct fs)
 {
     return(base.Run(fs));
 }
        /// <summary>
        /// 解析一个方法的注释,并把方法信息装箱到_ClassStruct
        /// </summary>
        /// <param name="docs"></param>
        /// <returns></returns>
        void AnalyticalFunction(List <Dictionary <string, string> > docs)
        {
            FunctionStruct fs = new FunctionStruct();

            foreach (var item in docs)
            {
                //这是一个方法
                if (item.ContainsValue(functionKey))
                {
                    string[] line          = item.Keys.First().Split(spaseKey, StringSplitOptions.None);
                    string   functionName  = line[1];
                    string   functionClass = line[0].Split(new string[] { "=#" }, StringSplitOptions.None)[1].Replace("]", "");
                    if (functionClass == _classStruct._Class)
                    {
                        fs._Function = functionName;
                    }
                }
                else if (item.ContainsValue(functionDocKey))
                {
                    fs._Doc += item.Keys.First();
                }
                //这是一个参数
                else if (item.ContainsValue(paramKey))
                {
                    string key = item.Keys.First();
                    if (!IsIgnoreKey(key))
                    {
                        int index = key.IndexOf(" ");
                        if (index == -1)
                        {
                            index = key.Length;
                        }
                        string[]      keyData = key.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                        StringBuilder sb      = new StringBuilder();
                        for (int i = 0; i < keyData.Length - 1; i++)
                        {
                            sb.Add(keyData[i]).Add(" ");
                        }

                        string      paramType = sb.GetString().Trim(' ').Trim('#');
                        string      paramName = keyData[keyData.Length - 1].Trim(' ').Trim('#'); //key.Substring(index, key.Length - index).Trim(' ');
                        ParamStruct ps;
                        if (fs._Params == null)
                        {
                            fs._Params = new List <ParamStruct>();
                        }
                        if (fs._Params.Exists(x =>
                                              x._Param == paramName))
                        {
                            ps = fs._Params.Find(x => x._Param == paramName);
                            fs._Params.Remove(ps);
                        }
                        else
                        {
                            ps        = new ParamStruct();
                            ps._Param = paramName;
                        }
                        ps._Type = paramType;
                        fs._Params.Add(ps);
                    }
                }
                //这是一个参数的注释
                else if (item.ContainsValue(paramDocKey))
                {
                    string key   = item.Keys.First();
                    int    index = key.IndexOf(" ");
                    if (index == -1)
                    {
                        index = key.Length;
                    }
                    string      paramName = key.Substring(0, index).Trim(' ');
                    string      paramDoc  = key.Substring(index, key.Length - index).Trim(' ');
                    ParamStruct ps;
                    if (fs._Params == null)
                    {
                        fs._Params = new List <ParamStruct>();
                    }
                    if (fs._Params.Exists(x =>
                                          x._Param == paramName))
                    {
                        ps = fs._Params.Find(x => x._Param == paramName);
                        fs._Params.Remove(ps);
                    }
                    else
                    {
                        ps        = new ParamStruct();
                        ps._Param = paramName;
                    }
                    ps._Doc = paramDoc;
                    fs._Params.Add(ps);
                }
                //这是一个返回值
                else if (item.ContainsValue(returnKey))
                {
                    fs._Return._ReturnType = item.Keys.First().Split(new string[] { "#" }, StringSplitOptions.None)[0];
                }
            }
            if (_classStruct._Functions == null)
            {
                _classStruct._Functions = new List <FunctionStruct>();
            }
            _classStruct._Functions.Add(fs);
        }
Beispiel #10
0
 public abstract dynamic Run(FunctionStruct fs);