public Ast.AstSchemaExpression parse_SchemaExpression(SpecObject specObject, String property)
    {
        int at = m_current;
        if (!ok())
            {
            return null;
            }
        int tat;

        if (next(TozeTokenizer.TOKEN_ALL))
            {
            Ast.AstForAllS node = m_ast.new AstForAllS();
            node.m_schemaText = parse_SchemaText(specObject, property);
            next(TozeTokenizer.TOKEN_DOT);
            node.m_schemaExpression = parse_SchemaExpression(specObject, property);
            if (ok())
                {
                return node;
                }
            }

        reset(at);
        if (next(TozeTokenizer.TOKEN_EXI))
            {
            Ast.AstThereExistsS node = m_ast.new AstThereExistsS();
            node.m_schemaText = parse_SchemaText(specObject, property);
            next(TozeTokenizer.TOKEN_DOT);
            node.m_schemaExpression = parse_SchemaExpression(specObject, property);
            if (ok())
                {
                return node;
                }
            }

        reset(at);
        if (next(TozeTokenizer.TOKEN_EXIONE))
            {
            Ast.AstThereExistsS node = m_ast.new AstThereExistsS();
            node.m_schemaText = parse_SchemaText(specObject, property);
            next(TozeTokenizer.TOKEN_DOT);
            node.m_schemaExpression = parse_SchemaExpression(specObject, property);
            if (ok())
                {
                return node;
                }
            }

        Ast.AstSchemaExpression node = parse_rrSchemaExpression1(specObject, property);
        return node;
    }