2010-10-01 15 views
8

मेरे पास एक कंपाइलर होमवर्क प्रश्न है जो मुझे पास्कल टिप्पणियों के लिए एक डीएफए आकर्षित करना चाहता है, लेकिन मैंने कभी पास्कल का उपयोग नहीं किया है (और शायद कभी नहीं)। सवाल यह निर्दिष्ट नहीं करता है कि हमें एएनएसआई पास्कल या टर्बो पास्कल का उपयोग करना चाहिए, इसलिए मैं दोनों के लिए एक करने जा रहा था।पास्कल टिप्पणियां घोंसला मानी जाती हैं?

कुछ गूगल खोजों मुझे पता चला है कि टर्बो पास्कल, नेस्टेड टिप्पणियां अनुमति देता है जब एक ही सीमांकक नहीं किया जाता है तो {(*comment*)} ठीक है और इतने (*{comment}*) है, लेकिन {{comment}} या (*(*comment*)*) ठीक नहीं हैं। मेरा सवाल यह है कि {(*{comment}*)} या (*{(*comment*)}*) जैसी कोई टिप्पणी ठीक है क्योंकि एक ही डिलीमीटर का उपयोग पंक्ति में नहीं किया जाता है।

मैंने यह भी देखने के लिए गुगल किया कि क्या एएनएसआई पास्कल ने नेस्टेड टिप्पणियों की अनुमति दी है, लेकिन मुझे एक निश्चित उत्तर नहीं मिला है। अगर एएनएसआई पास्कल नेस्टेड टिप्पणियों की अनुमति देता है, तो नियम क्या हैं?

एक तरफ ध्यान दें, मैं एएनएसआई पास्कल में एक सम्मेलन की अनुमति देने वाले विभिन्न प्रारंभिक और समाप्ति वाले डिलीमीटरों के अजीब टिप्पणी सम्मेलन के बारे में चिंतित नहीं हूं।

अद्यतन:

मैं स्पष्ट होना कि मैं वास्तव में के साथ संबंध कैसे विशिष्ट compilers पास्कल टिप्पणियों को संभालने, मैं के साथ चिंतित हूँ कि कैसे एक संकलक पास्कल टिप्पणी संभाल चाहिए कि अगर संकलक पालन 100 नहीं कर रहा हूँ चाहते हैं % या तो एएनएसआई या टर्बो पास्कल मानकों के लिए।

+1

यह एक सवाल है कि आप अपने प्रशिक्षक से पूछना चाहिए की तरह लगता है। अपनी पाठ्यपुस्तक भी देखें। –

+0

@ मेरे प्रशिक्षक केरोब केडीडी और मैंने प्रश्न पोस्ट करने से पहले इस बारे में बात की थी, और मुझे पहले से ही उसकी पसंद के हल होने की समस्या है। पुस्तक हमें इस मुद्दे में इस गहरे जाने के लिए नहीं ढूंढ रही थी, लेकिन मुझे पूरी तरह से होना पसंद है। इसके अतिरिक्त, जैसा कि मैंने प्रश्न में कहा है, पुस्तक गैर-विशिष्ट है कि पास्कल के किस संस्करण पर विचार किया जाना चाहिए, और चूंकि पुस्तक एक कंपाइलर पुस्तक है और पास्कल पुस्तक नहीं है, इसलिए भाषा के टिप्पणी सम्मेलनों को स्पष्ट रूप से परिभाषित नहीं किया गया है, और यही वह है जो मैं अपने प्रश्न, और स्पष्ट परिभाषा में देख रहा हूं। – ubiquibacon

उत्तर

11

ISO 7185:1990 कहते हैं में § 6.1.8 इस बारे में टिप्पणी:

एक कमेंटरी कहाँ वर्णों और पंक्तियों की विभाजन के किसी भी क्रम होगा, जिसमें न} और न ही *), निर्माण

('{' | '(*') कमेंटरी ('*)' | '}')

टिप्पणी होगी यदि न तो {nor the (* एक चरित्र के भीतर होता है ट्राइंग या एक टिप्पणी के भीतर।

नोट

  1. एक टिप्पणी इस प्रकार { साथ शुरू कर सकते हैं और *) के साथ समाप्त, या (* के साथ शुरू और } के साथ समाप्त।
  2. अनुक्रम (*) एक टिप्पणी में नहीं हो सकता है, भले ही अनुक्रम {) कर सकते हैं।

इसके अनुसार, अनिवार्य रूप से केवल एक तरह की टिप्पणी है। यद्यपि आप { या (* के साथ कोई टिप्पणी प्रारंभ कर सकते हैं, फिर भी आप अन्य टिप्पणियों को "लपेटने" के लिए वर्णों के विभिन्न सेटों का उपयोग नहीं कर सकते हैं। दूसरी तरफ, टर्बो पास्कल में दो प्रकार की टिप्पणियां होती हैं, जो ब्रेसिज़ का उपयोग करती हैं और जो ब्रांड्स का उपयोग करती हैं।

आप एक ब्रेस शैली टिप्पणी है और (*{}*) बनाने के लिए एक कोष्ठक शैली टिप्पणी में संलग्न हैं, आईएसओ का कहना है टिप्पणी *) बचे है, जो अपने कोड में एक सिंटैक्स त्रुटि हो जाएगा के साथ (*{} है, जबकि टर्बो पास्कल का कहना है टिप्पणी (*{}*) है जिसमें कोई टेक्स्ट शेष नहीं है।

न तो शैली आपको टिप्पणी डिलीमीटरों के एक और सेट में पहले से ही लिपटे टिप्पणी को लपेटने देती है। ऐसा इसलिए है क्योंकि एक बार जब आप कोई टिप्पणी लपेटते हैं, तो "आंतरिक" टिप्पणी को अब टिप्पणी के रूप में माना जाता है। यह सिर्फ साधारण पाठ है। यदि आपके पास {(**)} है और आप इसे (*{(**)}*) बनाने के लिए एक कोष्ठक-शैली टिप्पणी में लपेटना चाहते हैं, तो आईएसओ और टर्बो पास्कल दोनों कहते हैं कि (*{(**)}*) के साथ छोड़ दिया गया है।

एफपीसी और ओबीजेएफपीसी मोड में, नि: शुल्क पास्कल घोंसले की टिप्पणियों का समर्थन करता है, इसलिए मेरा सबसे हालिया उदाहरण किसी बचे हुए पाठ के साथ वैध टिप्पणी के रूप में स्वीकार नहीं किया जाएगा। The FPC documentation on the matter वास्तव में यह प्रदर्शित नहीं करता है, यद्यपि।

 
{ Comment 1 (* comment 2 *) } 
(* Comment 1 { comment 2 } *) 
{ comment 1 // Comment 2 } 
(* comment 1 // Comment 2 *) 
// comment 1 (* comment 2 *) 
// comment 1 { comment 2 } 

लेकिन टर्बो पास्कल (या डेल्फी, अंतिम दो पंक्तियों के लिए) है, जो हम पहले से ही स्थापित कर लिया है नहीं समर्थन नेस्टिंग, सभी की स्वीकार करेंगे करता है: यह माना जाता है कि नेस्ट टिप्पणियों के छह उदाहरण देता है पूरी तरह से मान्य टिप्पणियों के रूप में! एफपीसी वास्तव में नेस्टेड टिप्पणियों का समर्थन करता है, लेकिन उन उदाहरणों ने इसका वर्णन नहीं किया है।

 
{ Comment 1 { comment 2 } } 
(* Comment 1 (* comment 2 *) *) 
{ Comment 1 (* comment 2 { comment 3 } *) } 

मैं भी लोगों का तर्क था कि पांचवें वेतन आयोग के तीसरे और चौथे उदाहरण वास्तव में दावा करने के लिए जवाबी कि पांचवें वेतन आयोग नेस्टेड टिप्पणियों का समर्थन करता है कर रहे हैं: यहाँ नेस्टेड टिप्पणियों के कुछ उदाहरण हैं। उन दो लाइनों को पूरी तरह से टिप्पणियां नहीं होनी चाहिए। लाइन के बीच में // एक टिप्पणी प्रस्तुत करता है जो लाइन के अंत तक समाप्त नहीं होता है (ईओएल)। ईओएल } और *) के बाद आता है, इसलिए जब भी हम ब्रेस या ब्रांडेसिस डिलीमीटर तक पहुंचते हैं, तब भी आंतरिक, स्लैश-स्टाइल टिप्पणी समाप्त नहीं हो सकती है। जैसे <a> <b> </a> </b> अनुचित रूप से नेस्टेड एक्सएमएल है, हमने अनुचित रूप से नेस्टेड टिप्पणियां निभाई हैं: { // } EOL

आगे के प्रयोग के बाद, मैंने निष्कर्ष निकाला कि एफपीसी में, केवल उसी प्रकार के घोंसला की टिप्पणियां हैं। उदाहरण के लिए, { के साथ कोई टिप्पणी खोलने के बाद, (* वर्ण विशेष होने के लिए बंद हो जाते हैं। एफपीसी ब्रेस-स्टाइल टिप्पणी के अंदर एक कंस्ट्रैसिस-स्टाइल टिप्पणी नहीं खोल पाएगा।यदि ऐसा हुआ, तो {(*} अनियमित ब्रांडेसिस टिप्पणी के कारण एक वाक्यविन्यास त्रुटि होगी। हम यह कहकर यह समझा सकते हैं कि जब टिप्पणियां विषम होती हैं तो आंतरिक टिप्पणियों को समाप्त करना वैकल्पिक होता है, लेकिन यह कहने का एक सरल स्पष्टीकरण है कि आंतरिक टिप्पणी बिल्कुल टिप्पणी के रूप में नहीं मिली है। एक बार जब आप एक ब्रेस-स्टाइल टिप्पणी खोल देते हैं, तो केवल ब्रेसिज़ का अर्थ होता है। इसके अलावा, // वास्तव में ब्रेसिज़ के अंदर होने पर स्लैश-स्टाइल टिप्पणी शुरू नहीं करता है। यह एक आसान स्पष्टीकरण है कि कहने के लिए कि एफपीसी स्लैश-स्टाइल टिप्पणियों को अनुचित रूप से घोंसला करने की अनुमति देता है। आप या तो कह सकते हैं कि स्लैश-स्टाइल टिप्पणियां बिल्कुल घोंसला नहीं करती हैं, या स्लैश-स्टाइल टिप्पणियां अन्य स्लैश-स्टाइल टिप्पणियों में घूमती हैं एक एकल ईओएल टर्मिनेटर साझा करें।

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

+2

अब आपने सभी * टिप्पणी * को सारांशित किया है, मैं इस सवाल के संबंध में जोड़ना चाहता हूं कि [1 99 3] (http://en.wikipedia.org/wiki/Pascal_%28programming_language% 2 9 # मानकों) एएनएसआई मानक आईएसओ मानक की तरफ से मौजूद है। जबकि टर्बो, [माना जाता है] (http://pascal-central.com/extpascal.html#anchor-6) बल्कि एक गैर-मानक पास्कल है। गैर मानक या नहीं, ऐसा कोई प्रकाशित विनिर्देश नहीं है। –

+0

बहुत वर्णनात्मक उत्तर के लिए धन्यवाद! इससे चीजें बहुत स्पष्ट हो गईं। हालांकि एक बात, जहां आप कहते हैं 'मैं भी एफपीसी का तर्क दूंगा ...' मैं सोच रहा हूं कि यह सही है या नहीं। मैं आपके खिलाफ अपने तर्क का प्रयोग करूंगा कि 'टिप्पणी डिलीमिटर matryoshka गुड़िया से अलग है कि वे उनके अंदर क्या है की व्याख्या बदलते हैं'। उदाहरण के 3 और 4 की आरंभिक टिप्पणी डिलीमीटर नहीं है, आंतरिक डबल-स्लैश '//' टिप्पणी के "व्याख्या को बदलें"? – ubiquibacon

+0

@ सर्टैक अकुज़ अब एएनएसआई मानक के बारे में अच्छी तरह से पता लगा रहा है जो अब आईएसओ मानक है और टर्बो पास्कल मानक के बजाए बोलीभाषा है। – ubiquibacon

2

कम से कम डेल्फी {(*{comment}*)} की अनुमति नहीं देगा क्योंकि पहला बंद घुंघराले ब्रैकेट पहले उद्घाटन घुंघराले ब्रैकेट को बंद कर देगा, न कि आखिरी वाला। आपके अन्य नमूने पर भी लागू होता है।

+0

एफपीसी को किसी भी उदाहरण के साथ कोई समस्या नहीं है, हालांकि यह एक ही प्रतीक को घोंसला करने की अनुमति देता है अर्थात {{{comment}} '। [डॉक्स] (http://www.freepascal.org/docs-html/ref/refse2.html) कहते हैं कि कुछ कंपाइलर मोड निर्भरता है। –

+0

@Sertac Akyuz मैंने Scite टेक्स्ट एडिटर में विभिन्न टिप्पणियों की कोशिश की और यह मुझे बताता है कि '{{comment}}' अमान्य है। मुझे नहीं पता कि मैं इसे कितना भरोसा कर सकता हूं। मुझे लगता है कि क्या है और क्या अनुमति नहीं है सभी संकलक को किसी भी तरह से नीचे आता है, लेकिन मैं एक विशिष्ट संकलक क्या करता है या अनुमति नहीं देता है, इसके बजाय मैं मानकों (टर्बो और एएनएसआई) के बारे में और सोच रहा हूं। – ubiquibacon

+0

@typo - पर्याप्त मेला। यदि आपको [पास्कल आईएसओ 7185: 1 99 0] (http://www.moorecad.com/standardpascal/iso7185.pdf) मानक पर एक नज़र डालना पसंद है। यह एकमात्र आधिकारिक डॉक्टर है जिसका मैं उल्लेख कर सकता हूं। –

0

मैं मैं का इस्तेमाल किया टर्बो पास्कल के संस्करण में लगता है, नेस्टेड टिप्पणियों का समर्थन नहीं कर रहे थे, इन दोनों के संकलन होगा:

{(* } 

{{ } 

कुछ गूगल खोजों मुझे पता चला है कि टर्बो पास्कल जब तक नेस्टेड टिप्पणियों की अनुमति देता है उसी डेलीमीटर का उपयोग नहीं किया जाता है

प्रभावी रूप से, नेस्टेड टिप्पणियां "समर्थित" हैं, क्योंकि वैकल्पिक वाक्यविन्यास को कंपाइलर द्वारा अनदेखा किया जाता है।

आप download a pascal compiler कर सकते हैं और उस संकलक का समर्थन करने के लिए अपने डीएफए लिख सकते हैं। उनके उदाहरण प्रोग्रामों में से एक का उपयोग करें, और देखें कि नेस्टेड टिप्पणियां संकलित होंगी या नहीं।

+2

मुझे लगता है कि इसका मतलब है कि नेस्टेड टिप्पणियां * समर्थित नहीं हैं। आप घोंसला टिप्पणियां नहीं कर सकते; एक टिप्पणी * पहले * टिप्पणी-समाप्त चरित्र पर समाप्त होती है, इससे कोई फर्क नहीं पड़ता कि कितने टिप्पणी-शुरुआती पात्र इससे पहले आए थे। –

+1

@ रोब केनेडी मुझे नहीं लगता कि टर्बो पास्कल के लिए 100% सच है क्योंकि '{(* टिप्पणी *)}' मान्य है और इसलिए '(* {comment} *)' है। INNER टिप्पणी टर्बो पास्कल में इसके मिलान करने वाले डिलीमीटर पर समाप्त हो जाएगी, और बाहरी टिप्पणी इसके मेल खाने वाले डिलीमीटर पर समाप्त हो जाएगी। ऐसा इसलिए है क्योंकि टर्बो पास्कल '(* टिप्पणी}' या '{टिप्पणी *) जैसे बेजोड़ delimiters के साथ टिप्पणियों की अनुमति नहीं देता है। – ubiquibacon

+1

लेकिन @Typoknig, इसका मतलब यह नहीं है कि टिप्पणियां घोंसला हैं। एक टिप्पणी के अंदर, * सभी * अन्य पात्रों को नजरअंदाज कर दिया जाता है। तथ्य यह है कि उनमें से कुछ पात्र पास्कल की अन्य टिप्पणी पात्रों की तरह दिखते हैं, अप्रासंगिक है। एक बार आपके पास "बाहरी" टिप्पणी हो जाने के बाद, "आंतरिक" टिप्पणी * सभी पर एक टिप्पणी हो जाती है *। यह वहां बस सादा पाठ है। –

0

पांचवें वेतन आयोग (मुक्त पास्कल) में: // ... (...) {...}

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