private static String Expression(Environment e) throws Exception {
        String retVal = "";
        switch (e.Peek()) {
            case '"':
            case '\'':
            case '´':
                return Value(e);
            case '%':
                return Variable(e);
            case '[':
                return Choose(e);
            case '{':
                return Condition(e);
            case '$':
                return Function(e);
            case '#':
                e.ReadToEnd();
                return "";
            default:
                e.Throw("Unknown construct");
        }
        return retVal;
    }