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

        Ast.AstIdentifier inode = parse_Identifier(specObject, property);
        if (ok())
            {
            Ast.AstAbbreviation3 node = m_ast.new AstAbbreviation3();
            node.m_identifier1 = inode;
            node.m_infixGenericName = parse_InfixGenericName();
            node.m_identifier2 = parse_Identifier(specObject, property);
            if (ok())
                {
                return node;
                }
            }

        reset(at);
        Ast.AstVariableName vnode = parse_VariableName(specObject, property);
        if (ok())
            {
            Ast.AstAbbreviation1 node = m_ast.new AstAbbreviation1(specObject, property);
            node.m_variableName = vnode;
            int tat = m_current;
            node.m_formalParameters = parse_FormalParameters(specObject, property);
            if (!ok())
                {
                reset(tat);
                }
            return node;
            }

        reset(at);
        Ast.AstPrefixGenericName gnode = parse_PrefixGenericName();
        if (ok())
            {
            Ast.AstAbbreviation2 node = m_ast.new AstAbbreviation2();
            node.m_prefixGenericName = gnode;
            node.m_identifier = parse_Identifier(specObject, property);
            if (ok())
                {
                return node;
                }
            }

        return null;
    }