//语句开始 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); } }
//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; }
//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; }
//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; }