Beispiel #1
0
        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);
        }
Beispiel #2
0
        /// <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
        }