예제 #1
0
        //语句开始
        private void statement()
        {
            ReturnsType = _ReturnsType.none;
            count = 0;
            int line = 0;
            bool flag=true;
            errortype = 0;
            while (strArray[count] != "end")
            {
                if (settype(strArray[count]) == wordtype.create)
                {
                    line++;
                    count++;
                    if (!state_c())
                    {
                        /*错误处理函数添加于此*/
                        string error;
                        error = derror(line,errortype);
                        fun(error);
                        count = strArray.Length - 1;
                        flag = false;
                    }//错误处理
                }
                if (settype(strArray[count]) == wordtype.alter)
                {
                    line++;
                    count++;
                    if (!state_a())
                    {
                        /*错误处理函数添加于此*/
                        string error;
                        error = derror(line,errortype);
                        fun(error);
                        count = strArray.Length - 1;
                        flag = false;
                    }//错误处理
                }
                if (settype(strArray[count]) == wordtype.select)
                {
                    line++;
                    count++;
                    if (!state_s())
                    {
                        /*错误处理函数添加于此*/
                        string error;
                        error = derror(line, errortype);
                        fun(error);
                        count = strArray.Length - 1;
                        flag = false;
                    }//错误处理
                }

            }
            if (flag == true)
            {
                string result;
                result = "成功执行";
                fun(result);
            }
        }
예제 #2
0
 //select type语句
 private bool selecttype()
 {
     string key="";
     object val=null;
     count++;
     _returns = new HashSet<IType>();
     ReturnsType = _ReturnsType.Type;
     if (strArray[count] == "(")
     {
         if (strArray[count + 2] == ":")
         {
             if (typekey_val(ref key, ref val))
             {
                 IType t = gHelper.SelectSingleTypeName(val.ToString());
                 return true;
             }
             else
                 return false;
         }
         if (strArray[count + 2] == "," || strArray[count + 2] == ")")
         {
             Dictionary<string,object> key_val=new Dictionary<string,object>();
             if (tkey_list(key_val))
             {
                 IEnumerable<IType> ts = Graph.Types;
                 foreach( var v in key_val.Keys)
                 {
                     ts = gHelper.SelectTypes(v, null, null , ts);
                 }
                 return true;
             }
             else
                 return false;
         }
         return false;
     }
     else
         return false;
 }
예제 #3
0
        //select vertex语句
        private bool selectvertex(string varvertex)
        {
            _returns = new HashSet<IVertex>();
            ReturnsType = _ReturnsType.Vertex;
            string v1typename="";
            object v1typeval=null;
            Dictionary<string,object> v1key_val =new Dictionary<string,object>();
            if (verter_type_keyval(ref v1typename, ref v1typeval, v1key_val))
            {
                if (strArray[count] == "match")
                {
                    count++;
                    IEnumerable<IVertex> vs = null;
                    if ((vs = getvertexs(vs, v1typename, v1typeval, v1key_val)) == null)
                        return false;
                    if (selectmatch(vs,varvertex))
                        return true;
                    else
                        return false;
                }
                if (strArray[count] == ".")
                {
                    count++;
                    IEnumerable<IVertex> vs = null;
                    if ((vs = getvertexs(vs, v1typename, v1typeval, v1key_val)) == null)
                        return false;
                    _returns = vs;
                    return true;
                }

                return false;
            }
            else
                return false;
        }
예제 #4
0
        //select edge语句
        private bool selectedge()
        {
            string v1type="",v2type="";
            object v1typeval=null,v2typeval=null;
            Dictionary<string, object>  v1 = new Dictionary<string, object>();
            Dictionary<string, object>  v2 = new Dictionary<string, object>();
            Dictionary<string, object>  con = new Dictionary<string, object>();
            wordtype[] lo=new wordtype[5];
            count++;

            _returns = new HashSet<Edge>();
            ReturnsType = _ReturnsType.Edge;
            if (strArray[count] == "(")
            {
                count++;
                if (verter_type_keyval(ref v1type, ref v1typeval, v1))
                {
                    if (strArray[count] == ",")
                    {
                        count++;
                        if (verter_type_keyval(ref v2type, ref v2typeval, v2))
                        {
                            IEnumerable<IVertex> v1s = new HashSet<IVertex>();
                            IEnumerable<IVertex> v2s = new HashSet<IVertex>();
                            if ((v1s=getvertexs(v1s, v1type, v1typeval, v1))!=null && (v2s=getvertexs(v2s, v2type, v2typeval, v2))!=null)
                            {
                                if (strArray[count] == ",")
                                {
                                    count++;
                                    if(econdition(con,lo))
                                    {
                                        foreach (var vsrc in v1s)
                                        {
                                            foreach (var vdest in v2s)
                                            {
                                                IEnumerable<IEdge> es = gHelper.SelectParallelEdges(vsrc, vdest);
                                                getedges(es, vsrc, vdest, con, lo);
                                                _returns = _returns.Concat(es);
                                            }
                                        }
                                    }
                                    else
                                        return false;
                                }
                                else
                                {
                                    foreach (var vsrc in v1s)
                                    {
                                        foreach (var vdest in v2s)
                                        {
                                            IEnumerable<IEdge> es = gHelper.SelectEdges(null, null, vsrc, vdest);
                                            _returns = _returns.Concat(es);
                                        }
                                    }

                                }
                                if (strArray[count] == ")")
                                {
                                    count++;
                                    return true;
                                }
                                else
                                    return false;
                            }
                            else
                                return false;
                        }
                        else
                            return false;
                    }
                    else
                        return false;
                }
                else
                    return false;
            }
            else
                return false;
        }