private Token lexDqString() {
		++pos;

		StringBuilder builder = new StringBuilder();
		boolean finished = false;
		while (pos < sourceString.length() && !finished) {
			switch (sourceString.charAt(pos)) {
			case '\\':
				if (pos + 1 < sourceString.length()) {
					switch (sourceString.charAt(pos + 1)) {
					case 't':
						builder.append("\t");
						pos += 2;
						break;
					case 'n':
						builder.append("\n");
						pos += 2;
						break;
					default:
						++pos;
						builder.append(sourceString.charAt(pos));
						++pos;
						break;
					}
				} else {
					throw this.createError("Cannot token source after '\\'");
				}
				break;
			case '"':
				++pos;
				finished = true;
				break;
			default:
				builder.append(sourceString.charAt(pos));
				++pos;
			}
		}
		return this.createToken(TokenType.STRING, new String(builder));
	}