स्क्रिप्टिंग लैंग्वेज बनाने पर सवाल


12

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

मेरा मतलब है, क्या मानक दस्तावेज हैं जो प्रश्न में नई प्रोग्रामिंग / स्क्रिप्टिंग भाषा का वर्णन करते हैं?


जैसा कि यह प्रोग्रामिंग के बारे में है, न कि प्रोग्रामर, यह शायद StackOverflow के लिए एक बेहतर फिट है।
मुअदिदिब

14
मैं मुअदीद से सहमत नहीं हूं। मुझे लगता है कि इस सवाल के लिए यह अच्छी जगह है।
क्रिस

5
मुझे लगता है कि आपकी अपनी स्क्रिप्टिंग भाषा का आविष्कार करने के बजाय, आपके और आपके उपयोगकर्ता के लिए बड़ी मात्रा में काम करना एक नई भाषा सीखना है, आप मौजूदा स्क्रिप्टिंग भाषा को बेहतर तरीके से एम्बेड करेंगे। कुछ भाषाएँ, जैसे कि पायथन, जावास्क्रिप्ट / ECMAScript को डिज़ाइन किया गया है, इसलिए इसे बड़े ढांचे में एम्बेड किया जा सकता है। संक्षेप में, आपको केवल API की डिज़ाइन करने की ज़रूरत होगी और स्क्रिप्ट दुभाषिया को अपने स्वयं के प्रोग्राम में एम्बेड करने का एक तरीका निकालना होगा।
रयान

1
यदि भाषा को डीएसएल होने का संकेत मिलता है तो ऐसा करने में लाभ है। एक सामान्य भाषा के लिए इतना नहीं। बेशक कुछ सामान्य भाषाएं डीएसएल जैसे लिस्प या टीसीएल
जेके के

जवाबों:


16

आपको जो लिखना है, उसे भाषा विनिर्देशन कहा जाता है ।

इसमें भाषा के व्याकरण (अधिमानतः विस्तारित बैकस-नाउर-फॉर्म में ) और उसके शब्दार्थ का विवरण होना चाहिए ।

उत्तरार्द्ध के लिए आप या तो अपने शब्दों में एक विवरण लिख सकते हैं (लेकिन सटीक होने के लिए ध्यान रखें) या एक औपचारिक शब्दार्थ


1
BNF केवल सामग्री मुक्त व्याकरण के लिए उपयोगी है, स्क्रिप्टिंग भाषा हमेशा संदर्भ मुक्त नहीं होती हैं जैसे TCL (हालांकि मुझे लगता है कि आप अभी भी तर्क दे सकते हैं कि ज्यादातर मामलों में संदर्भ मुक्त भाषा होना बेहतर है)
jk।

@jk। मैं यह नहीं कहूंगा कि बीएनएफ गैर-संदर्भ मुक्त भाषाओं के लिए पूरी तरह से बेकार है। गैर-संदर्भ मुक्त वाक्य रचना कैसे है, इसके आधार पर, यह अभी भी ईबीएनएफ में निर्दिष्ट करने के लिए समझ में आता है और फिर शब्दों में अस्पष्टता को हल कर सकता है। उदाहरण के लिए C ++ मानक क्या है। ज्यादातर मामलों में मुझे लगता है कि यह अभी भी शब्दों में सब कुछ समझाने या संदर्भ-संवेदनशील या अप्रतिबंधित व्याकरण का उपयोग करके निर्दिष्ट करने की तुलना में स्पष्ट है।
sepp2k

यह सच है, मेरी बात और थी कि लिस्प, टैक् या आगे (डीएसएल को परिभाषित करने के लिए वास्तव में बहुत अच्छे हैं) जैसी भाषाएं हैं जो कि सिनटेक्स को कम करती हैं और इसलिए बीएनएफ आपको बहुत कम
jk

@jk। ज़रूर, लेकिन उस मामले में वाक्यविन्यास का वर्णन करने का कोई अन्य साधन आपको उतना ही कम बताएगा, सिर्फ इसलिए कि बताने के लिए बहुत कम है। इसका मतलब यह है कि विनिर्देशन का सिंटैक्स भाग बहुत छोटा होगा।
sepp2k

13

आपको निम्नलिखित की आवश्यकता होगी:

  • नई भाषा बनाने का एक कारण
  • एक दर्शन
  • एक शब्दार्थ परिभाषा;
  • अपने टोकन का एक शाब्दिक विवरण
  • एक सिंटेक्स विश्लेषण परिभाषा

आपकी भाषा अलग कैसे होगी? इसका मिशन क्या है? क्या यह कार्यात्मक है? क्या यह वस्तु केंद्रित है? क्या यह एक मेटा-भाषा है? इसकी अनूठी विशेषताएं क्या हैं? यह उस दुनिया को क्या देगा जो अस्तित्व में नहीं है (या एक बदसूरत तरीके से मौजूद है)? आप चीजों को कैसे बदलना चाहते हैं? क्या इसे संकलित या व्याख्यायित किया गया है? एक DSL या सामान्य प्रयोजन की भाषा? यह आपका दर्शन है और आपकी भाषा के डिज़ाइन के बारे में बताता है।

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

फिर आपको किसी तरह अपने टोकन और सिंटैक्स को परिभाषित करने की आवश्यकता होगी। प्रोग्राम तब इन्हें ऑटोमेटा में संसाधित करते हैं जो स्ट्रिंग्स में पढ़ने और वाक्य रचना को संसाधित करने में सक्षम हैं। याक और बाइसन नियमित रूप से एक्सप्रेशंस और क्रमशः बीएक्सएफ शैली वाक्यविन्यास का उपयोग शाब्दिक और वाक्यविन्यास विश्लेषण के लिए करते हैं। अन्य भाषाओं के लिए उपकरण की तरह Yacc और Bison भी हैं।

आपको यह भी जानने के लिए भाषा सिद्धांत / संकलक में एक ग्राउंडिंग की आवश्यकता होगी । उदाहरणों में अस्पष्ट व्याकरण, एएसटी पीढ़ी और हेरफेर की समस्याएं शामिल हैं और आम तौर पर अपने लिए जीवन को सरल कैसे बनाया जाए। सिद्धांत जानना बहुत महत्वपूर्ण है। मैं शुरू करने के लिए निम्नलिखित पर विचार करूंगा:

कम्पाइलर: सिद्धांत, तकनीक और उपकरण (ड्रैगन बुक)
आधुनिक कंपाइलर कार्यान्वयन C में या आधुनिक कंपाइलर कार्यान्वयन जावा में


1
दर्शन के लिए +1, DSL के लिए आप स्पष्ट रूप से यहां डोमेन की पहचान करना चाहते हैं
jk।

8

नई भाषा बनाने में 99.9% समय पूरी तरह अनावश्यक है। निवेश पर वापसी सबसे अधिक संभावना है, और आप अपना समय बर्बाद करेंगे।

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

एक नई भाषा बनाना लगभग हमेशा खराब होता है।


9
यह बुरा नहीं है जब समय की भीड़ को छोड़कर। अपनी खुद की सरल डीएसएल बनाना बहुत उपयोगी हो सकता है। अब आपका अपना सामान्य उद्देश्य भाषा बनाना आपके उत्तर के साथ अधिक इनलाइन होगा।
चोसपांडियन

@ChaosPandion लेकिन बहुत सारी भाषाएँ पहले से ही एक DSL बना रही हैं जो उस भाषा से कोड का उपयोग करता है (यानी रूबी इस पर अच्छा है)
वैकल्पिक

2
मैं आपके उत्तर से सहमत हूं लेकिन मेरा मानना ​​है कि इस प्रश्न का सही उत्तर नहीं है। मेरा मानना ​​है कि पूछनेवाला एक स्क्रिप्टिंग भाषा बनाने के सामान्यों को देख रहा है न कि एक बनाने के पेशेवरों / विपक्षों के लिए।
टिम मर्फी

एक नई भाषा बनाना लगभग हमेशा सबसे अच्छा समाधान है। en.wikipedia.org/wiki/Language-oriented_programming
तर्क

3

आप बीएनएफ में अपनी भाषा के व्याकरण का वर्णन कर सकते हैं ।

उदाहरण के लिए, यह पायथन का व्याकरण है


6
व्याकरण अपने आप में एक भाषा को लागू करने के लिए पर्याप्त जानकारी नहीं है। उसे शब्दार्थ को एक या दूसरे तरीके से भी बताना होगा।
sepp2k

0

यदि आप .NET का उपयोग कर रहे हैं, तो यहां कुछ ऐसा है जिसे मैंने कुछ समय पहले ठोकर खाई थी। मैंने केवल इसे एक जिज्ञासु रूप दिया, लेकिन शायद यह आपके लिए उपयोगी होगा: विडंबना

विडंबना .NET प्लेटफॉर्म पर भाषाओं को लागू करने के लिए एक विकास किट है।

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