当前位置: 首页>>代码示例>>C#>>正文


C# Record.SetVariable方法代码示例

本文整理汇总了C#中Record.SetVariable方法的典型用法代码示例。如果您正苦于以下问题:C# Record.SetVariable方法的具体用法?C# Record.SetVariable怎么用?C# Record.SetVariable使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Record的用法示例。


在下文中一共展示了Record.SetVariable方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: InitVariable

    /// <summary>
    /// Инициализирует переменную
    /// </summary>
    /// <param name="name">Имя переменной</param>
    /// <param name="type">Тип переменной</param>
    /// <param name="add_to_enviroment">Флаг, указывающий на то, стоит ли добавлять переменную в окружение</param>
    /// <returns>Созданную переменную</returns>
    private Variable InitVariable(string name, string type)
    {
        if (name == null)
        {
            name = "DYNAMIC";
        }

        type = GetRealType(FindType(type).Trim());
        bool pointer = (type.StartsWith("^")) ? true : false;
        if (pointer)
        {
            type = type.Remove(0, 1);
            Pointer p = new Pointer(name, type);
            if (name != "")
                env.Add(p, name);
            return p;
        }
        else
        {
            if (type.StartsWith("record") && type.EndsWith("end"))
            {
                string var_type = type.Remove(0, 6)
                    .Remove(type.Length - 9);
                var_type = var_type.Trim();
                TypeStruct[] tmp = GetTypeStructFromField(var_type);
                string[] names = new string[tmp.Length];
                Record r = new Record(name);
                r.type = type;
                for (int i = 0; i < names.Length; i++)
                    names[i] = tmp[i].name;
                r.SetFields(names);
                for (int i = 0; i < names.Length; i++)
                {
                    Variable v = InitVariable("", tmp[i].type);
                    r.SetVariable(v, names[i]);
                }
                if (name != "")
                    env.Add(r, name);
                return r;
            }
            else if (type.StartsWith("array"))
            {
                Match m;
                if ((m = Regexs.Match(type, Regs.ArrayClassic)).Success)
                {
                    object start = null;
                    if (!env.TryCalculate(m.Groups["from"].Value, out start))
                        throw new Exception(m.Groups["from"].Value + " не может быть начальным индексом массива");
                    object end = null;
                    if (!env.TryCalculate(m.Groups["to"].Value, out end))
                        throw new Exception(m.Groups["to"].Value + " не может быть конечным индексом массива");
                    if (start.GetType().Name != end.GetType().Name)
                        throw new Exception("Тип начального и конечного индекса массива должны совпадать");
                    if (start == null)
                        throw new Exception("Индекс массива не распознан, возможно вы использовали недопустимое выражение");
                    int len = 0;
                    if (start.GetType().Name == "Double")
                    {
                        if ((double)start >= (double)end)
                            throw new Exception("Начальны индекс не может быть больше или равен конечному");
                        else if ((int)(double)end != (double)end || (int)(double)start != (double)start)
                            throw new Exception("Индекс не может быть вещественным числом");
                        else
                            len = (int)(double)end - (int)(double)start + 1;
                    }
                    else if (start.GetType().Name == "Boolean")
                    {
                        if ((bool)start == true || (bool)end == false)
                            throw new Exception("Начальны индекс не может быть больше или равен конечному");
                        else
                               len = 2;
                    }

                    Massiv mas = new Massiv(name);
                    string[] names = new string[len];
                    if (start.GetType().Name == "Boolean")
                    {
                        names[0] = "false";
                        names[1] = "true";
                    }
                    else
                        for (int i = 0; i < len; i++)
                            names[i] = (i + (int)(double)start).ToString();
                    mas.SetFields(names);
                    for (int i = 0; i < len; i++)
                    {
                        Variable v = InitVariable("", m.Groups["base_type"].Value);
                        mas.SetVariable(v, names[i]);
                    }
                    mas.type = type;
                    if (name != "")
                        env.Add(mas, name);
                    return mas;
//.........这里部分代码省略.........
开发者ID:ushim,项目名称:PascalCompile,代码行数:101,代码来源:ParseCode.cs


注:本文中的Record.SetVariable方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。