एक बुनियादी भाषा के लिए बुनियादी सुविधाएँ? DSL सुझाव?


9

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

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

मेरे सभी प्रश्न इस पर उबलते हैं:

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

अपना समय देने के लिए धन्यवाद,

डोमिनिक


3
मैं हमेशा एक ऐसी लैंग्वेज चाहता हूं जिसमें बिल्ट-इन, सिंटैक्स-समर्थित AOP कार्यक्षमता हो।
FrustratedWithFormsDesigner

@ मुख्य: LINQ कार्यक्षमता के बारे में कैसे?
शिकारी

@ स्वीकृत ... एओपी - पहलू उन्मुख प्रोग्रामिंग कार्यक्षमता? क्या आप एक उदाहरण दे सकते हैं?
डोमिनिक

5
आपको बुनियादी अनिवार्य विशेषताओं से एक डोमेन विशिष्ट भाषा का आविष्कार शुरू नहीं करना चाहिए। पहले अपने डोमेन को औपचारिक रूप दें, इस ज्ञान को एक भाषा में बदल दें, और उसके बाद ही बुनियादी सुविधाओं को जोड़ें, यदि वे आवश्यक हों। संभवतः आप एक पूर्ण DSL के साथ भी समाप्त हो जाएंगे जो Turing-complete नहीं है, और यह DSLs के सर्वोत्तम गुणों में से एक है।
एसके-तर्क

1
निश्चित रूप से "गोटो" किसी भी बुनियादी की अनिवार्य विशेषता है?
पेरी

जवाबों:


1

कमोडोर [विक -20, सी -64] पर शुरुआती BASIC के साथ मेरे अनुभव ने मुझे यह धारणा दी कि लाइन नंबर BASIC का एक मुख्य "फीचर" था। ऐसा लगता है कि वे अब आधुनिक कार्यान्वयन में उपयोग नहीं किए जाते हैं, जो कि मेरे लिए एक बाधा के रूप में कुछ है क्योंकि मेरे मूल बीएआईसीआई के लिए प्राथमिक भाषा एक सीखने की भाषा है, जिसमें से कुछ और पर स्प्रिंगबोर्ड करना है।


1

निश्चित रूप से एक नेक प्रयास, लेकिन मुझे लगता है कि आपने अपनी प्राथमिकताएं उलट दी हैं।

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

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

अंत में, यह विचार करने में मददगार हो सकता है कि आप आंतरिक या बाहरी डीएसएल चाहते हैं


0

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


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

0

कई विशेषताएं हैं जिन्हें जोड़ा या बढ़ाया जा सकता है यदि पहले से मौजूद हैं, लेकिन ...

... बेसिक-जैसी प्रोग्रामिंग लैंग्वेज, स्क्रिप्ट लैंग्वेज से काफी मिलती-जुलती हैं, और एक फीचर जो कई बार छूट जाता है या बाद में शामिल हो जाता है, वह नाम स्थान या मॉड्यूल था।

सी, सी ++, पीएचपी, विज़ुअल बेसिक, बिना मॉड्यूल / नामस्थान के शुरू किया, और जहां बाद में जोड़ा गया।

अगला सबरूटीन्स हो सकता है (ऐसी प्रक्रियाएँ या फ़ंक्शंस जो मान नहीं लौटाती हैं), और फ़ंक्शंस (सबरूटीन जो एक विशेष मान लौटाते हैं)।


0

समझें कि कुछ जटिल चीजें कैसे की जाती हैं (कैसे स्कैनिंग, पार्सिंग, व्याख्या करना और संकलन किया जाता है)

कंपाइलरों को समझने के लिए संसाधनों पर ढेर अतिप्रवाह साइट पर एक अच्छा सवाल है । आप मेरे कम्पाइलर्स क्लास पेज पर भी नज़र डाल सकते हैं ।

जब मैं अपनी भाषा पर बुनियादी निर्माणों को जोड़ रहा हूं - तो मुझे कैसे शाखा देना चाहिए?

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

  1. व्याकरण को संशोधित करें ताकि आप उन प्रमुख शब्दों को पार्स कर सकें। परीक्षा।
  2. प्रतीक तालिका बनाएं (या अपने मौजूदा में जोड़ें) ताकि आप चर नाम और अन्य गुणों के साथ डेटा प्रकार शामिल कर सकें। फिर डिबग स्विच बनाएं ताकि आप इसका परीक्षण कर सकें और प्रतीक तालिका देख सकें।
  3. MsIL को कोड जनरेशन से पहले या व्याख्या के दौरान संगत प्रकारों की जाँच करें। सभी प्रकार के लिए प्रत्येक निष्पादन मोड में त्रुटि और गैर-त्रुटि मामलों का परीक्षण करें।

अगर यह अच्छी तरह से हो जाता है, तो मैं गुंजाइश पर काम करने का सुझाव देता हूं (स्थानीय उप-रूटीन बनाम वैश्विक)। मुझे पता है अगर तुम उस पर कुछ सलाह चाहते हैं।

सौभाग्य। और आनंद लो!

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