protected @Override Char getNewToken() throws ScannerException {
		try {
			Char c = new Char(reader.read());
			if (c.getCharClass() == Char.Class.HASHMARK) // ignore comment
				do {
					 c = new Char(reader.read());
				} while (c.getCharClass() != Char.Class.NEWLINE
					&& c.getCharClass() != Char.Class.EOF);
			if (c.getCharClass() == Char.Class.EOF)
				return null;
			if (c.getCharClass() == Char.Class.INVALID) {
				logger.error("Invalid character with codepoint " + c.getCodepoint() + " encountered.");
				throw new ScannerException("Invalid character", this);
			}
			appendToContext((char) c.getCodepoint());
			return c;
		} catch (IOException e) {
			logger.error("I/O error while trying to create character token", e);
			throw new ScannerException("I/O error: " + e.getMessage(), this, e);
		}
	}