//----< keep extracting until get none-ccomment >-------------------

        override public Token getTok()
        {
            Token tok = new Token();

            tok.Append((char)context_.src.next());    // first two chars "/*"
            tok.Append((char)context_.src.next());


            while (!isCCommentStateEnd(context_.src.peek(0), context_.src.peek(1)))    // stop when CComment state ends
            {
                tok.Append((char)context_.src.next());
            }


            if (!(context_.src.peek() < 0))             // last two chars "*/"
            {
                tok.Append((char)context_.src.next());
            }
            if (!(context_.src.peek() < 0))
            {
                tok.Append((char)context_.src.next());
            }

            return(tok);
        }
        //----< keep extracting until get none-doublecharspecialpunct >-------------------

        override public Token getTok()
        {
            Token tok = new Token();

            tok.Append((char)context_.src.next());    // first two chars are double char special punct.
            tok.Append((char)context_.src.next());

            return(tok);
        }
        //----< keep extracting until get none-alpha >-------------------

        override public Token getTok()
        {
            Token tok = new Token();

            tok.Append((char)context_.src.next());          // first is alpha

            while (!isAlphaStateEnd(context_.src.peek()))   // stop when non-alpha
            {
                tok.Append((char)context_.src.next());
            }
            return(tok);
        }
        //----< keep extracting until get none-whitespace >---------------
        override public Token getTok()
        {
            Token tok = new Token();

            tok.Append((char)context_.src.next());        // first is WhiteSpace

            while (!isWhiteSpaceEnd(context_.src.peek())) // stop when non-WhiteSpace
            {
                tok.Append((char)context_.src.next());
            }
            return(tok);
        }
        //----< keep extracting until get none-punctuator >--------------

        override public Token getTok()
        {
            Token tok = new Token();

            tok.Append((char)context_.src.next());       // first is punctuator

            while (!isPunctuationEnd(context_.src.peek(0), context_.src.peek(1),
                                     context_.src.peek(2), context_.src.peek(3)))   // stop when non-punctuator
            {
                tok.Append((char)context_.src.next());
            }
            return(tok);
        }
        //----< keep extracting until get none-cppcomment >-------------------

        override public Token getTok()
        {
            Token tok = new Token();

            tok.Append((char)context_.src.next());   // first two chars are "//".
            tok.Append((char)context_.src.next());

            while (!isCppCommentStateEnd(context_.src.peek())) // stop when CppComment state ends
            {
                tok.Append((char)context_.src.next());
            }

            return(tok);
        }
        //----< keep extracting until get none-singlecharspecialpunct >-------------------

        override public Token getTok()
        {
            Token tok = new Token();

            tok.Append((char)context_.src.next());   // first char is single-char special punctuation.

            return(tok);
        }
        //----< keep extracting until get none-doublequote >-------------------

        override public Token getTok()
        {
            Token tok      = new Token();
            int   prevItem = context_.src.peek(0);

            tok.Append((char)context_.src.next());  // first char is a double quote.


            while (!isDoubleQuoteStateEnd(prevItem, context_.src.peek()))    // stop when double quote state ends
            {
                prevItem = context_.src.peek();
                tok.Append((char)context_.src.next());
            }

            if (!(context_.src.peek() < 0))         // last char is a double quote.
            {
                tok.Append((char)context_.src.next());
            }

            return(tok);
        }
        //----< keep extracting until get none-newline >-------------------

        override public Token getTok()
        {
            Token tok = new Token();

            tok.Append((char)context_.src.next());          // first char is '\n' or '\r'.

            while (!isNewlineStateEnd(context_.src.peek())) // stop when newline state ends
            {
                context_.src.next();
            }

            return(tok);
        }
        //----< keep extracting until get none-singlequotestate >-------------------

        override public Token getTok()
        {
            Token tok       = new Token();
            int   prevItem2 = context_.src.peek(0);

            tok.Append((char)context_.src.next());  // first char is one single quote.
            int prevItem = context_.src.peek(0);

            tok.Append((char)context_.src.next());                                   // second char is one char in the single quotes.

            while (!isSingleQuoteStateEnd(prevItem2, prevItem, context_.src.peek())) // stop when single quote state ends
            {
                prevItem2 = prevItem;                                                //update
                prevItem  = context_.src.peek();                                     //update
                tok.Append((char)context_.src.next());
            }

            if (!(context_.src.peek() < 0))
            {
                tok.Append((char)context_.src.next()); // last char is another single quote.
            }
            return(tok);
        }