/// <summary> /// 重新构造二叉树 /// </summary> /// <param name="strExpression">表达式</param> public void ChangeExpression(string strExpression) { _Expression = strExpression; _Tree = null; _Position = 0; _Identifiers = null; _CurrentIdentifier = null; _ParentIdentifier = null; if (strExpression != string.Empty) { try { _ExpressionChars = new Char[strExpression.Length + 1]; strExpression.CopyTo(0, _ExpressionChars, 0, strExpression.Length); _ExpressionChars[strExpression.Length] = '\0'; _Tree = DoExpression(); if (_ExpressionChars[_Position] != '\0') { throw ParsingException.NewParsingException(Parse_Error.peSyntaxError, _Position); } } finally { _CurrentIdentifier = null; _ParentIdentifier = null; } } }
//私有方法 /// <summary> /// 顺序输出标识符 /// </summary> /// <param name="oID"></param> /// <param name="strID"></param> /// <param name="nPos"></param> private void OutputID(Operation_IDs oID, string strID, int nPos) { if (OutputIdentifiers) { ParseIdentifier pi = new ParseIdentifier(oID, strID, nPos, _CurrentIdentifier); if (_CurrentIdentifier == null) { if (_ParentIdentifier == null) { _Identifiers = pi; } else { _ParentIdentifier._SubIdentifier = pi; } } else { _CurrentIdentifier._NextIdentifier = pi; } pi._ParentIdentifier = _ParentIdentifier; _CurrentIdentifier = pi; } }
/// <summary> /// 构造函数 /// </summary> /// <param name="oID"></param> /// <param name="strID"></param> /// <param name="nPos"></param> /// <param name="prev"></param> public ParseIdentifier(Operation_IDs oID, string strID, int nPos, ParseIdentifier prev) { _OperationID = oID; _Identifier = strID; _Position = nPos; _PrevIdentifier = prev; }
//得到表达式中对人员所属的限定信息 private static string GetBelongTo(string strExp) { ParseExpression pe = new ParseExpression(); pe.OutputIdentifiers = true; pe.UserFunctions = (IExpParsing) new DoExpParsing(); pe.ChangeExpression(strExp); ParseIdentifier pi = GetIdentifiers(pe.Identifiers, "belongto"); if (pi == null) { return(""); } string strValue = String.Empty; //得到类别 pi = pi.SubIdentifier.NextIdentifier; strValue = pi.Identifier.ToUpper(); //得到objId pi = pi.NextIdentifier.NextIdentifier; strValue += "," + pi.Identifier; //得到parentId pi = pi.NextIdentifier.NextIdentifier; strValue += "," + pi.Identifier; return(strValue.Replace("\"", "")); }
//获得表达式中定义的人员级别限定信息 private static string GetUserRank(string strExp) { ParseExpression pe = new ParseExpression(); pe.OutputIdentifiers = true; pe.UserFunctions = (IExpParsing) new DoExpParsing(); pe.ChangeExpression(strExp); ParseIdentifier pi = GetIdentifiers(pe.Identifiers, "UserRank"); if (pi == null) { return(""); } string strValue = String.Empty; //得到限定的级别 pi = pi.SubIdentifier.NextIdentifier; strValue = pi.Identifier; //得到操作符 pi = pi.NextIdentifier.NextIdentifier; strValue = pi.Identifier + "," + strValue; return(strValue.Replace("\"", "")); }
private void OutputIDToParentLevel() { if (_ParentIdentifier != null) { _CurrentIdentifier = _ParentIdentifier; _ParentIdentifier = _ParentIdentifier._ParentIdentifier; } }
/// <summary> /// 在Debug窗口输出调试值 /// </summary> /// <param name="pi"></param> public static void OutputIdentifiers(ParseIdentifier pi) { while (pi != null) { Trace.WriteLine(new string('\t', _Level) + string.Format("ID:{0}\tPosition: {1}", pi.Identifier, pi.Position)); if (pi.SubIdentifier != null) { _Level++; OutputIdentifiers(pi.SubIdentifier); _Level--; } pi = pi.NextIdentifier; } }
private static ParseIdentifier GetIdentifiers(ParseIdentifier pi, string strID) { while (pi != null) { if (pi.Identifier.ToLower() == strID.ToLower()) { return(pi); } if (pi.SubIdentifier != null) { ParseIdentifier piTemp = GetIdentifiers(pi.SubIdentifier, strID); if (piTemp != null) { return(piTemp); } } pi = pi.NextIdentifier; } return(null); }
private void OutputIDToSubLevel() { _ParentIdentifier = _CurrentIdentifier; _CurrentIdentifier = null; }
//私有方法 /// <summary> /// 顺序输出标识符 /// </summary> /// <param name="oID"></param> /// <param name="strID"></param> /// <param name="nPos"></param> private void OutputID(Operation_IDs oID, string strID, int nPos) { if (OutputIdentifiers) { ParseIdentifier pi = new ParseIdentifier(oID, strID, nPos, _CurrentIdentifier); if (_CurrentIdentifier == null) { if (_ParentIdentifier == null) _Identifiers = pi; else _ParentIdentifier._SubIdentifier = pi; } else _CurrentIdentifier._NextIdentifier = pi; pi._ParentIdentifier = _ParentIdentifier; _CurrentIdentifier = pi; } }
/// <summary> /// 重新构造二叉树 /// </summary> /// <param name="strExpression">表达式</param> public void ChangeExpression(string strExpression) { _Expression = strExpression; _Tree = null; _Position = 0; _Identifiers = null; _CurrentIdentifier = null; _ParentIdentifier = null; if (strExpression != string.Empty) { try { _ExpressionChars = new Char[strExpression.Length + 1]; strExpression.CopyTo(0, _ExpressionChars, 0, strExpression.Length); _ExpressionChars[strExpression.Length] = '\0'; _Tree = DoExpression(); if (_ExpressionChars[_Position] != '\0') throw ParsingException.NewParsingException(Parse_Error.peSyntaxError, _Position); } finally { _CurrentIdentifier = null; _ParentIdentifier = null; } } }
private static ParseIdentifier GetIdentifiers(ParseIdentifier pi, string strID) { while (pi != null) { if (pi.Identifier.ToLower() == strID.ToLower()) return pi; if (pi.SubIdentifier != null) { ParseIdentifier piTemp = GetIdentifiers(pi.SubIdentifier, strID); if (piTemp != null) return piTemp; } pi = pi.NextIdentifier; } return null; }