Example #1
0
    public CcsPosition_t GetPosition(CcsToken_t begin, CcsToken_t end)
    {
        int len = (int)(end.pos - begin.pos);

        return(new CcsPosition_t(begin.pos, len, begin.col,
                                 buffer.GetString(begin.pos, len)));
    }
Example #2
0
 public CcsParser_t(string fname, TextWriter errwriter)
 {
     errpool = new CcsErrorPool_t(errwriter);
     scanner = new CcsScanner_t(errpool, fname);
     t = la = null;
     /*---- constructor ----*/
     maxT = 12;
     /*---- enable ----*/
 }
Example #3
0
 /*---- enable ----*/
 public void Parse()
 {
     t = null;
     la = scanner.GetDummy();
     Get();
     /*---- ParseRoot ----*/
     pgn();
     /*---- enable ----*/
     Expect(0);
 }
Example #4
0
 public CcsToken_t(int kind, long pos, int col, int line, string val)
 {
     this.next = null;
     this.refcnt = 0;
     this.kind = kind;
     this.pos = pos;
     this.col = col;
     this.line = line;
     this.val = val;
 }
Example #5
0
    public CcsToken_t Peek()
    {
        CcsToken_t cur;

        do
        {
            if (peekToken == null)
            {
                peekToken = NextToken();
                if (peekToken == busyTokenList)
                {
                    buffer.SetBusy(busyTokenList.pos);
                }
            }
            cur       = peekToken;
            peekToken = cur.next;
        } while (cur.kind > maxT); /* Skip pragmas */
        ++cur.refcnt;
        return(cur);
    }
Example #6
0
    public void DecRef(CcsToken_t token)
    {
        CcsToken_t prevToken, curToken;

        if (token == dummyToken)
        {
            return;
        }
        if (--token.refcnt > 0)
        {
            return;
        }
        Debug.Assert(busyTokenList != null);
        for (prevToken = null, curToken = busyTokenList;
             curToken != token; prevToken = curToken, curToken = curToken.next)
        {
            Debug.Assert(curToken != null && curToken != this.curToken);
        }
        /* Found, *curToken == token, detach and destroy it. */
        if (prevToken == null)
        {
            busyTokenList = curToken.next;
        }
        else
        {
            prevToken.next = curToken.next;
        }
        token = null;
        /* Adjust CcsBuffer busy pointer */
        if (prevToken == null)
        {
            if (busyTokenList != null)
            {
                buffer.SetBusy(busyTokenList.pos);
            }
            else
            {
                buffer.ClearBusy();
            }
        }
    }
Example #7
0
 public CcsToken_t Peek()
 {
     CcsToken_t cur;
     do {
     if (peekToken == null) {
     peekToken = NextToken();
     if (peekToken == busyTokenList)
         buffer.SetBusy(busyTokenList.pos);
     }
     cur = peekToken;
     peekToken = cur.next;
     } while (cur.kind > maxT); /* Skip pragmas */
     ++cur.refcnt;
     return cur;
 }
Example #8
0
 public void IncRef(CcsToken_t token)
 {
     ++token.refcnt;
 }
Example #9
0
 public CcsToken_t NextToken()
 {
     long pos;
     int line, col, state, kind; CcsToken_t t;
     int curComment;
     for (;;) {
     while (ch == ' '
        /*---- scan1 ----*/
        || (ch >= '\t' && ch <= '\n')
        || ch == '\r'
        /*---- enable ----*/
        ) GetCh();
     for (curComment = 0; curComment < comments.Length; ++curComment)
     if (ch == comments[curComment].start[0] &&
         Comment(comments[curComment])) break;
     if (curComment >= comments.Length) break;
     }
     pos = this.pos; line = this.line; col = this.col;
     buffer.Lock();
     state = Char2State(ch);
     GetCh();
     kind = noSym;
     switch (state) {
     case -1: kind = eofSym; break;
     case 0: kind = noSym; break;
     /*---- scan3 ----*/
     case 1:
     if ((ch >= 'A' && ch <= 'Z') ||
         ch == '_' ||
         (ch >= 'a' && ch <= 'z')) {
         GetCh(); goto case_2;
     } else { kind = noSym; break; }
     case 2: case_2:
     if ((ch >= '0' && ch <= '9') ||
         (ch >= 'A' && ch <= 'Z') ||
         ch == '_' ||
         (ch >= 'a' && ch <= 'z')) {
         GetCh(); goto case_2;
     } else { kind = 1; break; }
     case 3: case_3:
     if ((ch >= '0' && ch <= '9')) {
         GetCh(); goto case_3;
     } else { kind = 2; break; }
     case 4: case_4:
     if ((ch >= 0 && ch <= '\t') ||
         (ch >= '\v' && ch <= '\f') ||
         (ch >= 14 && ch <= '!') ||
         (ch >= '#' && ch <= '[') ||
         (ch >= ']' && ch <= 65535)) {
         GetCh(); goto case_4;
     } else if (ch == '"') {
         GetCh(); goto case_5;
     } else if (ch == '\\') {
         GetCh(); goto case_6;
     } else { kind = noSym; break; }
     case 5: case_5:
     if (ch == ']') {
         GetCh(); goto case_7;
     } else { kind = noSym; break; }
     case 6: case_6:
     if ((ch >= ' ' && ch <= '~')) {
         GetCh(); goto case_4;
     } else { kind = noSym; break; }
     case 7: case_7:
     { kind = 3; break; }
     case 8: case_8:
     if ((ch >= 0 && ch <= '\t') ||
         (ch >= '\v' && ch <= '\f') ||
         (ch >= 14 && ch <= '[') ||
         (ch >= ']' && ch <= '|') ||
         (ch >= '~' && ch <= 65535)) {
         GetCh(); goto case_8;
     } else if (ch == '}') {
         GetCh(); goto case_10;
     } else if (ch == '\\') {
         GetCh(); goto case_9;
     } else { kind = noSym; break; }
     case 9: case_9:
     if ((ch >= ' ' && ch <= '~')) {
         GetCh(); goto case_8;
     } else { kind = noSym; break; }
     case 10: case_10:
     { kind = 4; break; }
     case 11: case_11:
     if ((ch >= 'a' && ch <= 'h')) {
         GetCh(); goto case_12;
     } else { kind = noSym; break; }
     case 12: case_12:
     if ((ch >= '1' && ch <= '8')) {
         GetCh(); goto case_13;
     } else { kind = noSym; break; }
     case 13: case_13:
     if (ch == '#') {
         GetCh(); goto case_17;
     } else if (ch == '+') {
         GetCh(); goto case_14;
     } else if (ch == '?') {
         GetCh(); goto case_15;
     } else if (ch == '!') {
         GetCh(); goto case_16;
     } else { kind = 5; break; }
     case 14: case_14:
     if (ch == '+') {
         GetCh(); goto case_14;
     } else { kind = 5; break; }
     case 15: case_15:
     if (ch == '?') {
         GetCh(); goto case_15;
     } else { kind = 5; break; }
     case 16: case_16:
     if (ch == '!') {
         GetCh(); goto case_16;
     } else { kind = 5; break; }
     case 17: case_17:
     { kind = 5; break; }
     case 18: case_18:
     if (ch == '+') {
         GetCh(); goto case_18;
     } else { kind = 6; break; }
     case 19: case_19:
     if (ch == '?') {
         GetCh(); goto case_19;
     } else { kind = 6; break; }
     case 20: case_20:
     if (ch == '!') {
         GetCh(); goto case_20;
     } else { kind = 6; break; }
     case 21: case_21:
     { kind = 6; break; }
     case 22: case_22:
     if (ch == 'O') {
         GetCh(); goto case_23;
     } else { kind = noSym; break; }
     case 23: case_23:
     if (ch == '#') {
         GetCh(); goto case_27;
     } else if (ch == '+') {
         GetCh(); goto case_24;
     } else if (ch == '?') {
         GetCh(); goto case_25;
     } else if (ch == '!') {
         GetCh(); goto case_26;
     } else { kind = 7; break; }
     case 24: case_24:
     if (ch == '+') {
         GetCh(); goto case_24;
     } else { kind = 7; break; }
     case 25: case_25:
     if (ch == '?') {
         GetCh(); goto case_25;
     } else { kind = 7; break; }
     case 26: case_26:
     if (ch == '!') {
         GetCh(); goto case_26;
     } else { kind = 7; break; }
     case 27: case_27:
     { kind = 7; break; }
     case 28:
     if ((ch >= '1' && ch <= '8')) {
         GetCh(); goto case_30;
     } else if ((ch >= 'a' && ch <= 'h')) {
         GetCh(); goto case_12;
     } else if (ch == 'x') {
         GetCh(); goto case_11;
     } else { kind = noSym; break; }
     case 29:
     if (ch == '-') {
         GetCh(); goto case_31;
     } else { kind = noSym; break; }
     case 30: case_30:
     if ((ch >= 'a' && ch <= 'h')) {
         GetCh(); goto case_12;
     } else if (ch == '#') {
         GetCh(); goto case_17;
     } else if (ch == '+') {
         GetCh(); goto case_14;
     } else if (ch == '?') {
         GetCh(); goto case_15;
     } else if (ch == '!') {
         GetCh(); goto case_16;
     } else if (ch == 'x') {
         GetCh(); goto case_11;
     } else { kind = 5; break; }
     case 31: case_31:
     if (ch == 'O') {
         GetCh(); goto case_32;
     } else { kind = noSym; break; }
     case 32: case_32:
     if (ch == '#') {
         GetCh(); goto case_21;
     } else if (ch == '+') {
         GetCh(); goto case_18;
     } else if (ch == '?') {
         GetCh(); goto case_19;
     } else if (ch == '!') {
         GetCh(); goto case_20;
     } else if (ch == '-') {
         GetCh(); goto case_22;
     } else { kind = 6; break; }
     case 33:
     { kind = 8; break; }
     case 34: case_34:
     if (ch == '0') {
         GetCh(); goto case_35;
     } else { kind = noSym; break; }
     case 35: case_35:
     { kind = 9; break; }
     case 36: case_36:
     if (ch == '1') {
         GetCh(); goto case_37;
     } else { kind = noSym; break; }
     case 37: case_37:
     { kind = 10; break; }
     case 38: case_38:
     if (ch == '2') {
         GetCh(); goto case_39;
     } else { kind = noSym; break; }
     case 39: case_39:
     if (ch == '-') {
         GetCh(); goto case_40;
     } else { kind = noSym; break; }
     case 40: case_40:
     if (ch == '1') {
         GetCh(); goto case_41;
     } else { kind = noSym; break; }
     case 41: case_41:
     if (ch == '/') {
         GetCh(); goto case_42;
     } else { kind = noSym; break; }
     case 42: case_42:
     if (ch == '2') {
         GetCh(); goto case_43;
     } else { kind = noSym; break; }
     case 43: case_43:
     { kind = 11; break; }
     case 44:
     if ((ch >= '0' && ch <= '9')) {
         GetCh(); goto case_3;
     } else if (ch == '-') {
         GetCh(); goto case_34;
     } else if (ch == '/') {
         GetCh(); goto case_38;
     } else { kind = 2; break; }
     case 45:
     if ((ch >= '0' && ch <= '9')) {
         GetCh(); goto case_3;
     } else if (ch == '-') {
         GetCh(); goto case_36;
     } else { kind = 2; break; }
     /*---- enable ----*/
     }
     t = new CcsToken_t(kind, pos, col, line,
            buffer.GetString(pos, (int)(this.pos - pos)));
     buffer.Unlock();
     return t;
 }
Example #10
0
 public CcsPosition_t GetPosition(CcsToken_t begin, CcsToken_t end)
 {
     int len = (int)(end.pos - begin.pos);
     return new CcsPosition_t(begin.pos, len, begin.col,
              buffer.GetString(begin.pos, len));
 }
Example #11
0
    public CcsPosition_t GetPositionBetween(CcsToken_t begin, CcsToken_t end)
    {
        long begpos = begin.pos + begin.val.Length;
        int len = (int)(end.pos - begpos);
        string str = buffer.GetString(begpos, len);
        int cur;

        /* Skip the leading spaces. */
        for (cur = 0; cur < len; ++cur)
        if (str[cur] != ' ' && str[cur] != '\t' &&
        str[cur] != '\r' && str[cur] != '\n') break;
        return new CcsPosition_t(begpos + cur, len - cur, 0,
                 str.Substring(cur));
    }
Example #12
0
 /*---- members ----*/
 /*---- enable ----*/
 private void Get()
 {
     t = la;
     for (;;) {
     la = scanner.Scan();
     if (la.kind <= maxT) { /*++self->errDist;*/ break; }
     /*---- Pragmas ----*/
     /*---- enable ----*/
     }
 }
Example #13
0
 public void DecRef(CcsToken_t token)
 {
     CcsToken_t prevToken, curToken;
     if (token == dummyToken) return;
     if (--token.refcnt > 0) return;
     Debug.Assert(busyTokenList != null);
     for (prevToken = null, curToken = busyTokenList;
      curToken != token; prevToken = curToken, curToken = curToken.next)
     Debug.Assert(curToken != null && curToken != this.curToken);
     /* Found, *curToken == token, detach and destroy it. */
     if (prevToken == null) busyTokenList = curToken.next;
     else prevToken.next = curToken.next;
     token = null;
     /* Adjust CcsBuffer busy pointer */
     if (prevToken == null) {
     if (busyTokenList != null) buffer.SetBusy(busyTokenList.pos);
     else buffer.ClearBusy();
     }
 }
Example #14
0
    private void Init()
    {
        /*---- declarations ----*/
        caseSensitive = true;
        eofSym = 0;
        maxT = 12;
        noSym = 12;
        /*---- enable ----*/

        busyTokenList = null;
        curToken = null;
        peekToken = null;

        ch = 0; chBytes = 0;
        pos = 0; line = 1; col = 0;
        oldEols = 0; oldEolsEOL = false;
        GetCh();
    }
Example #15
0
 public void ResetPeek()
 {
     peekToken = curToken;
 }
Example #16
0
 public void IncRef(CcsToken_t token)
 {
     ++token.refcnt;
 }
Example #17
0
 public void ResetPeek()
 {
     peekToken = curToken;
 }
Example #18
0
 public void SemErr(CcsToken_t token, string str)
 {
     errpool.Error(token.line, token.col, str);
 }
Example #19
0
 public CcsToken_t Scan()
 {
     CcsToken_t cur;
     if (curToken == null) {
     curToken = NextToken();
     if (curToken == busyTokenList)
     buffer.SetBusy(busyTokenList.pos);
     }
     cur = curToken;
     peekToken = curToken = cur.next;
     ++cur.refcnt;
     return cur;
 }
Example #20
0
 public CcsToken_t NextToken()
 {
     long pos;
     int line, col, state, kind; CcsToken_t t;
     int curComment;
     for (;;) {
     while (ch == ' '
        /*---- scan1 ----*/
        || (ch >= '\t' && ch <= '\n')
        || ch == '\r'
        /*---- enable ----*/
        ) GetCh();
     for (curComment = 0; curComment < comments.Length; ++curComment)
     if (ch == comments[curComment].start[0] &&
         Comment(comments[curComment])) break;
     if (curComment >= comments.Length) break;
     }
     pos = this.pos; line = this.line; col = this.col;
     buffer.Lock();
     state = Char2State(ch);
     GetCh();
     kind = noSym;
     switch (state) {
     case -1: kind = eofSym; break;
     case 0: kind = noSym; break;
     /*---- scan3 ----*/
     case 1: case_1:
     if ((ch >= '0' && ch <= '9') ||
     (ch >= 'A' && ch <= 'Z') ||
     ch == '_' ||
     (ch >= 'a' && ch <= 'z')) {
     GetCh(); goto case_1;
     } else { kind = GetKWKind(pos, this.pos, 1); break; }
     case 2: case_2:
     if ((ch >= '0' && ch <= '9')) {
     GetCh(); goto case_2;
     } else { kind = 2; break; }
     case 3: case_3:
     { kind = 3; break; }
     case 4: case_4:
     { kind = 4; break; }
     case 5:
     if ((ch >= 0 && ch <= '\t') ||
     (ch >= '\v' && ch <= '\f') ||
     (ch >= 14 && ch <= '&') ||
     (ch >= '(' && ch <= '[') ||
     (ch >= ']' && ch <= 65535)) {
     GetCh(); goto case_6;
     } else if (ch == '\\') {
     GetCh(); goto case_7;
     } else { kind = noSym; break; }
     case 6: case_6:
     if (ch == '\'') {
     GetCh(); goto case_9;
     } else { kind = noSym; break; }
     case 7: case_7:
     if ((ch >= ' ' && ch <= '~')) {
     GetCh(); goto case_8;
     } else { kind = noSym; break; }
     case 8: case_8:
     if ((ch >= '0' && ch <= '9') ||
     (ch >= 'a' && ch <= 'f')) {
     GetCh(); goto case_8;
     } else if (ch == '\'') {
     GetCh(); goto case_9;
     } else { kind = noSym; break; }
     case 9: case_9:
     { kind = 5; break; }
     case 10: case_10:
     if ((ch >= '0' && ch <= '9') ||
     (ch >= 'A' && ch <= 'Z') ||
     ch == '_' ||
     (ch >= 'a' && ch <= 'z')) {
     GetCh(); goto case_10;
     } else { kind = 48; break; }
     case 11: case_11:
     if ((ch >= 0 && ch <= '\t') ||
     (ch >= '\v' && ch <= '\f') ||
     (ch >= 14 && ch <= '!') ||
     (ch >= '#' && ch <= '[') ||
     (ch >= ']' && ch <= 65535)) {
     GetCh(); goto case_11;
     } else if (ch == '"') {
     GetCh(); goto case_3;
     } else if (ch == '\\') {
     GetCh(); goto case_12;
     } else if (ch == '\n' ||
            ch == '\r') {
     GetCh(); goto case_4;
     } else { kind = noSym; break; }
     case 12: case_12:
     if ((ch >= ' ' && ch <= '~')) {
     GetCh(); goto case_11;
     } else { kind = noSym; break; }
     case 13:
     { kind = 20; break; }
     case 14:
     { kind = 26; break; }
     case 15:
     { kind = 27; break; }
     case 16: case_16:
     { kind = 28; break; }
     case 17:
     { kind = 31; break; }
     case 18: case_18:
     { kind = 32; break; }
     case 19: case_19:
     { kind = 33; break; }
     case 20:
     { kind = 34; break; }
     case 21:
     { kind = 37; break; }
     case 22:
     { kind = 38; break; }
     case 23:
     { kind = 39; break; }
     case 24:
     { kind = 40; break; }
     case 25:
     { kind = 41; break; }
     case 26: case_26:
     { kind = 45; break; }
     case 27: case_27:
     { kind = 46; break; }
     case 28:
     if (ch == '.') {
     GetCh(); goto case_16;
     } else if (ch == '>') {
     GetCh(); goto case_19;
     } else if (ch == ')') {
     GetCh(); goto case_27;
     } else { kind = 21; break; }
     case 29:
     if (ch == '.') {
     GetCh(); goto case_18;
     } else { kind = 30; break; }
     case 30:
     if (ch == '.') {
     GetCh(); goto case_26;
     } else { kind = 36; break; }
     /*---- enable ----*/
     }
     t = new CcsToken_t(kind, pos, col, line,
            buffer.GetString(pos, (int)(this.pos - pos)));
     buffer.Unlock();
     return t;
 }
Example #21
0
 public CcsScanner_t(CcsErrorPool_t errpool, string filename)
 {
     Stream stream;
     this.errpool = errpool;
     stream = new FileStream(filename, FileMode.Open);
     dummyToken = new CcsToken_t(0, 0, 0, 0, "dummy");
     buffer = new CcsBuffer_t(stream);
     Init();
 }
Example #22
0
    public CcsToken_t NextToken()
    {
        long pos;
        int  line, col, state, kind; CcsToken_t t;
        int  curComment;

        for (;;)
        {
            while (ch == ' '
                   /*---- scan1 ----*/
                   || (ch >= '\t' && ch <= '\n') ||
                   ch == '\r'
                   /*---- enable ----*/
                   )
            {
                GetCh();
            }
            for (curComment = 0; curComment < comments.Length; ++curComment)
            {
                if (ch == comments[curComment].start[0] &&
                    Comment(comments[curComment]))
                {
                    break;
                }
            }
            if (curComment >= comments.Length)
            {
                break;
            }
        }
        pos = this.pos; line = this.line; col = this.col;
        buffer.Lock();
        state = Char2State(ch);
        GetCh();
        kind = noSym;
        switch (state)
        {
        case -1: kind = eofSym; break;

        case 0: kind = noSym; break;

        /*---- scan3 ----*/
        case 1:
            if ((ch >= 'A' && ch <= 'Z') ||
                ch == '_' ||
                (ch >= 'a' && ch <= 'z'))
            {
                GetCh(); goto case_2;
            }
            else
            {
                kind = noSym; break;
            }

        case 2: case_2:
            if ((ch >= '0' && ch <= '9') ||
                (ch >= 'A' && ch <= 'Z') ||
                ch == '_' ||
                (ch >= 'a' && ch <= 'z'))
            {
                GetCh(); goto case_2;
            }
            else
            {
                kind = 1; break;
            }

        case 3: case_3:
            if ((ch >= '0' && ch <= '9'))
            {
                GetCh(); goto case_3;
            }
            else
            {
                kind = 2; break;
            }

        case 4: case_4:
            if ((ch >= 0 && ch <= '\t') ||
                (ch >= '\v' && ch <= '\f') ||
                (ch >= 14 && ch <= '!') ||
                (ch >= '#' && ch <= '[') ||
                (ch >= ']' && ch <= 65535))
            {
                GetCh(); goto case_4;
            }
            else if (ch == '"')
            {
                GetCh(); goto case_5;
            }
            else if (ch == '\\')
            {
                GetCh(); goto case_6;
            }
            else
            {
                kind = noSym; break;
            }

        case 5: case_5:
            if (ch == ']')
            {
                GetCh(); goto case_7;
            }
            else
            {
                kind = noSym; break;
            }

        case 6: case_6:
            if ((ch >= ' ' && ch <= '~'))
            {
                GetCh(); goto case_4;
            }
            else
            {
                kind = noSym; break;
            }

        case 7: case_7:
            { kind = 3; break; }

        case 8: case_8:
            if ((ch >= 0 && ch <= '\t') ||
                (ch >= '\v' && ch <= '\f') ||
                (ch >= 14 && ch <= '[') ||
                (ch >= ']' && ch <= '|') ||
                (ch >= '~' && ch <= 65535))
            {
                GetCh(); goto case_8;
            }
            else if (ch == '}')
            {
                GetCh(); goto case_10;
            }
            else if (ch == '\\')
            {
                GetCh(); goto case_9;
            }
            else
            {
                kind = noSym; break;
            }

        case 9: case_9:
            if ((ch >= ' ' && ch <= '~'))
            {
                GetCh(); goto case_8;
            }
            else
            {
                kind = noSym; break;
            }

        case 10: case_10:
            { kind = 4; break; }

        case 11: case_11:
            if ((ch >= 'a' && ch <= 'h'))
            {
                GetCh(); goto case_12;
            }
            else
            {
                kind = noSym; break;
            }

        case 12: case_12:
            if ((ch >= '1' && ch <= '8'))
            {
                GetCh(); goto case_13;
            }
            else
            {
                kind = noSym; break;
            }

        case 13: case_13:
            if (ch == '#')
            {
                GetCh(); goto case_17;
            }
            else if (ch == '+')
            {
                GetCh(); goto case_14;
            }
            else if (ch == '?')
            {
                GetCh(); goto case_15;
            }
            else if (ch == '!')
            {
                GetCh(); goto case_16;
            }
            else
            {
                kind = 5; break;
            }

        case 14: case_14:
            if (ch == '+')
            {
                GetCh(); goto case_14;
            }
            else
            {
                kind = 5; break;
            }

        case 15: case_15:
            if (ch == '?')
            {
                GetCh(); goto case_15;
            }
            else
            {
                kind = 5; break;
            }

        case 16: case_16:
            if (ch == '!')
            {
                GetCh(); goto case_16;
            }
            else
            {
                kind = 5; break;
            }

        case 17: case_17:
            { kind = 5; break; }

        case 18: case_18:
            if (ch == '+')
            {
                GetCh(); goto case_18;
            }
            else
            {
                kind = 6; break;
            }

        case 19: case_19:
            if (ch == '?')
            {
                GetCh(); goto case_19;
            }
            else
            {
                kind = 6; break;
            }

        case 20: case_20:
            if (ch == '!')
            {
                GetCh(); goto case_20;
            }
            else
            {
                kind = 6; break;
            }

        case 21: case_21:
            { kind = 6; break; }

        case 22: case_22:
            if (ch == 'O')
            {
                GetCh(); goto case_23;
            }
            else
            {
                kind = noSym; break;
            }

        case 23: case_23:
            if (ch == '#')
            {
                GetCh(); goto case_27;
            }
            else if (ch == '+')
            {
                GetCh(); goto case_24;
            }
            else if (ch == '?')
            {
                GetCh(); goto case_25;
            }
            else if (ch == '!')
            {
                GetCh(); goto case_26;
            }
            else
            {
                kind = 7; break;
            }

        case 24: case_24:
            if (ch == '+')
            {
                GetCh(); goto case_24;
            }
            else
            {
                kind = 7; break;
            }

        case 25: case_25:
            if (ch == '?')
            {
                GetCh(); goto case_25;
            }
            else
            {
                kind = 7; break;
            }

        case 26: case_26:
            if (ch == '!')
            {
                GetCh(); goto case_26;
            }
            else
            {
                kind = 7; break;
            }

        case 27: case_27:
            { kind = 7; break; }

        case 28:
            if ((ch >= '1' && ch <= '8'))
            {
                GetCh(); goto case_30;
            }
            else if ((ch >= 'a' && ch <= 'h'))
            {
                GetCh(); goto case_12;
            }
            else if (ch == 'x')
            {
                GetCh(); goto case_11;
            }
            else
            {
                kind = noSym; break;
            }

        case 29:
            if (ch == '-')
            {
                GetCh(); goto case_31;
            }
            else
            {
                kind = noSym; break;
            }

        case 30: case_30:
            if ((ch >= 'a' && ch <= 'h'))
            {
                GetCh(); goto case_12;
            }
            else if (ch == '#')
            {
                GetCh(); goto case_17;
            }
            else if (ch == '+')
            {
                GetCh(); goto case_14;
            }
            else if (ch == '?')
            {
                GetCh(); goto case_15;
            }
            else if (ch == '!')
            {
                GetCh(); goto case_16;
            }
            else if (ch == 'x')
            {
                GetCh(); goto case_11;
            }
            else
            {
                kind = 5; break;
            }

        case 31: case_31:
            if (ch == 'O')
            {
                GetCh(); goto case_32;
            }
            else
            {
                kind = noSym; break;
            }

        case 32: case_32:
            if (ch == '#')
            {
                GetCh(); goto case_21;
            }
            else if (ch == '+')
            {
                GetCh(); goto case_18;
            }
            else if (ch == '?')
            {
                GetCh(); goto case_19;
            }
            else if (ch == '!')
            {
                GetCh(); goto case_20;
            }
            else if (ch == '-')
            {
                GetCh(); goto case_22;
            }
            else
            {
                kind = 6; break;
            }

        case 33:
        { kind = 8; break; }

        case 34: case_34:
            if (ch == '0')
            {
                GetCh(); goto case_35;
            }
            else
            {
                kind = noSym; break;
            }

        case 35: case_35:
            { kind = 9; break; }

        case 36: case_36:
            if (ch == '1')
            {
                GetCh(); goto case_37;
            }
            else
            {
                kind = noSym; break;
            }

        case 37: case_37:
            { kind = 10; break; }

        case 38: case_38:
            if (ch == '2')
            {
                GetCh(); goto case_39;
            }
            else
            {
                kind = noSym; break;
            }

        case 39: case_39:
            if (ch == '-')
            {
                GetCh(); goto case_40;
            }
            else
            {
                kind = noSym; break;
            }

        case 40: case_40:
            if (ch == '1')
            {
                GetCh(); goto case_41;
            }
            else
            {
                kind = noSym; break;
            }

        case 41: case_41:
            if (ch == '/')
            {
                GetCh(); goto case_42;
            }
            else
            {
                kind = noSym; break;
            }

        case 42: case_42:
            if (ch == '2')
            {
                GetCh(); goto case_43;
            }
            else
            {
                kind = noSym; break;
            }

        case 43: case_43:
            { kind = 11; break; }

        case 44:
            if ((ch >= '0' && ch <= '9'))
            {
                GetCh(); goto case_3;
            }
            else if (ch == '-')
            {
                GetCh(); goto case_34;
            }
            else if (ch == '/')
            {
                GetCh(); goto case_38;
            }
            else
            {
                kind = 2; break;
            }

        case 45:
            if ((ch >= '0' && ch <= '9'))
            {
                GetCh(); goto case_3;
            }
            else if (ch == '-')
            {
                GetCh(); goto case_36;
            }
            else
            {
                kind = 2; break;
            }
            /*---- enable ----*/
        }
        t = new CcsToken_t(kind, pos, col, line,
                           buffer.GetString(pos, (int)(this.pos - pos)));
        buffer.Unlock();
        return(t);
    }