public static ArrayList GetParamList(string Exipression, string StaName) { char[] chArray = Exipression.Trim().ToCharArray(); ArrayList ListParam = new ArrayList(); int i = 0; int startpos = 0; int endpos = 0; ExpressionParser.EDFAState prestate = ExpressionParser.EDFAState.Start; //DFA的前一个状态 ListParam.Clear(); while (i < chArray.Length) { if (prestate == ExpressionParser.EDFAState.CharStr) { //字符串结构 - 字符串结构是处理当前态 - 其它类型是处理上一态 if (chArray[i] == '"') { prestate = ExpressionParser.EDFAState.Start; } } else if (prestate == ExpressionParser.EDFAState.ABCStr) {//参数或者字母已经开始 //不是字母、数字、下划线、点号,表示参数结束 if (chArray[i] != '_' && chArray[i] != '.' && !Char.IsLetter(chArray[i]) && !Char.IsDigit(chArray[i])) { endpos = i - 1; CParameter obj = GetParam(startpos, endpos, Exipression, StaName); if (obj != null) { ListParam.Add(obj); } prestate = ExpressionParser.EDFAState.Start; } } else if (chArray[i] == '"') { if (prestate == ExpressionParser.EDFAState.CharStr) { prestate = ExpressionParser.EDFAState.Start; } else { //字符串开始 prestate = ExpressionParser.EDFAState.CharStr; } } else if (Char.IsLetter(chArray[i])) {//参数 或者字母开始 //字母 if (prestate != ExpressionParser.EDFAState.ABCStr) { prestate = ExpressionParser.EDFAState.ABCStr; startpos = i; //保存开始位置 } } i++; if (i == chArray.Length) { endpos = i - 1; if (prestate == ExpressionParser.EDFAState.ABCStr) { CParameter obj = GetParam(startpos, endpos, Exipression, StaName); if (obj != null) { ListParam.Add(obj); } } } }// end while return(ListParam); }
/// <summary> /// 获取参数 /// </summary> public void GetParam() { char[] chArray = Exipression.Trim().ToCharArray(); int i = 0; int startpos = 0; int endpos = 0; ExpressionParser.EDFAState prestate = ExpressionParser.EDFAState.Start; //DFA的前一个状态 ListParam.Clear(); while (i < chArray.Length) { if (prestate == ExpressionParser.EDFAState.CharStr) { //字符串结构 - 字符串结构是处理当前态 - 其它类型是处理上一态 if (chArray[i] == '"') { prestate = ExpressionParser.EDFAState.Start; } } else if (prestate == ExpressionParser.EDFAState.ABCStr) {//参数或者字母已经开始 //不是字母、数字、下划线、点号,表示参数结束 if (chArray[i] != '_' && chArray[i] != '.' && !Char.IsLetter(chArray[i]) && !Char.IsDigit(chArray[i])) { endpos = i - 1; AddToLink(startpos, endpos); prestate = ExpressionParser.EDFAState.Start; } } else if (chArray[i] == '"') { if (prestate == ExpressionParser.EDFAState.CharStr) { prestate = ExpressionParser.EDFAState.Start; } else { //字符串开始 prestate = ExpressionParser.EDFAState.CharStr; } } else if (Char.IsLetter(chArray[i])) {//参数 或者字母开始 //字母 if (prestate != ExpressionParser.EDFAState.ABCStr) { prestate = ExpressionParser.EDFAState.ABCStr; startpos = i; //保存开始位置 } } i++; if (i == chArray.Length) { endpos = i - 1; if (prestate == ExpressionParser.EDFAState.ABCStr) { AddToLink(startpos, endpos); } } }// end while }