2012-03-28 16 views
11

this site केवल उत्पादन जहां begin प्रकट होता है में एक अनौपचारिक OCaml व्याकरण को देखते हुए है:ओकैमल सिंटेक्टिक चीनी में शुरू होता है?

Expression ::= begin Expression end 

और थोड़ा और आगे नीचे एक दिखाई देगा:

Expression ::= ( Expression [:Type] ) 

यही कारण है, एक साथ begin के कुछ बेतकल्लुफ़ प्रतिस्थापन के साथ/end(/) कुछ तुच्छ कोड (जो शुद्धता को प्रभावित नहीं करता) में यह सुझाव दे सकता है कि beginend कीवर्ड एस सिर्फ वाक्य रचनात्मक चीनी हैं। या क्या मैं कुछ न कुछ भूल रहा हूं?

उत्तर

27

"सिंटेक्टिक चीनी" अन्य संरचनाओं के लिए एक सरल लेकिन मामूली अनुवाद का सुझाव नहीं देता है। begin .. end वाक्य रचनात्मक चीनी नहीं है, यह (..) के साथ है, क्योंकि यह बिल्कुल एक ही चीज़ है।

आप रुचि रखते हैं, मंशा है कि प्रोग्रामर begin .. end उपयोग कर सकते हैं एक गैर इकाई मूल्य के साथ एक अभिव्यक्ति के लिए एक अनिवार्य अभिव्यक्ति, अपने दुष्प्रभाव के लिए मार डाला, और (..) संलग्न किया गया था। लेकिन संकलक इसे लागू नहीं करता है, भाषा के डिजाइनरों ने सोचा कि अगर वे इस फैशन में इस्तेमाल किए जाते हैं तो यह अच्छा लगेगा, बस इतना ही।

+3

कौन कहता है कि वाक्य रचनात्मक चीनी को गैर-तुच्छ होना चाहिए? वैसे भी इसका क्या मतलब है? मैं निस्संदेह सिंटैक्टिक चीनी के रूप में स्टार्ट-एंड वर्गीकृत करता हूं। –

+5

@AndreasRossberg यदि ओकैमल कंपाइलर का अनुवाद 'प्रारंभ ..' से '(..)' आंतरिक रूप से होता है, तो पूर्व सिंटैक्टिक चीनी होगी। संकलक किसी भी सार्थक अर्थ में ऐसा नहीं करता है। इसके बजाय, दोनों निर्माण एएसटी के निर्माण में निहित रूप से एन्कोड किए गए हैं। ** किसी का अनुवाद दूसरे में नहीं किया जाता है। ** –

+0

@AndreasRossberg मुझे सांस्कृतिक मतभेदों और सभी के बारे में पता है, लेकिन मुझे आपकी टिप्पणियां थोड़ा अनुत्पादक मिलती हैं। चूंकि आप असहमत होने पर टिप्पणी कर रहे हैं, उदाहरण के लिए, आप अपने दृष्टिकोण को थोड़ा बेहतर तरीके से समझाने का प्रयास कर सकते हैं, उदाहरण के लिए, "आप क्यों कहते हैं कि आप Ocaml में देशी कोड को अलग से संकलित नहीं कर सकते हैं? निःसंदेह तुमसे हो सकता है।"? मुझे, उस विशेष मामले में, आपको उस लिंक का पालन करने के लिए नहीं कहना चाहिए जो मैंने पहले ही प्रदान किया है या वहां जो कहा गया है उसे दोहराने के लिए। –

9

वास्तव में, विभिन्न व्याकरणिक नियमों के लिए ओकैमल व्याकरण में ब्रांड्स के कई उपयोग हैं, और इन सभी का उपयोग शुरूआत के साथ नहीं किया जा सकता है। पेरेंटेसिस और स्टार्ट..एंड को असंबद्धता के उद्देश्य के लिए अर्थशास्त्र-मुक्त अभिव्यक्ति डिलीमीटर के रूप में उपयोग किया जा सकता है (जैसा कि आपने कहा था, expr ::= '(' expr ')')। () भी unit प्रकार के निरंतर प्रतिनिधित्व करता है और, एक पन के रूप में, begin end भी अनुमति है - लेकिन यह अंतिम मैनुअल में निर्दिष्ट नहीं है, केवल कार्यान्वयन द्वारा लगातार समर्थित है।

लेकिन कोष्ठकों भी

  • इस्तेमाल किया जा सकता पैटर्न परिसीमित करने के लिए: Array.get और Array.set के लिए function (_::_)::_ -> ...
  • वाक्यात्मक चीनी के रूप में: प्रकार एनोटेशन (e : t) दोनों भाव और पैटर्न में के लिए t.(i)t.(i) <- e
  • (इस है असंबद्ध delimiters का एक विशेष मामला नहीं है क्योंकि यह बिना किसी ब्रांड्स के वैध है)
  • subtyping coercions के लिए: (e :> t) और (e : s :> t)
  • लेबल पैटर्न यौगिकों: fun ~(x:int) .. और fun ?(x=10) ..
  • मॉड्यूल, हस्ताक्षर और कक्षा में विभिन्न संबंधित स्थान (coercions, एनोटेशन, आदि) में
  • /वस्तुओं वाक्य रचना
  • के कुछ हिस्सों

इस प्रयोग से कोई भी के लिए बजाय प्रयोग किया begin..end कर सकते हैं, तो यह निश्चित रूप से begin और )end व्यवस्थित साथ (जबकि बातचीत सही है) के साथ ( को बदलने के लिए मान्य नहीं होगा।

पैडेंटिक उत्तर के लिए खेद है, लेकिन सवाल स्वयं ही काफी सटीक था। मुझे यकीन नहीं है ..एंड हैंडलिंग ओकैमल व्याकरण का सबसे सुंदर हिस्सा है (जिसमें बहुत सारे मर्द हैं)। कोई यह चाहता है कि वे वास्तव में समकक्ष थे, लेकिन फिर (x : int) के बजाय begin x : int end लिखने पर जोर देने में थोड़ा सा बिंदु है।

+1

पेडेंटिक का अर्थ सटीक सटीक_ के मजबूत अर्थ के साथ सटीक है। आपका जवाब आईएमओ सटीक था। –

संबंधित मुद्दे