public List<Token> parse(String input) {
		List<Token> tokens = new ArrayList<Token>();

		if (input == null || input.length() == 0) {
			return tokens;
		}

		char[] array = getArray(input);
		int length = array.length;
		for (int i = 0; i < length; i++) {
			Token token = getToken(array, i, tokens);
			if (token != null) {
				tokens.add(token);
				i = token.getEnd();
			}
		}

		return tokens;
	}