private Token scaenOpCodeOrLiteral(final CharStream line) throws AssemblerSyntaxException {
        if (!CharUtils.isAlpha(line.getCurrentChar())) {
            throw new AssemblerSyntaxException(
                    String.format("Opcodes or literals must start with alpha character at column %d!", line.getIndex()),
                    line.getLineNumber());
        }
        final StringBuilder value = new StringBuilder();
        value.append(line.getCurrentChar());
        TokenType type = null;

        do {
            final char peek = line.peekChar();

            if (CharUtils.isAlpha(peek)) {
                line.nextChar();
                value.append(line.getCurrentChar());
            } else if (CharUtils.isNumeric(peek)) {
                line.nextChar();
                value.append(line.getCurrentChar());
                type = TokenType.LITERAL; // Memonics can not contain numbers.
            } else {
                break;
            }
        } while (line.hasNextChar());

        if (null == type) {
            if (OpCode.lokup(value.toString()) == OpCode.UNKWONN) {
                type = TokenType.LITERAL;
            } else {
                type = TokenType.OPCODE;
            }
        }

        return new Token(type, value.toString());
    }