एक प्रोग्रामिंग भाषा का विश्लेषण


10

में SICP , लेखकों राज्य ( धारा 1.1 ) तीन बुनियादी भाषाओं प्रोग्रामिंग की "तंत्र" देखते हैं कि:

  • आदिम भाव , जो भाषा से संबंधित सबसे सरल संस्थाओं का प्रतिनिधित्व करते हैं

  • संयोजन के साधन , जिसके द्वारा यौगिक तत्व सरल से निर्मित होते हैं

  • अमूर्तता के साधन , जिसके द्वारा यौगिक तत्वों को इकाइयों के रूप में नामित और हेरफेर किया जा सकता है

मैं इन तत्वों या तंत्रों के संदर्भ में मुख्यधारा की प्रोग्रामिंग भाषा (उदाहरण के लिए जावा) का विश्लेषण कैसे कर सकता हूं?


क्या आपने विस्तारित बैकस-नौर फॉर्म, ईबीएनएफ या बैकस-नौर फॉर्म, बीएनएफ पहले देखा है? यह इन तीन अवधारणाओं के समान एक व्याकरण को तोड़ सकता है, हालांकि मुझे वास्तव में यकीन नहीं है कि आपके इरादे क्या हैं इसलिए मुझे नहीं पता कि यह मदद करेगा या नहीं।
जेटी

@ जेटी - हाँ, मेरे पास है, और नहीं, यह वह नहीं है जिसमें मुझे दिलचस्पी है। मैं वास्तव में शब्दार्थ का विश्लेषण कर रहा हूं (प्रश्न: क्या वास्तव में मैं जिस शब्द की तलाश कर रहा हूं?) प्रोग्रामिंग भाषाओं का है, नहीं? उनके लिखित रूप (अर्थात वाक्य रचना)।

जवाबों:


1

आदिम अभिव्यक्तियों के बीच अंतर, संयोजन के साधन और अमूर्तता के साधन, प्रोग्रामिंग भाषाओं को मॉडलिंग करते समय एक उपयोगी है। ध्यान दें कि यह भाषा की आंतरिक संपत्ति नहीं है: आप किसी भी भाषा की परिभाषा को इंगित नहीं कर सकते हैं और कह सकते हैं कि "यह सुविधा स्पष्ट रूप से एक आदिम अभिव्यक्ति है, यह सुविधा स्पष्ट रूप से संयोजन का एक साधन है"। भेद मॉडल की एक संपत्ति है, और जटिल मॉडल वर्गीकरण का विरोध कर सकते हैं।

इन तीन अवधारणाओं का एक पाठ्यपुस्तक उदाहरण है लैम्ब्डा कैलकुलस , जिसमें प्रत्येक में से एक है:

  • चर एक्स , वाई , ... केवल आदिम भाव हैं।
  • फंक्शन एप्लीकेशन MN संयोजन का एक साधन है।
  • लैम्ब्डा एब्स्ट्रेक्शन λx.M एब्सट्रैक्शन का एक साधन है।

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

में (जावा का एक विशिष्ट मॉडल), आदिम भाव मुख्य रूप से स्थिरांक और चर हैं। संयोजन के साधनों में कई ऑपरेटर शामिल हैं; अधिक सटीक, "additive अभिव्यक्ति" दो स्लॉट (बाएं हाथ की ओर और दाएँ हाथ की ओर), या तीन स्लॉट (दोनों पक्षों के साथ साथ ऑपरेटर) यदि आप दोनों को शामिल के साथ साथ संयोजन का एक साधन है एक + बी और एक - बी उस नाम के तहत (जिस स्थिति में ऑपरेटर +और -अपने आप में आदिम निर्माण होंगे)। संयोजन के अन्य साधनों में निर्देश I ; J , लूप निर्माण के अनुक्रम शामिल हैंwhile (…) {…}, और इसी तरह। फिर आपके पास वैरिएबल डिक्लेरेशन, फंक्शन डेफिनिशन, क्लास डेफिनिशन और इस तरह के कंस्ट्रक्शन हैं, जिस पर दोनों कॉम्बिनेशन के साधन हैं (वे पैरामीटर नाम और प्रकार, बॉडी, इनिशियलाइज़र, ... और एब्सट्रैक्शन के साधन को मिलाते हैं (क्योंकि वे पुन: उपयोग के लिए नामों को परिभाषित करते हैं)। यह वास्तव में काफी आम है कि अमूर्त का मतलब संयोजन के साधन भी हैं: वे एक नाम को इसकी परिभाषा के साथ जोड़ते हैं।


अच्छा उत्तर; आपको उन समस्याओं पर मिला, जिनसे मैं जूझ रहा था - आदिम, संयोजन, आदि के बीच अस्पष्ट अंतर

"चर" का वास्तव में क्या मतलब है? क्या उन्हें अमूर्तन के माध्यम के रूप में वर्णित नहीं किया जा सकता है क्योंकि उनके पास एक नाम है?
morbidCode

@morbidCode चर की अवधारणा एक जटिल है, और शब्द का लैम्ब्डा कैलकुलस और जावा में एक अलग लेकिन संबंधित अर्थ है। एक चर को "अमूर्त" माना जा सकता है क्योंकि यह अनिर्दिष्ट मूल्य को संदर्भित करता है। हालांकि, यह अमूर्तता का साधन नहीं है : यह संदर्भ नहीं बनाता है, यह केवल मौजूदा अमूर्त का उपयोग करने का एक तरीका है। एक लैम्ब्डा अमूर्त एक वस्तु के रूप में कोड के ब्लॉक का उपयोग करने का एक तरीका बनाता है जिसे हेरफेर किया जा सकता है।
गिल्स एसओ- बुराई को रोकें '

4

किसी न किसी तरह:

भाव बस इतना ही है; जावा में एक अभिव्यक्ति क्या है। मुझे नहीं पता कि बयानों को शामिल करने के लिए इसका विस्तार होगा या नहीं।

संयोजन में यौगिक अभिव्यक्तियाँ, (चर ?,) कथन, विधियाँ, वर्ग तंत्र और पैकेज शामिल होंगे। मॉड्यूल, भी, एक बार जब वे भाषा में होते हैं।

जावा में, अमूर्तता का सबसे सरल साधन एक वर्ग है: एक वर्ग के बाहर कुछ भी मौजूद नहीं हो सकता है। अमूर्तता की "परतें" हैं: एक स्थिर विधि एक आवृत्ति विधि की तुलना में यकीनन सरल है, क्योंकि इसके लिए एक उदाहरण की आवश्यकता नहीं है।

जेनरिक अमूर्त (और हताशा) की एक अतिरिक्त परत पेश करते हैं।


@MattFenwick एक अभिव्यक्ति में एक ही आदिम हो सकता है, आदिम और अन्य संस्थाओं के संयोजन एक यौगिक अभिव्यक्ति (अभी भी एक अभिव्यक्ति है, लेकिन एक बयान नहीं है) बनाता है।
डेव न्यूटन

@MattFenwick मैं नहीं, मैं यह नहीं कह रहा हूँ कर रहा हूँ एक अभिव्यक्ति है एक आदिम, मैं कह रहा हूँ एक अभिव्यक्ति केवल एक ही आदिम शामिल हो सकते हैं। कोई रास्ता नहीं है एक स्ट्रिंग सिर्फ एक आदिम है क्योंकि भाषा इसके लिए सिंटैक्टिक चीनी प्रदान करती है, जब तक कि आप तत्काल स्ट्रिंग और इसे बनाने वाले संदर्भ के बीच अंतर नहीं करना चाहते। मैं कहता हूं + है, क्योंकि इस पर किसी भी तरह से कार्रवाई नहीं की जा सकती है।
डेव न्यूटन

अपने अलग के बारे में: क्या जावा के जेनरिक के कार्यान्वयन में कोई समस्या है?
स्टीवन एवर्स

2

यहाँ मेरा मूल वर्गीकरण है। मैं LISP के साथ एक पैरालेल खींचने की कोशिश कर रहा हूं।

आदिम भाव

  • सभी आदिम मूल्य, ऐसी चीजें जिन्हें आप शाब्दिक (संख्या, बूलियन, ...) का उपयोग करके दर्शा सकते हैं

LISP में समानांतर : परमाणु, संख्या और सूचियाँ।

संयोजन के साधन (ऐसे तरीके जिनसे आप यौगिक डेटा-संरचनाएँ बना सकते हैं)

  • Arrays
  • वस्तु / संरचना।

LISP में समानांतर : विपक्ष कोशिकाओं, सूचियों

अमूर्तन के साधन

  • सभी नियंत्रण प्रवाह वाक्यविन्यास (यदि, जबकि)
  • सभी builtin ऑपरेटरों ( +, -, *, /, ...)
  • सभी कार्य (इस श्रेणी में हम कक्षाएं और विधियाँ शामिल करते हैं)

LISP में समांतर : फ़ंक्शंस, वाक्यगत चीनी जैसे let,define


अच्छा उत्तर! मैं सोच रहा था कि शायद कुछ नियंत्रण-प्रवाह निर्माण संयोजन के माध्यम से फिट होंगे, हालांकि। LISP के साथ अच्छा समानताएं, जो बहुत मदद करता है।

काफी नहीं। एरे और ऑब्जेक्ट एक अलग स्तर पर खेलते हैं, वे डेटा प्रतिनिधित्व का हिस्सा हैं, भाषा का नहीं। Array initializers भाषा का हिस्सा हैं, और वे संयोजन का एक साधन हैं। ऑपरेटर्स और कंट्रोल फ्लो कंस्ट्रक्शन अमूर्तन का साधन नहीं हैं, क्योंकि वे पुन: उपयोग के लिए कुछ भी "स्टोर" नहीं करते हैं। अमूर्तता के साधन आमतौर पर उस नाम के तहत भविष्य के पुन: उपयोग के लिए एक इकाई को एक नाम देते हैं।
गाइल्स का SO- बुराई पर रोक '21

0

एक प्रोग्रामिंग भाषा को आमतौर पर इसके सिंटैक्स और इसके शब्दार्थ द्वारा परिभाषित किया जाता है । इन दोनों को भाषा के मानकों में परिभाषित किया जाएगा।

वाक्य-विन्यास यह बताता है कि एक वैध कार्यक्रम कैसे लिखा जाता है और शब्दार्थ यह परिभाषित करता है कि उस वैध कार्यक्रम का क्या अर्थ है।

आपके मामलों में, वाक्यविन्यास आपको बताएगा कि आपकी प्रधानताएं क्या हैं, आप उन्हें कैसे जोड़ते हैं, और आप उन्हें कैसे अमूर्त करते हैं। शब्दार्थ आपको बताएगा कि संयोजन और सार का क्या अर्थ है।

उदाहरण के लिए, वाक्यविन्यास आपको बताएगा कि वैध forलूप कैसे लिखें । शब्दार्थ आपको बताएगा कि लूप के लिए क्या करता है।

यदि आप वास्तव में एक प्रोग्रामिंग भाषा का विश्लेषण करना शुरू करना चाहते हैं, तो मानक की एक प्रति पकड़ो और देखें कि वहां क्या है। मैं वास्तव में जावा में सीलिंग करने से पहले सी की तरह एक सरल भाषा के साथ शुरुआत करूंगा। मैं बाकी किताब भी पढ़ूंगा। यह सीखना कि क्यों प्रोग्रामिंग लैंगग्यूज़ मेरे काम करने के तरीके को बेहतर बनाता है, भले ही मैं कंपाइलरों को लागू नहीं करता।


1
रुको क्या? "जावा में सीलिंग करने से पहले सी की तरह सरल।" आपने मुझे "सिंपल लाइक सी" में खो दिया।
corsiKa

मैट, मुझे लगता है कि मैं वास्तव में समझ नहीं पा रहा हूं कि आप क्या कर रहे हैं। इन दोनों चीजों के बारे में बातचीत से उद्धृत पुस्तक चाहे लेखक स्पष्ट रूप से उन्हें वाक्यविन्यास और शब्दार्थ कहे या नहीं।
एमपीडोनाडिओ

वास्तव में, "सिंटैक्स" भाषाओं में "सरलतम" चीजों का सटीक वर्णन करता है, जिनमें से परमाणुओं की रचना होती है।
इरा बैक्सटर

वाक्यविन्यास पूरी तरह से कब्जा नहीं करता है कि एक वैध कार्यक्रम क्या है, इससे बहुत दूर है। उदाहरण के लिए एक वाक्यात्मक रूप से सही कार्यक्रम प्रकार की जाँच में विफल हो सकता है। एसी प्रोग्राम जो स्टेटमेंट x = ++x;को निष्पादित करता है, मान्य नहीं है, भले ही एक ठेठ कंपाइलर इसे स्वीकार कर ले।
गाइल्स का SO- बुराई पर रोक '21

0

मुझे नहीं पता कि यह सही है, लेकिन मैं जिस तरह से विभाजन को समझता हूं वह इस प्रकार है:

आदिम अभिव्यक्तियाँ , ये होंगी, जैसे, >>, +, *, /, int, बूलियन, चर, विधियाँ आदि।

संयोजन के साधन, यह बहस योग्य हो सकता है, या तो इसकी चीजें जैसे + और संक्षिप्त, या इसके बारे में अधिक उन्नत विचारों जैसे कि वंशानुक्रम बनाम रचना और ऐसा करने के तरीके। इंजेक्शन, नया ऑपरेटर, विस्तार आदि।

अमूर्तता के साधन, यह वैरिएबल और विधियों के नाम के साथ-साथ इंटरफेस, कक्षाएं, स्टैटिक क्लास, ओवरलोडिंग के तरीकों आदि को बनाने के लिए इस्तेमाल किया जाने वाला वाक्यविन्यास होगा।

हालाँकि, इसकी संभवता आपको हमें पुस्तक से और अधिक जानकारी देने की है, इसलिए हमें पता है कि वास्तव में इसका क्या मतलब है।


पुस्तक ऑनलाइन मुफ़्त है; ओपी में एक लिंक दिया गया है। मैं उसी तरह के बारे में महसूस किया means of combination- कि यह पता लगाना मुश्किल है कि वास्तव में वहां क्या है। अच्छा जवाब है, हालांकि।

क्या आप जानते हैं कि वह किन अन्य अध्यायों में संयोजनों और अमूर्त के बारे में बात करता है?
बॉब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.