2010-02-22 10 views
17

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

int[] a = { 1, 2, 3, }; 

किसी को भी जानता है कि कौन सी भाषा जैसे कि ये अल्पविराम के अनुगामी अनुमति देने के लिए पहली बार था मैं उत्सुक हूँ:

उदाहरण के लिए, निम्नलिखित जावा (JLS 10.6 Array Initializers) में एक पूरी तरह से कानूनी सरणी प्रारंभ है। स्पष्ट रूप से सी as far back as 1985 था।

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

+0

अगर मुझे याद है, जब मैंने 1 9 83 में मूल के एंड आर (प्री-एएनएसआई) से सी सीखा, तो पीछे की कॉमा की अनुमति थी। यह आसान स्वचालित कोड उत्पादन (वाईएसीसी जैसे उपकरणों द्वारा) की अनुमति देने के लिए जानबूझकर था। – Ralph

+0

यह भी मदद करता है जब (एक 'enum' परिभाषा में) प्रत्येक आइटम अपनी रेखा पर होता है: अंत में एक नया मान जोड़ना एक अतिरिक्त रेखा है (नई अंतिम रेखा में परिवर्तन की आवश्यकता नहीं है), संभावित रूप से निर्भरता से परहेज करना नई अंतिम रेखा में किसी भी बदलाव पर/पर। – jhfrontz

उत्तर

4

मैं अल्पविराम के पर एक विशेषज्ञ नहीं हूँ, लेकिन मुझे पता है कि मानक पास्कल अर्द्ध कोलन जा रहा बयान विभाजक, नहीं टर्मिनेटर्स के बारे में बहुत persnickity था। इसका मतलब था कि अगर आप कंपाइलर द्वारा चिल्लाना नहीं चाहते थे तो आपको बहुत सावधान रहना पड़ा था।

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

+1

अर्धविरामों की बात करते हुए, मुझे मानव इतिहास में अर्धविरामों की उपयोग आवृत्ति पर एक चार्ट देखने में दिलचस्पी होगी। विकिपीडिया के अनुसार, जल्द से जल्द सामान्य उपयोग के 1591 में है मुझे लगता है कि हर नई घुंघराले-ब्रेकेट प्रोग्रामिंग का आविष्कार भाषा के साथ इसके उपयोग में एक कूद नहीं है कि। शायद यह भी एक टक्कर है जब लोग यह समझते हैं कि आप इसे लोगों पर डूबने के लिए उपयोग कर सकते हैं;) ' – polygenelubricants

+6

गंभीरता से; मुझे नहीं लगता कि उसने आवृत्ति को बदल दिया है जिसका उपयोग मैं करता हूं; –

+0

यह ध्यान रखना दिलचस्प है कि बेसिक में, कोलन को अर्धविराम से अधिक बार प्रयोग किया जाता है, और कमोडोर विक -20 और डेरिवेटिव्स (सी 64, सी 128, आदि) पर मध्य पंक्ति जे, के, एल, कोलन के साथ समाप्त होती है (जे, के, एल, अर्धविराम के बजाय)। – supercat

4

मुझे पता चला कि एक g77 फोरट्रान कंपाइलर -fugly-commaUgly Null Arguments ध्वज है, हालांकि यह थोड़ा अलग है (और जैसा कि नाम का तात्पर्य है, बदसूरत है)।

-fugly-comma विकल्प मतलब करने के लिए एक बाहरी प्रक्रिया के लिए वास्तविक तर्कों की सूची में "एक अतिरिक्त अनुगामी शून्य तर्क पारित" और करने के लिए इस तरह के एक प्रक्रिया पर तर्कों की एक खाली सूची के उपयोग के लिए एक एकल अनुगामी अल्पविराम के उपयोग में सक्षम बनाता है, मतलब "एक एकल शून्य तर्क पास करें"।

उदाहरण के लिए, CALL FOO(,) का मतलब है "एक शून्य तर्क पास करें" के बजाय "दो शून्य तर्क" पास करें। इसके अलावा, CALL BAR() का अर्थ है "एक शून्य तर्क पास करें"।

मुझे यकीन नहीं है कि यह पहली बार किस भाषा में दिखाई दिया था।

+0

EEEwwwwww। बुरा। –

+10

उस विकल्प की तरह-च है: बदसूरत-अल्पविराम, या कि सिर्फ "fugly अल्पविराम" है। मैं वास्तव में विश्वास करना चाहता हूं कि यह बाद वाला है। –

2

[क्या कोई जानता है] आधुनिक प्रोग्रामिंग भाषाओं के अन्य व्याकरण "विशिष्टताओं"?

मेरे पसंदीदा में से एक, Modula-3, "पास्कल परिवार" में तत्कालीन नवीनतम भाषा के रूप में निक्लौस विर्थ के आशीर्वाद के साथ 1990 में बनाया गया था। क्या किसी और को उन भयानक झगड़े याद हैं जहां अर्धविराम विभाजक या टर्मिनेटर होना चाहिए? मॉडुला -3 में, पसंद तुम्हारा है! बयान के एक दृश्य के लिए EBNF

stmt ::= BEGIN [stmt {; stmt} [;]] END 

इसी तरह है, जब एक CASE बयान में विकल्प लेखन, Modula-3 या तो आप एक विभाजक या उपसर्ग के रूप में लंबवत बार   | उपयोग करते हैं।तो तुम

CASE c OF 
| 'a', 'e', 'i', 'o', 'u' => RETURN Char.Vowel 
| 'y' => RETURN Char.Semivowel 
ELSE RETURN Char.Consonant 
END 

लिख सका क्योंकि आप उस स्थिति में OF लिखने के लिए पसंद करते हैं आप प्रारंभिक बार को बंद रखना होगा, शायद हो सकता है।

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


पीएस उद्देश्य कैमल अभिव्यक्तियों में | के अनुमोदित उपयोग की अनुमति देता है जबकि पहले और निकट से संबंधित बोली मानक एमएल नहीं करता है। नतीजतन, मानक एमएल कोड में मामले अभिव्यक्ति अक्सर उलझन में होती है।


संपादित: TED का जवाब देखने के बाद मैं Modula-2 व्याकरण की जाँच की और वह टर्मिनेटर के रूप में भी समर्थित अर्धविराम सही है, Modula-2, लेकिन खाली बयान की डिवाइस है, जो की तरह सामान बनाता है के माध्यम से

x := x + 1;;;;;; RETURN x 

कानूनी। मुझे लगता है कि यह एक बुरी बात नहीं है। मॉडुला -2 ने मामला विभाजक | के लचीले उपयोग की अनुमति नहीं दी, हालांकि; ऐसा लगता है कि मॉडुला -3 के साथ उत्पन्न हुआ है।

+0

के लिए पृष्ठभूमि पा सकते हैं यह सही है। यही कारण है कि सी को इस मुद्दे के आसपास कैसे मिला, मुझे विश्वास है। एडा का समाधान मॉडुला -3 के करीब है, ताकि बदसूरत दिखने वाली बहु अर्धविराम की बात कानूनी नहीं होगी। ' –

+0

एक खाली बयान के रूप में अर्धविराम का उपयोग Wirth क्लासिक Modula-2 में कानूनी नहीं है, यह Modula-2 के बाद आईएसओ गया; आप एडीए में कुछ अजीब कारण के लिए एक" खाली बयान "चाहते हैं, आप' कहने के लिए अशक्त है बहुत बहस, हर कोई इससे खुश नहीं था।मॉड्यूल -2 आर 10 विर्थ के दृष्टिकोण के साथ चिपक जाती है लेकिन टीओडीओ नामक एक अंतर्निहित डमी प्रक्रिया को जोड़ती है जो तर्क के रूप में अक्षर को शाब्दिक रूप से ले जाती है जिसे DEBUG मोड में संकलन समय चेतावनी के रूप में मुद्रित किया जाता है, या उत्पादन निर्माण मोड में त्रुटि होती है। – trijezdci

2

कुछ जो मुझे हमेशा सी के बारे में galled गया है, हालांकि यह एक intializer सूची में एक अतिरिक्त अनुगामी अल्पविराम की अनुमति देता है, इसके बारे में शाब्दिक परिभाषित करने के लिए नहीं एक प्रगणक सूची में एक अतिरिक्त अनुगामी अल्पविराम की अनुमति देने वाला (है एक गणना प्रकार)। इस छोटी असंगतता ने मुझे प्रवेश करने की परवाह करने से अधिक बार गधे में मुझे काट दिया है। और किसी भी कारण से!

+1

मुझे लगता है कि आप उस पर पिछड़े हैं। मुझे लगता है कि तर्क यह था कि एनम परिभाषा के अंत में एक अतिरिक्त वस्तु की उपस्थिति कुछ भी प्रभावित नहीं करेगी (जब तक इसका नाम किसी अन्य पहचानकर्ता के साथ टकरा नहीं जाता) जबकि प्रारंभकर्ता के अंत में एक अतिरिक्त आइटम जोड़ना आकार के प्रभाव को प्रभावित कर सकता है आवंटित सरणी। – supercat

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