private void evalStartState(char c) throws CalculatorException
    {
        if (Character.isSpaceChar(c))
        {
            // not expected
            assert(false);
        }
        else if (Character.isDigit(c))
        {
            m_integerOrNumerator = c - '0';
            m_sign = 1;
            m_state = State.INTEGER_OR_NUMERATOR;
        }
        else if (c == '-')
        {
            m_state = State.MINUS;
        }
        else if (c == '+')
        {
            m_state = State.PLUS;
        }
        else if (c == '*')
        {
            m_state = State.MULTIPLY;
        }
        else if (c == '/')
        {
            m_state = State.DIVIDE;
        }
        else if (c == 'q' || c == 'Q')
        {
            if (m_string.equalsIgnoreCase("quit"))
            {
                m_token = new Token(Token.Type.Quit);                
            }    
            else
            {
                throw new CalculatorException("expected: \"quit\".");
            }
        }
        else
        {
            throw new CalculatorException("expected: /d, '+', '-', '/' '*' or 'q'.");
        }        
    }