private int hexadecimal(final Token token, final String text,
			final int start, final int prefixLength, final int length,
			final boolean isAlphanumeric) {

		final char quotationMark = text.charAt(start + prefixLength);
		
		int position = start + prefixLength + 2;
		while (position < length) {
			final char c = text.charAt(position);
			if (c != quotationMark) {
				// TODO Check if legal character ?
				position += 1;
				continue;
			}
			
			// TODO Subtoken should include prefix.

			final Token hexadecimal = token.subtoken(start, position + 1);
			hexadecimal.addTag(AreaTag.PROGRAM_TEXT_AREA);
			hexadecimal.addTag(SyntacticTag.CHARACTER_STRING);
			hexadecimal.addTag(SyntacticTag.HEXADECIMAL_LITERAL);
			if (isAlphanumeric) {
				hexadecimal.addTag(SyntacticTag.STRING_LITERAL);
			}
			if (LOGGER.isTraceEnabled()) {
				LOGGER.trace("Hexadecimal: " + hexadecimal);
			}
			enqueue(hexadecimal);
			return position + 1;
		}

		// TODO Incomplete hexadecimal. Throw error ?

		final Token hexadecimal = token.subtoken(start);
		hexadecimal.addTag(AreaTag.PROGRAM_TEXT_AREA);
		hexadecimal.addTag(SyntacticTag.CHARACTER_STRING);
		hexadecimal.addTag(SyntacticTag.HEXADECIMAL_LITERAL);
		if (isAlphanumeric) {
			hexadecimal.addTag(SyntacticTag.STRING_LITERAL);
		}
		if (LOGGER.isTraceEnabled()) {
			LOGGER.trace("Incomplete hexadecimal: " + hexadecimal);
		}
		enqueue(hexadecimal);
		return length;
	}