Beispiel #1
0
        //============================================================
        // <T>在Map表中查找类型对应的全名。</T>
        //
        // @param filenode 从文件中提取的待查找节点
        // @param type 类型
        // @return 查找到的全名
        //============================================================
        public string LookInMap(FFileNode filenode, string type)
        {
            string fullClassString = string.Empty;
            string key             = filenode.ClassStr;

            if (_classesMap.Contains(key))
            {
                FArray <string> value = _classesMap[key];
                if (_classesMap.Contains(key) && value.Length == 1)
                {
                    fullClassString = value[0].ToString();
                    if (fullClassString != string.Empty)
                    {
                        return(fullClassString + "." + type);
                    }
                    else
                    {
                        return(type);
                    }
                }
                if (_classesMap.Contains(key) && value.Length > 1)
                {
                    fullClassString = GetCorrectNamespace(filenode.Impotrs, value);
                    if (fullClassString != string.Empty)
                    {
                        return(fullClassString + "." + type);
                    }
                    else
                    {
                        return(type);
                    }
                }
            }
            return(type);
        }
Beispiel #2
0
        //============================================================
        // <T>扫描字符串中的逗号,并在符合条件的逗号后面加上$符号。</T>
        //
        // @param commastr 需要扫描逗号的字符串
        // @return 扫面并修改之后的字符串
        //============================================================
        public string ScanComma(string commastr)
        {
            char[]        c = commastr.ToCharArray();
            FArray <char> charArr = new FArray <char>();
            int           left = 0, right = 0;

            for (int n = 0; n < c.Length; n++)
            {
                if (c[n] == '<')
                {
                    left++;
                }
                if (c[n] == '>')
                {
                    right++;
                }
                if (c[n] == ',' && left == right)
                {
                    charArr.Add('$');
                }
                charArr.Add(c[n]);
            }
            char[] cs  = charArr.ToArray();
            string str = new string(cs);

            return(str);
        }
Beispiel #3
0
 //============================================================
 // <T>构造函数</T>
 //============================================================
 public FCsClass()
 {
     _accessLevel = string.Empty;
     _className   = string.Empty;
     _annotates   = new FStrings();
     _method      = new FArray <FCsMethod>();
 }
Beispiel #4
0
 //============================================================
 // <T>构造方法</T>
 //============================================================
 public FCsMethod()
 {
     _methodName = string.Empty;
     _methodType = string.Empty;
     _annotates  = new FStrings();
     _parameter  = new FArray <FCsParameter>();
 }
Beispiel #5
0
        static Offset <FArray> Serialise(FlatBufferBuilder b, IHasFloatArray float_a)
        {
            var v_offset = FArray.CreateArrayVectorBlock(b, float_a.ObservationArray);
            //var v_offset = CustomFlatBufferImplementation.CreateFloatVector(b, float_a.ObservationArray);

            var ranges_vector = new VectorOffset();

            FArray.StartRangesVector(b, float_a.ObservationSpace.Length);
            foreach (var tra in float_a.ObservationSpace)
            {
                FRange.CreateFRange(b,
                                    tra.DecimalGranularity,
                                    tra.Max,
                                    tra.Min,
                                    tra.NormalisedBool);
            }

            ranges_vector = b.EndVector();

            FArray.StartFArray(b);
            FArray.AddArray(b, v_offset);

            FArray.AddRanges(b, ranges_vector);

            return(FArray.EndFArray(b));
        }
Beispiel #6
0
 //============================================================
 // <T>构造函数</T>
 //============================================================
 public FCsSpace(FStrings strLine, int beginLine, int endLine)
 {
     _spaceStr   = strLine;
     _startIndex = beginLine;
     _endIndex   = endLine;
     _spaceName  = string.Empty;
     _class      = new FArray <FCsClass> ( );
 }
Beispiel #7
0
        public static FObject NewArray(FArray array)
        {
            var o = new FObject {
                Type = FObjectType.Array, PTR = VirtualMachine.Heap.Add(array)
            };

            ;
            return(o);
        }
Beispiel #8
0
        static Offset <FArray> build_array(FlatBufferBuilder b, IHasArray camera)
        {
            var v_offset = FArray.CreateArrayVector(b, camera.ObservationArray);

            //FArray.StartRangesVector(b,);
            FArray.StartFArray(b);
            FArray.AddArray(b, v_offset);
            //FArray.AddRanges(b,);
            return(FArray.EndFArray(b));
        }
Beispiel #9
0
 //============================================================
 // <T>构造方法</T>
 //============================================================
 public FCsMethod(FStrings strlines, int beginIndex, int endIndex)
 {
     _methodName = string.Empty;
     _methodType = string.Empty;
     _annotates  = new FStrings();
     _parameter  = new FArray <FCsParameter>();
     _strLine    = strlines;
     _beginIndex = beginIndex;
     _endIndex   = endIndex;
 }
Beispiel #10
0
 //============================================================
 // <T>构造函数</T>
 //============================================================R
 public FCsClass(FStrings strLine, int startIndex, int endIndex)
 {
     _accessLevel = string.Empty;
     _className   = string.Empty;
     _annotates   = new FStrings();
     _method      = new FArray <FCsMethod>();
     _strLine     = strLine;
     _startIndex  = startIndex;
     _endIndex    = endIndex;
 }
Beispiel #11
0
 //============================================================
 // <T> 取得在FArray<FCppClass>中class的索引号。</T>
 //
 // @param cppClasses 被查找的Array
 // @param cppClass 需要查找的Node
 // @return 若是存在则返回索引号,否则返回-1;
 //============================================================
 public int ExistNo(FArray <FCppClass> cppClasses, FCppClass cppClass)
 {
     for (int n = 0; n < cppClasses.Length; n++)
     {
         if (cppClasses[n].ClassName == cppClass.ClassName)
         {
             return(n);
         }
     }
     return(-1);
 }
Beispiel #12
0
 //============================================================
 // <T>向类索引Map表中加入节点 。</T>
 //
 // @param node 需要加入的节点信息
 //============================================================
 public void AddNode(FMapNode node)
 {
     if (_classesMap.Contains(node.ClassStr))
     {
         _classesMap[node.ClassStr].Add(node.ArrayStr);
     }
     else
     {
         FArray <string> arrNode = new FArray <string>();
         arrNode.Add(node.ArrayStr);
         _classesMap.Set(node.ClassStr, arrNode);
     }
 }
Beispiel #13
0
 //============================================================
 // <T>获得正确的命名空间</T>
 //
 // @param type 类型列表
 // @param node 待查找节点
 //============================================================
 public string GetCorrectNamespace(FArray <string> type, FArray <string> node)
 {
     for (int n = 0; n < type.Length; n++)
     {
         for (int i = 0; i < node.Length; i++)
         {
             if (type[n].ToString().Trim() == node[i].ToString().Trim())
             {
                 return(type[n].ToString().Trim());
             }
         }
     }
     return(string.Empty);
 }
 //============================================================
 // <T>向MAP表里面加入节点。</T>
 //
 // @param node 需要加工的节点
 // @param dotHFilePath H文件的路径
 //============================================================
 public void AddNode(FMapNode node, string dotHFilePath)
 {
     if (_classesMap.Names.Contains(node.FileDotH))
     {
         _classesMap[node.FileDotH].Add(node.ClassStr);
     }
     else
     {
         FArray <string> arrNode = new FArray <string>();
         arrNode.Add(dotHFilePath);
         arrNode.Add(node.ClassStr);
         _classesMap.Set(node.FileDotH, arrNode);
     }
 }
Beispiel #15
0
        /****************************************************************
         *                         Arrays Node
         ***************************************************************/

        public Node ArrayDeclaration()
        {
            Expect(TokenCategory.PARENTHESIS_OPEN);
            var arr = new FArray();

            arr.Add(Expression());

            while (CurrentToken == TokenCategory.COMMA)
            {
                Expect(TokenCategory.COMMA);
                arr.Add(Expression());
            }

            Expect(TokenCategory.PARENTHESIS_CLOSE);
            return(arr);
        }
Beispiel #16
0
        //============================================================
        // <T>将被选择的文件解析为类对象数组,并解析出代码在编译器外的警告或者错误。</T>
        //
        // @param indextable 从.h文件中解析出来的类与头文件对应的MAP表
        // @param putPath XML文档的输出路径
        // @param swPrint StringWriter对象用来输出警告或者错误。
        // @param fileCpp 当前解析的文件
        // @param relativePath 被选择解析的文件夹路径
        //============================================================
        public void ParserFileCpp(FileInfo fileCpp, FCppClassesIndexTable indextable, string outPath, string relativePath, StreamWriter swPrint)
        {
            FStrings           strLines = FCppParser.GetLines(fileCpp.FullName);
            string             strClass = string.Empty;
            FArray <FCppClass> classArr = new FArray <FCppClass>();
            int start, end = CheckParaAnnotate(strLines, 0, out start);

            for (int n = 0; n < strLines.Count; n++)
            {
                if (IsInInterregional(n, start, end))
                {
                    continue;
                }
                if (FCppMethod.IsMethodInCpp(strLines, n))
                {
                    FCppMethod method   = new FCppMethod(strLines, n, GetPairNum(strLines, n));
                    string     classStr = GetClassInCpp(strLines, n);
                    strClass = classStr;
                    FFileNode node      = MakeNode(strLines, GetClassInCpp(strLines, n));
                    string    fileHpath = indextable.LookInMap(node);
                    if (fileHpath == "")
                    {
                        continue;
                    }
                    FCppClass cppClass = ParserFileH(fileHpath, classStr);
                    int       index    = ExistNo(classArr, cppClass);
                    if (index != -1)
                    {
                        classArr.Get(index).Method.Add(method);
                    }
                    else
                    {
                        cppClass.Method.Add(method);
                        classArr.Add(cppClass);
                    }
                }
            }
            ProduceXMLFile(classArr, outPath, swPrint, fileCpp, relativePath);
            if (strLines[strLines.Count - 1].Trim() != "")
            {
                string errID = "CPP07CL06E" + strLines.Count.ToString() + "L";
                string path  = fileCpp.FullName.Substring(relativePath.Length);
                string error = "[错误][" + errID.PadRight(16) + "][" + path + "(" + strLines.Count.ToString().PadRight(5) + ")]";
                swPrint.WriteLine(error);
            }
        }
Beispiel #17
0
        public FArray <string> GetUsing(FStrings strLines)
        {
            FArray <string> usings = new FArray <string>();

            for (int n = 0; n < strLines.Count; n++)
            {
                string strTemp = strLines[n].ToString().Trim();
                if (strTemp.Contains("using") && strTemp.Contains("MO"))
                {
                    string usinginfo = strTemp.Substring(6).Trim();
                    usings.Add(usinginfo);
                }
                if (!strTemp.Contains("using"))
                {
                    return(usings);
                }
            }
            return(usings);
        }
        //============================================================
        // <T>在MAP表中查找对应值。</T>
        //
        // @param filenode 在文件中生成的查找节点。
        // @return 查找到的值
        //============================================================
        public string LookInMap(FFileNode filenode)
        {
            FArray <string> heads = new FArray <string>();

            heads = filenode.HeadHS;
            string classstr = filenode.ClassStr;

            foreach (string head in heads)
            {
                if (_classesMap.Contains(head))
                {
                    if (_classesMap[head].Contains(classstr))
                    {
                        return(_classesMap[head][0].Trim());
                    }
                }
            }
            return(string.Empty);
        }
Beispiel #19
0
        //============================================================
        //<T>将类所继承的接口作为子节点连接到类的节点下面</T>
        // @param interface 接口的字符串组
        // @param nodeClass 要连接的父节点,也就是类的节点
        //============================================================
        public void MakeInterfaceNode(FArray <string> interfaces, FXmlNode nodeClass, FClassesIndexTable indextable)
        {
            if (interfaces == null || interfaces.Length < 1)
            {
                return;
            }
            FXmlNode nodeInterface = new FXmlNode("Inherts");

            foreach (string str in interfaces)
            {
                FXmlNode  inhert    = new FXmlNode("Inhert");
                string    inhertstr = str.Trim();
                FFileNode type      = new FFileNode(inhertstr, GetUsing(_strLine));
                inhertstr = indextable.LookInMap(type, inhertstr);
                inhert.Set("name", inhertstr.Trim());
                nodeInterface.Push(inhert);
            }
            nodeClass.Push(nodeInterface);
        }
Beispiel #20
0
        public FArray <string> GetImport(FStrings strLines)
        {
            FArray <string> imports = new FArray <string>();

            for (int n = 0; n < strLines.Count; n++)
            {
                string strTemp = strLines[n].ToString().Trim();
                if (strTemp.Contains("import") && strTemp.Contains("MO"))
                {
                    string usinginfo = strTemp.Substring(6).Trim();
                    imports.Add(usinginfo);
                }
                if (!strTemp.Contains(" class "))
                {
                    return(imports);
                }
            }
            return(imports);
        }
Beispiel #21
0
 //============================================================
 // <T>将一组提取出来的类对象解析成XML文档,并解析出代码在编译器外的警告或者错误。</T>
 //
 // @param classArr 一组类对象
 // @param putPath XML文档的输出路径
 // @param swPrint StringWriter对象用来输出警告或者错误。
 // @param file 当前解析的文件
 // @param relativePath 被选择解析的文件夹路径
 //============================================================
 public void ProduceXMLFile(FArray <FCppClass> classArr, string outPath, StreamWriter swPrint, FileInfo file, string relativePath)
 {
     for (int n = 0; n < classArr.Length; n++)
     {
         if (classArr[n] != null)
         {
             FXmlDocument doc    = new FXmlDocument();
             FXmlNode     config = doc.Root;
             FXmlNode     node   = classArr[n].XMLMaker(swPrint, file, relativePath);
             config.Push(node);
             FXmlNode methods = new FXmlNode("Methods");
             node.Push(methods);
             for (int i = 0; i < classArr[n].Method.Length; i++)
             {
                 classArr[n].Method[i].ParserMethod(methods, swPrint, file, relativePath);
             }
             doc.SaveFile(@outPath + "\\" + classArr[n].ClassName + ".xml");
         }
     }
 }
Beispiel #22
0
        public FArray <string> GetInclude(FStrings strLines)
        {
            FArray <string> includes = new FArray <string>();

            for (int n = 0; n < strLines.Count; n++)
            {
                string strTemp = strLines[n].Trim();
                if (strTemp.Contains("include") && strTemp.Contains("\""))
                {
                    int    start = strTemp.IndexOf("\"") + 1;
                    int    end   = strTemp.LastIndexOf("\"");
                    string temp  = strTemp.Substring(start, end - start);
                    includes.Add(temp);
                }
                if (!strTemp.Contains("#") && strTemp != "")
                {
                    return(includes);
                }
            }
            return(includes);
        }
Beispiel #23
0
 //============================================================
 // <T>构造函数</T>
 //============================================================
 public FCsSpace( )
 {
     _spaceName = string.Empty;
     _class     = new FArray <FCsClass> ( );
 }
 //============================================================
 // <T>构造方法</T>
 //============================================================
 public FFileNode()
 {
     _headHs = new FArray <string>();
     _class  = string.Empty;
 }
 //============================================================
 // <T>构造方法,带参数的</T>
 //
 // @param classstr 类名
 // @param headhs 文件中提取的所包含的头文件名数组
 //============================================================
 public FFileNode(string classstr, FArray <string> headhs)
 {
     this._headHs = headhs;
     this._class  = classstr;
 }
Beispiel #26
0
 private static void LoadArrayFunctions()
 {
     functions["insert"] = new FBuiltin
     {
         // Arity count is not including caller object (array in this case)
         Arity     = 2, CallObjectTypes = { FObjectType.Array },
         Invokable = (fi, ins) =>
         {
             ins[0].Array().Insert(ins[1].I64, ins[2]);
             return(ins[0]);
         },
         ArgumentTypes = { FObjectType.Array, FObjectType.Int, FObjectType.Any }
     };
     functions["count"] = new FBuiltin
     {
         Arity     = 0, CallObjectTypes = { FObjectType.Array, FObjectType.String },
         Invokable = (fi, ins) => FObject.NewI64(ins[0].Array().Length),
     };
     functions["remove"] = new FBuiltin
     {
         Arity     = 1, CallObjectTypes = { FObjectType.Array },
         Invokable = (fi, ins) =>
         {
             ins[0].Array().Remove(ins[1].I64);
             return(ins[0]);
         },
         ArgumentTypes = { FObjectType.Int }
     };
     functions["mutate"] = new FBuiltin
     {
         Arity     = 1, CallObjectTypes = { FObjectType.Array },
         Invokable = (fi, ins) =>
         {
             var oArr = ins[0].Array();
             var func = ins[1].Function();
             var nArr = new FArray(oArr.Length);
             for (int i = 0; i < oArr.Length; i++)
             {
                 nArr.Push(fi.Invoke(func, new[] { oArr.Get(i) }));
             }
             return(FObject.NewArray(nArr));
         },
         ArgumentTypes = { FObjectType.Function }
     };
     functions["filter"] = new FBuiltin
     {
         Arity           = 1,
         CallObjectTypes = { FObjectType.Array },
         Invokable       = (fi, ins) =>
         {
             var oArr = ins[0].Array();
             var func = ins[1].Function();
             var nArr = new FArray(oArr.Length);
             for (int i = 0; i < oArr.Length; i++)
             {
                 if (fi.Invoke(func, new[] { oArr.Get(i) }).True())
                 {
                     nArr.Push(oArr.Get(i));
                 }
             }
             return(FObject.NewArray(nArr));
         },
         ArgumentTypes = { FObjectType.Function }
     };
     functions["foreach"] = new FBuiltin
     {
         Arity           = 1,
         CallObjectTypes = { FObjectType.Array },
         Invokable       = (fi, ins) =>
         {
             var oArr = ins[0].Array();
             var func = ins[1].Function();
             for (int i = 0; i < oArr.Length; i++)
             {
                 fi.Invoke(func, new[] { oArr.Get(i) });
             }
             return(FObject.Nil);
         },
         ArgumentTypes = { FObjectType.Function }
     };
 }
Beispiel #27
0
 //============================================================
 // <T>构造方法。</T>
 //
 // @param classStr 类名
 // @using 文件中所包含的包名
 //============================================================
 public FFileNode(string classStr, FArray <string> usings)
 {
     this._classStr = classStr;
     this._import   = usings;
 }
Beispiel #28
0
 //============================================================
 // <T>构造方法。</T>
 //
 //============================================================
 public FFileNode()
 {
     _import   = new FArray <string>();
     _classStr = string.Empty;
 }
Beispiel #29
0
        //============================================================
        // <T>生成查找是的MAP节点</T>
        //
        // @param strLines 文件解析出的字符串行数组
        // @param classStr 解析出的类字符串
        // @return 返回生成的节点
        //============================================================
        public FFileNode MakeNode(FStrings strLines, string classStr)
        {
            FArray <string> includes = GetInclude(strLines);

            return(new FFileNode(classStr, includes));
        }
Beispiel #30
0
 //============================================================
 // <T>构造方法。</T>
 //============================================================
 public FFileNode()
 {
     _usings   = new FArray <string>();
     _classStr = string.Empty;
 }