संचालक साहचर्य

प्रोग्रामिंग भाषा सिद्धांत में, एक ऑपरेटर (प्रोग्रामिंग) की सहयोगीता एक संपत्ति है जो यह निर्धारित करती है कि संचालन के समान क्रम के ऑपरेटरों को ब्रैकेट (गणित) की अनुपस्थिति में कैसे समूहीकृत किया जाता है। यदि किसी ओपेरंड के पहले और बाद में दोनों ऑपरेटर हैं (उदाहरण के लिए, ), और उन ऑपरेटरों की समान प्राथमिकता है, तो ऑपरेंड का उपयोग दो अलग-अलग ऑपरेशनों के लिए इनपुट के रूप में किया जा सकता है (यानी दो ऑपरेटरों द्वारा इंगित दो ऑपरेशन)। ऑपरेंड को किस ऑपरेशन पर लागू करना है, इसका चुनाव ऑपरेटरों की संबद्धता से निर्धारित होता है। ऑपरेटर्स एसोसिएटिव हो सकते हैं (मतलब ऑपरेशंस को मनमाने ढंग से समूहीकृत किया जा सकता है), लेफ्ट-एसोसिएटिव (मतलब ऑपरेशंस को बाईं ओर से समूहीकृत किया जाता है), राइट-एसोसिएटिव (मतलब ऑपरेशंस को दाईं ओर से समूहीकृत किया जाता है) या गैर-एसोसिएटिव (मतलब ऑपरेशंस को समूहीकृत नहीं किया जा सकता है) जंजीर, अक्सर क्योंकि आउटपुट प्रकार इनपुट प्रकारों के साथ असंगत होता है)। किसी ऑपरेटर की संबद्धता और प्राथमिकता प्रोग्रामिंग भाषा की परिभाषा का एक हिस्सा है; एक ही प्रकार के ऑपरेटर के लिए अलग-अलग प्रोग्रामिंग भाषाओं में अलग-अलग संबद्धता और प्राथमिकता हो सकती है।

अभिव्यक्ति पर विचार करें. यदि ऑपरेटर  साहचर्य छोड़ दिया है, इस अभिव्यक्ति की व्याख्या इस प्रकार की जाएगी. यदि संचालक के पास सही साहचर्य है, तो अभिव्यक्ति की व्याख्या इस प्रकार की जाएगी. यदि ऑपरेटर गैर-सहयोगी है, तो अभिव्यक्ति एक वाक्यविन्यास त्रुटि हो सकती है, या इसका कुछ विशेष अर्थ हो सकता है। कुछ गणितीय संचालकों में अंतर्निहित साहचर्यता होती है। उदाहरण के लिए, घटाव और विभाजन, जैसा कि पारंपरिक गणित नोटेशन में उपयोग किया जाता है, स्वाभाविक रूप से बाएं-सहयोगी हैं। इसके विपरीत, जोड़ और गुणा, बाएँ और दाएँ दोनों साहचर्य हैं। (उदा. ).

कई प्रोग्रामिंग भाषा मैनुअल ऑपरेटर प्राथमिकता और सहयोगीता की एक तालिका प्रदान करते हैं; उदाहरण के लिए, C और C++ में ऑपरेटर्स देखें|C और C++ के लिए तालिका।

यहां वर्णित सांकेतिक साहचर्य की अवधारणा गणितीय साहचर्यता से संबंधित है, लेकिन उससे भिन्न है। एक ऑपरेशन जो गणितीय रूप से सहयोगी है, परिभाषा के अनुसार किसी नोटेशनल सहयोगीता की आवश्यकता नहीं है। (उदाहरण के लिए, जोड़ में साहचर्य गुण होता है, इसलिए इसका बायां साहचर्य या दायां साहचर्य होना जरूरी नहीं है।) एक ऑपरेशन जो गणितीय रूप से साहचर्य नहीं है, हालांकि, सांकेतिक रूप से बाएं-, दाएं- या गैर-सहयोगी होना चाहिए। (उदाहरण के लिए, घटाव में साहचर्य गुण नहीं होता है, इसलिए इसमें सांकेतिक साहचर्य होना चाहिए।)

उदाहरण
साहचर्यता की आवश्यकता केवल तभी होती है जब किसी अभिव्यक्ति में संचालकों की प्राथमिकता समान हो। आम तौर पर  और   समान प्राथमिकता है. अभिव्यक्ति पर विचार करें. नतीजा कुछ भी हो सकता है  या. पूर्व परिणाम उस स्थिति से मेल खाता है जब  और   वाम-सहयोगी हैं, बाद वाले कब तक   और   सम्यक्-सहयोगी हैं.

सामान्य उपयोग को प्रतिबिंबित करने के लिए, जोड़, घटाव, गुणा और भाग (गणित) ऑपरेटर आमतौर पर बाएं-सहयोगी होते हैं,   जबकि एक घातांक ऑपरेटर के लिए (यदि मौजूद है) और नुथ के अप-एरो संकेतन|नुथ के अप-एरो ऑपरेटरों के बीच कोई सामान्य सहमति नहीं है। कोई भी असाइनमेंट (कंप्यूटर विज्ञान) ऑपरेटर आमतौर पर राइट-एसोसिएटिव होते हैं। ऐसे मामलों को रोकने के लिए जहां ऑपरेंड दो ऑपरेटरों के साथ जुड़े होंगे, या बिल्कुल भी ऑपरेटर नहीं होंगे, समान प्राथमिकता वाले ऑपरेटरों के पास समान सहयोगीता होनी चाहिए।

एक विस्तृत उदाहरण
अभिव्यक्ति पर विचार करें, जिसमें   इसे राइट-एसोसिएटिव घातांक ऑपरेटर के रूप में लिया जाता है। बाएं से दाएं टोकन पढ़ने वाला एक पार्सर दाएं-सहयोगिता के कारण शाखा पर सहयोगीता नियम लागू करेगा  , इस अनुसार: इसके बाद शीर्ष नोड (पहले) से शुरू करते हुए गहराई-प्रथम का मूल्यांकन किया जा सकता है ): वाम-साहचर्य मूल्यांकन के परिणामस्वरूप पार्स वृक्ष का निर्माण हुआ होगा   और बिल्कुल अलग परिणाम (625$2$)$9$ = 244,140,625$262144$ ≈ $6.206$.
 * 1) अवधि   पढ़ा जाता है।
 * 2) नॉनटर्मिनल   पढ़ा जाता है। नोड:.
 * 3) अवधि   पढ़ा जाता है। नोड:.
 * 4) नॉनटर्मिनल   पढ़ा जाता है, जिससे सही-साहचर्य नियम सक्रिय हो जाता है। सहयोगीता नोड तय करती है:.
 * 5) अवधि   पढ़ा जाता है। नोड:.
 * 6) नॉनटर्मिनल   पढ़ा जाता है, जिससे सही-साहचर्य नियम का पुन: अनुप्रयोग शुरू हो जाता है। नोड.
 * 7) अवधि   पढ़ा जाता है। नोड.
 * 8) पढ़ने के लिए कोई टोकन नहीं. पार्स ट्री उत्पन्न करने के लिए साहचर्यता लागू करें.
 * 1) मूल्यांकनकर्ता पेड़ के नीचे चलता है, पहले से, दूसरे से, तीसरे तक   अभिव्यक्ति।
 * 2) इसका मूल्यांकन इस प्रकार है: 3$3$ = 9. परिणाम अभिव्यक्ति शाखा को दूसरे के दूसरे ऑपरेंड के रूप में प्रतिस्थापित करता है.
 * 3) मूल्यांकन पार्स वृक्ष में एक स्तर ऊपर इस प्रकार जारी रहता है: 4$2$ = 262,144. फिर, परिणाम अभिव्यक्ति शाखा को पहले के दूसरे ऑपरेंड के रूप में प्रतिस्थापित करता है.
 * 4) फिर से, मूल्यांकनकर्ता पेड़ को मूल अभिव्यक्ति तक ले जाता है और इस प्रकार मूल्यांकन करता है: 5$2$ ≈ $5.96$. अंतिम शेष शाखा नष्ट हो जाती है और परिणाम समग्र परिणाम बन जाता है, जिससे समग्र मूल्यांकन पूरा हो जाता है।

असाइनमेंट ऑपरेटरों की सही-सहयोगिता
कई अनिवार्य प्रोग्रामिंग भाषाओं में, असाइनमेंट ऑपरेटर को राइट-एसोसिएटिव के रूप में परिभाषित किया गया है, और असाइनमेंट को एक अभिव्यक्ति (जो एक मूल्य का मूल्यांकन करता है) के रूप में परिभाषित किया गया है, न कि केवल एक कथन के रूप में। यह एक असाइनमेंट एक्सप्रेशन के मान को अगले असाइनमेंट एक्सप्रेशन के सही ऑपरेंड के रूप में उपयोग करके असाइनमेंट (कंप्यूटर विज्ञान) #श्रृंखलाबद्ध असाइनमेंट की अनुमति देता है।

सी (प्रोग्रामिंग भाषा) में, असाइनमेंट  एक अभिव्यक्ति है जो अभिव्यक्ति के समान मूल्य का मूल्यांकन करती है   के प्रकार में परिवर्तित किया गया , वैल्यू (कंप्यूटर साइंस)#lrvalue|R-वैल्यू को स्टोर करने के दुष्प्रभाव (कंप्यूटर विज्ञान) के साथ   वैल्यू (कंप्यूटर साइंस)#lrvalue|L-वैल्यू में. इसलिए अभिव्यक्ति  के रूप में समझा जा सकता है. वैकल्पिक अभिव्यक्ति  एक त्रुटि उत्पन्न होती है क्योंकि   यह एक एल-वैल्यू एक्सप्रेशन नहीं है, यानी इसमें एक आर-वैल्यू है लेकिन एल-वैल्यू नहीं है जहां आर-वैल्यू को स्टोर किया जाए. की सम्यक-संगति  ऑपरेटर जैसे अभिव्यक्तियों की अनुमति देता है   के रूप में समझा जाए.

C++ में, असाइनमेंट  एक अभिव्यक्ति है जो अभिव्यक्ति के समान मूल्य का मूल्यांकन करती है , के आर-मूल्य को संग्रहीत करने के दुष्प्रभाव के साथ   के एल-मूल्य में. इसलिए अभिव्यक्ति  अभी भी इसकी व्याख्या की जा सकती है. और वैकल्पिक अभिव्यक्ति  के रूप में समझा जा सकता है   एक त्रुटि उत्पन्न करने के बजाय। की सम्यक-संगति   ऑपरेटर जैसे अभिव्यक्तियों की अनुमति देता है   के रूप में समझा जाए.

गैर-सहयोगी ऑपरेटर
गैर-सहयोगी ऑपरेटर वे ऑपरेटर होते हैं जिनका किसी अभिव्यक्ति में अनुक्रम में उपयोग किए जाने पर कोई परिभाषित व्यवहार नहीं होता है। प्रोलॉग में इन्फ़िक्स ऑपरेटर  गैर-सहयोगी है क्योंकि निर्माण जैसे वाक्यविन्यास त्रुटियों का गठन।

एक और संभावना यह है कि कुछ ऑपरेटरों के अनुक्रमों की व्याख्या किसी अन्य तरीके से की जाती है, जिसे साहचर्य के रूप में व्यक्त नहीं किया जा सकता है। इसका आम तौर पर मतलब यह है कि वाक्यात्मक रूप से, इन परिचालनों के अनुक्रम के लिए एक विशेष नियम है, और शब्दार्थिक रूप से व्यवहार अलग है। एक अच्छा उदाहरण पायथन (प्रोग्रामिंग भाषा) में है, जिसमें ऐसी कई संरचनाएँ हैं। चूंकि असाइनमेंट स्टेटमेंट हैं, ऑपरेशन नहीं, इसलिए असाइनमेंट ऑपरेटर का कोई मूल्य नहीं है और वह सहयोगी नहीं है। असाइनमेंट (कंप्यूटर विज्ञान) #श्रृंखलाबद्ध असाइनमेंट को असाइनमेंट के अनुक्रमों के लिए व्याकरण नियम के द्वारा कार्यान्वित किया जाता है, जिन्हें फिर बाएँ से दाएँ असाइन किया जाता है। इसके अलावा, असाइनमेंट और संवर्धित असाइनमेंट का संयोजन, जैसे   पायथन में वैध नहीं हैं, हालांकि वे सी में वैध हैं। एक अन्य उदाहरण तुलना ऑपरेटर हैं, जैसे  ,  , और. एक जंजीर तुलना की तरह  के रूप में व्याख्या की गई है , दोनों के बराबर नहीं   या.

यह भी देखें

 * संचालन का क्रम (अंकगणित और बीजगणित में)
 * सामान्य ऑपरेटर संकेतन (प्रोग्रामिंग भाषाओं में)
 * सहयोगिता (सहयोगिता का गणितीय गुण)