Ejemplo n.º 1
0
 // make sure that peeking starts at the current scan position
 public void ResetPeek()
 {
     pt = tokens;
 }
Ejemplo n.º 2
0
        Token NextToken()
        {
            while (ch == ' ' ||
                   ch >= 9 && ch <= 10 || ch == 13)
            {
                NextCh();
            }

            int recKind = noSym;
            int recEnd  = pos;

            t         = new Token();
            t.pos     = pos;
            t.col     = col;
            t.line    = line;
            t.charPos = charPos;
            int state;

            state = start.ContainsKey(ch) ? start [ch] : 0;
            tlen  = 0;
            AddCh();

            switch (state)
            {
            case -1:
            {
                t.kind = eofSym;
                break;
            }                                    // NextCh already done

            case 0:
            {
                if (recKind != noSym)
                {
                    tlen = recEnd - t.pos;
                    SetScannerBehindT();
                }
                t.kind = recKind;
                break;
            }                     // NextCh already done

            case 1:
                recEnd  = pos;
                recKind = 1;
                if (ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch == '_' || ch >= 'a' && ch <= 'z')
                {
                    AddCh();
                    goto case 1;
                }
                else
                {
                    t.kind = 1;
                    t.val  = new String(tval, 0, tlen);
                    CheckLiteral();
                    return(t);
                }

            case 2:
                recEnd  = pos;
                recKind = 2;
                if (ch >= '0' && ch <= '9')
                {
                    AddCh();
                    goto case 2;
                }
                else if (ch == '.')
                {
                    AddCh();
                    goto case 3;
                }
                else
                {
                    t.kind = 2;
                    break;
                }

            case 3:
                recEnd  = pos;
                recKind = 2;
                if (ch >= '0' && ch <= '9')
                {
                    AddCh();
                    goto case 3;
                }
                else
                {
                    t.kind = 2;
                    break;
                }

            case 4:
                if (ch <= 9 || ch >= 11 && ch <= 12 || ch >= 14 && ch <= '!' || ch >= '#' && ch <= '[' || ch >= ']' && ch <= 65535)
                {
                    AddCh();
                    goto case 4;
                }
                else if (ch == '"')
                {
                    AddCh();
                    goto case 5;
                }
                else
                {
                    goto case 0;
                }

            case 5:
            {
                t.kind = 3;
                break;
            }

            case 6:
            {
                t.kind = 7;
                break;
            }

            case 7:
            {
                t.kind = 10;
                break;
            }

            case 8:
            {
                t.kind = 11;
                break;
            }

            case 9:
            {
                t.kind = 12;
                break;
            }

            case 10:
            {
                t.kind = 24;
                break;
            }

            case 11:
            {
                t.kind = 25;
                break;
            }

            case 12:
            {
                t.kind = 26;
                break;
            }

            case 13:
                if (ch == '=')
                {
                    AddCh();
                    goto case 14;
                }
                else
                {
                    goto case 0;
                }

            case 14:
            {
                t.kind = 27;
                break;
            }

            case 15:
            {
                t.kind = 28;
                break;
            }

            case 16:
            {
                t.kind = 29;
                break;
            }

            case 17:
            {
                t.kind = 30;
                break;
            }

            case 18:
            {
                t.kind = 31;
                break;
            }

            case 19:
            {
                t.kind = 33;
                break;
            }

            case 20:
            {
                t.kind = 34;
                break;
            }

            case 21:
                recEnd  = pos;
                recKind = 8;
                if (ch == '=')
                {
                    AddCh();
                    goto case 15;
                }
                else
                {
                    t.kind = 8;
                    break;
                }
            }
            t.val = new String(tval, 0, tlen);
            return(t);
        }