Пример #1
0
        private void ComSymbolList()
        {
            int      i, j, a1, a2, b1, b2;
            mysymbol p1, p2, ps1, ps2;
            mysymbol symbol;

            ps1       = new mysymbol();
            ps1.flag  = 0;
            ps1.value = "+";
            symbol    = ps1;
            for (i = 0; i <= mSblList.Count - 1; i++)
            {
                p1      = mSblList[i];
                p1.used = 0;
            }
            for (i = 0; i <= mSblList.Count - 1; i++)
            {
                p1 = mSblList[i];
                if (p1.used == 1)
                {
                    continue;
                }
                if (p1.flag == 0)
                {
                    ps1 = p1;
                    continue;
                }
                if (p1.flag != 2)
                {
                    continue;
                }
            }
        }
Пример #2
0
        public void SimpleParse(string str)
        {
            ClearSblList();
            if (str == null)
            {
                return;
            }
            char[] buf  = str.ToCharArray();
            int    len  = Length(str);
            int    i    = 0;
            int    j    = 0;
            int    flag = 0;

            char[]     tmp           = new char[64];
            char[]     OpSymbolArray = { '.', '*', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
            mysymbol   p;
            myvariable v;

            while (i < len)
            {
                if (buf[i] == '+' || buf[i] == '-')
                {
                    p       = new mysymbol();
                    tmp[0]  = buf[i];
                    p.value = new string(tmp);
                    p.flag  = 0;
                    mSblList.Add(p);
                    i = i + 1;
                    continue;
                }

                j = i;
                while (j <= len)
                {
                    if ((buf[i] == '+' || buf[i] == '-') || (j == len))
                    {
                        p       = new mysymbol();
                        p.value = new string(tmp);
                        GetVariantValueSign(p.value, ref p);
                        p.flag = flag;

                        mSblList.Add(p);
                        i = j;
                        break;
                    }
                    if (!OpSymbolArray.Contains(buf[i]))
                    {
                        p.flag = 2;
                    }

                    tmp[j - i] = buf[j];
                    j          = j + 1;
                }
            }
        }
Пример #3
0
        private void GetVariantValueSign(string str, ref mysymbol p)
        {
            char[] OpSymbolArray = { '.', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
            int    i = 0, j = 0, len = 0, flag = 0;
            string lastsign = "";

            char[] tmp = new char[64];
            char[] buf = new char[512];
            p.value  = "";
            p.var1   = "";
            p.var2   = "";
            p.value2 = "";
            lastsign = "*";
            buf      = str.ToCharArray();
            len      = Length(str);
            i        = 0;
            while (i < len)
            {
                if (buf[i] == '*' || buf[i] == '/')
                {
                    tmp[0]   = buf[i];
                    lastsign = new string(tmp);
                    i        = i + 1;
                    continue;
                }
                j    = i;
                flag = 1;
                while (j <= len)
                {
                    if ((buf[i] == '*' || buf[i] == '/') || (j == len))
                    {
                        if (flag == 1)                 //数值
                        {
                            if (lastsign == "*")
                            {
                                if (p.value == "")
                                {
                                    p.value = new string(tmp);
                                }
                                else
                                {
                                    p.value = IntToStr(MyStrToInt(p.value, 1) * MyStrToInt(new string(tmp), 1));
                                }
                            }
                            if (lastsign == "/")
                            {
                                if (p.value2 == "")
                                {
                                    p.value2 = new string(tmp);
                                }
                                else
                                {
                                    p.value2 = IntToStr(MyStrToInt(p.value2, 1) * MyStrToInt(new string(tmp), 1));
                                }
                            }
                        }

                        if (flag == 2)                 //数值
                        {
                            if (lastsign == "*")
                            {
                                if (p.var1 == "")
                                {
                                    p.var1 = new string(tmp);
                                }
                                else
                                {
                                    p.var1 = p.var1 + '*' + new string(tmp);
                                }
                            }
                            if (lastsign == "/")
                            {
                                if (p.var2 == "")
                                {
                                    p.var2 = new string(tmp);
                                }
                                else
                                {
                                    p.var2 = p.var2 + '*' + new string(tmp);
                                }
                            }
                        }
                        i = j;
                        break;
                    }
                    if (!(OpSymbolArray.Contains(buf[j])))
                    {
                        flag = 2;
                    }
                    tmp[j - i] = buf[j];
                    j          = j + 1;
                }
            }
            if ((p.value != "") && (p.value2 != ""))
            {
                i = MyStrToInt(p.value, 1);
                j = MyStrToInt(p.value2, 1);
                if ((i % j) == 0)
                {
                    p.value  = IntToStr(i / j);
                    p.value2 = "";
                }
            }
            if ((p.var1 != "1") && (p.var2 != ""))
            {
                p.value = "";
            }
            if (p.value == "1")
            {
                p.value2 = "";
            }
            if ((p.var1 == "") && (p.var2 == "") && (p.value == "") && (p.value2 == ""))
            {
                p.value = str;
            }
        }
Пример #4
0
        private void Parse(string str)
        {
            ClearSblList();
            if (str == null)
            {
                return;
            }
            char[] buf = str.ToCharArray();
            int    len = Length(str);
            int    i   = 0;
            int    j   = 0;

            char[]     tmp           = new char[64];
            char[]     OpSymbolArray = { '+', '-', '*', '/', '(', ')' };
            mysymbol   p;
            myvariable v;

            while (i < len)
            {
                if (buf[i] == ' ' || buf[i] == '\r' || buf[i] == '\n')
                {
                    i = i + 1;
                    continue;
                }
                if (OpSymbolArray.Contains(buf[i]))
                {
                    p       = new mysymbol();
                    tmp[0]  = buf[i];
                    p.value = new string(tmp);
                    p.flag  = 0;
                    mSblList.Add(p);
                    i = i + 1;
                    continue;
                }

                j = i;
                while (j <= len)
                {
                    if ((OpSymbolArray.Contains(buf[i])) || (j == len))
                    {
                        p       = new mysymbol();
                        p.value = new string(tmp);
                        p.flag  = 1;
                        if (!IsNumeric(tmp))
                        {
                            p.flag = 2;
                        }
                        mSblList.Add(p);
                        i = j;
                        break;
                    }
                    tmp[j - i] = buf[j];
                    j          = j + 1;
                }
            }
            for (i = 0; i <= mSblList.Count - 1; i++)
            {
                p = mSblList[i];
                for (j = 0; j <= mVarList.Count - 1; j++)
                {
                    v = mVarList[j];
                    if (v.value == "")
                    {
                        continue;
                    }
                    if (p.value == v.name)
                    {
                        p.value = v.value;
                        if (v.value == "-10001")       //特殊变量
                        {
                            p.value = IntToStr(mBHValue);
                        }
                        break;
                    }
                }
            }
        }