मुझे लगता है कि शब्द वाक्यात्मक चीनी समान अंतर्निहित शब्दार्थ को व्यक्त करने के लिए एक वैकल्पिक वाक्यविन्यास इंगित करता है।
उदाहरण के लिए एक प्रोग्रामिंग भाषा को लें जिसमें एक ऑपरेशन होता है sum
जो मनमानी लंबाई के पूर्णांकों की सूची जोड़ सकता है। इस भाषा में हम भाव लिख सकते हैं
sum []
sum [3, 4, 5, 1]
sum [2, 7]
जिनके परिणाम क्रमशः 0, 13 और 9 हैं।
अब, मान लीजिए कि हम महसूस करते हैं कि 90% बार हम sum
दो तर्कों के साथ उपयोग करते हैं, और इसलिए हम सुविधा के लिए परिचय देते हैं, नया उद्धरण
2 + 7
जो के लिए सिर्फ कृत्रिम चीनी है sum [2, 7]
।
अब दूसरी भाषा B को लीजिए जिसमें कोई जोड़ नहीं है। हमारे पास ऑपरेटर हो सकते हैं <
, जैसे =
कि हमें संख्याओं की तुलना करने की अनुमति, लेकिन संख्याओं को जोड़ने का कोई तरीका नहीं । भाषा बी के रिलीज 2 में, हम सिंटैक्स के साथ एक नया अतिरिक्त संचालन शुरू करते हैं
2 + 7
जो हमेशा की तरह संख्या जोड़ता है।
भाषा ए के संदर्भ में, +
संकेतन वाक्यगत चीनी है (यह एक वैकल्पिक, सरलीकृत और तदर्थ संकेतन है जिसका उपयोग sum [...]
संकेतन के बजाय किया जा सकता है)। इसी तरह, जैसा कि हो लॉन्ग टैम के जवाब में बताया गया है, सी में अंकन के p->field
लिए सिंटैक्टिक शुगर है (*p).field
।
भाषा B के संदर्भ में, +
संकेतन चीनी नहीं है (यह राशि के संचालन के लिए उपयोग किया जाने वाला एकमात्र वैध वाक्य-विन्यास है)। इसी तरह, यदि सी केवल बिंदुओं के माध्यम से संरचनात्मक सदस्यों तक पहुंच सकता है और यदि अंकन नहीं था (*p).field
, तो संकेतन p->field
चीनी नहीं होगा।
मेरी राय में, वाक्यात्मक चीनी के बारे में कुछ गलतफहमी हैं जो प्रोग्रामिंग भाषा के शब्दार्थों के बारे में भ्रम की स्थिति का पता लगा सकती हैं। तर्क इस प्रकार है:
- एक कार्यक्रम का शब्दार्थ वह है जो एक कार्यक्रम की गणना करता है।
- एक प्रोग्रामिंग भाषा की अभिव्यंजक शक्ति का प्रतिनिधित्व उस भाषा में वर्णित संगणनाओं द्वारा किया जाता है।
- दो प्रोग्रामिंग भाषाएं जो सभी कम्प्यूटेशनल कार्यों का वर्णन कर सकती हैं (जैसा कि ट्यूरिंग मशीनों का उपयोग करके परिभाषित किया गया है) में एक ही अभिव्यंजक शक्ति है ...
- ... और इसलिए केवल वाक्य रचना में भिन्नता है।
- कोरोलरी: ट्यूरिंग-कम्प्लीट लैंग्वेज का कोई भी एक्सटेंशन केवल सिंटैक्स (सिंटैक्टिक शुगर) है क्योंकि आप भाषा की अभिव्यंजक शक्ति को नहीं बदलते हैं।
रीज़निंग की उपरोक्त लाइन "सिंटैक्टिक शुगर को ठीक से परिभाषित नहीं किया जा सकता है" जैसे सामान्य दावे की ओर जाता है, यह "स्वाद का मामला" है, या "हर प्रोग्रामिंग भाषा की सुविधा है, आखिरकार, सिंटैक्टिक शुगर"।
मुझे लगता है कि उपरोक्त तर्क में मुख्य समस्या यह है कि शब्दार्थ केवल एक कार्यक्रम द्वारा गणना किए जाने के बारे में नहीं है , बल्कि यह भी है कि इसकी गणना कैसे की जाती है , अर्थात क्या आदिम निर्माण का उपयोग किया जाता है और उन्हें कैसे संयोजित किया जाता है।
उदाहरण के लिए, ऑब्जेक्ट अंतर्निहित बिट कॉन्फ़िगरेशन और बिट ट्रांसफ़ॉर्मेशन के लिए सिंटैक्टिक चीनी नहीं हैं, वे एक निर्माण हैं जो डेटा और संचालन को मॉडल करने और कम्प्यूटेशन का वर्णन करने की अनुमति देता है। वस्तुओं, विधियों, विधि कॉलों के साथ कम्प्यूटिंग बाइट्स, प्रोसेसर रजिस्टरों, मेमोरी पतों (भले ही दो संगणनाओं का एक ही परिणाम हो, और यहां तक कि अगर दूसरी संगणना का उपयोग पहले लागू करने के लिए किया जाए) के साथ कंप्यूटिंग के समान नहीं है।
मैंने यह वर्णन थोड़ा लंबा किया है, लेकिन मुझे लगता है कि यह एक महत्वपूर्ण पहलू है जिसे मैंने अन्य उत्तरों में संबोधित नहीं किया है।
नीचे की रेखा: वाक्य रचना चीनी एक निर्माण के लिए एक वैकल्पिक (संभवतः अधिक सुविधाजनक) वाक्यविन्यास है जो पहले से ही एक भाषा में है और पहले से ही एक अच्छी तरह से परिभाषित वाक्य रचना और शब्दार्थ है। नया वाक्यविन्यास (वाक्यविन्यास चीनी) मौजूदा एक से भिन्न होता है लेकिन एक ही शब्दार्थ होता है । यदि आप एक भाषा में एक नया निर्माण और इसके लिए नया वाक्यविन्यास पेश करते हैं, तो आपके पास वाक्यविन्यास चीनी नहीं है।