private String parseTokenHelper() throws Exception {
        final StringBuilder sb = new StringBuilder(32);
        boolean inComment = false;
        for (; ; ) {
            final int ic = readerDone ? -1 : br.read();
            if (ic < 0) {
                if (sb.length() == 0) {
                    return null;
                }
                readerDone = true;
                return sb.toString();
            }
            final char c = (char) ic;
            if (c == '\n') {
                linenr++;
            }

            if (inComment) {
                if (c == '\r' || c == '\n') {
                    inComment = false;
                }
                continue;
            }
            if (Character.isWhitespace(c)) {
                if (sb.length() > 0) {
                    return sb.toString();
                } else {
                    continue;
                }
            }
            if (c == '#' && sb.length() == 0) {
                inComment = true;
            } else {
                sb.append(c);
            }
        }
    }
add a new lookup-value for the given name to the given lookupData array.
If no array is given (null value passed), the value is added to
the context-binded array. In that case, unknown names and values are
created dynamically.

@return a newly created value element, if any, to optionally add aliases
main/src/main/java/cgeo/geocaching/brouter/expressions/BExpressionContext.java