Ejemplo n.º 1
0
        static myPaserResult myparser2(string line)
        {
            //state table
            //state |token
            //      |,      |"      |other
            //------+-------+-------+------
            //s     |s      |a      |e
            //a     |a      |b      |a
            //b     |s      |a      |invalid
            //e     |s      |invalid|e
            myPaserResult res    = new myPaserResult();
            myState       cur    = myState.s;
            myState       nState = myState.s;

            foreach (char c in line)
            {
                myToken tk = new myToken(c);
                cur    = nState;
                nState = tbl[(int)cur, (int)tk.type];
                if (nState == myState.invalid)
                {
                    break;
                }
                myRule cb = clbTbl[(int)cur, (int)tk.type];
                cb(res, tk);
            }

            //case eol
            return(res);
        }
Ejemplo n.º 2
0
        static myPaserResult myparser2(string line)
        {
            //state table
            //state |token
            //      |,      |"      |other
            //------+-------+-------+------
            //s     |s      |a      |e
            //a     |a      |b      |a
            //b     |s      |a      |invalid
            //e     |s      |invalid|e
            myPaserResult res    = new myPaserResult(line);
            myState       cur    = myState.s;
            myState       nState = myState.s;

            foreach (char c in line)
            {
                myTkType type;
#if false
                myToken tk = new myToken(c);
                type = tk.type;
#else
                switch (c)
                {
                case '"':
                    type = myTkType.t_dblq;
                    break;

                case ',':
                    type = myTkType.t_comma;
                    break;

                default:
                    type = myTkType.t_other;
                    break;
                }
#endif
                cur    = nState;
                nState = tbl[(int)cur, (int)type];
                if (nState == myState.invalid)
                {
                    break;
                }
                myRule cb = clbTbl[(int)cur, (int)type];
                cb(res, null);
            }

            //case eol
            return(res);
        }