2010-11-03 9 views
6

संभावित डुप्लिकेट:
Methodologies for designing a simple programming language
Learning to write a compilerआप एक साधारण प्रोग्रामिंग भाषा लिखने के बारे में कैसे जाएंगे?

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

मैं

लिखें "हैलो वर्ल्ड!"

या थोड़ा और वीबी तरह

लिखें ("नमस्ते दुनिया")

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

+0

के संभावित डुप्लिकेट http://stackoverflow.com/q/1208338/246069 – YWE

+0

की संभावित डुप्लिकेट "इसकी सादगी महत्वाकांक्षी प्रोग्रामर को छोड़ने और प्रोग्रामिंग में रुचि रखने के लिए प्रोत्साहित करेगी।" - आपको हतोत्साहित नहीं करना, लेकिन सरल भाषाएं थोड़े समय के बाद किसी के रास्ते में आती हैं। मैं उन भाषाओं को पसंद करता हूं जो * सरल * हैं, लेकिन बड़े/अधिक परिष्कृत कार्यों (विशेष रूप से, पायथन) के लिए कम नहीं पड़ते हैं। इसके अलावा, क्या आप इनपुट के लिए पूछ रहे हैं कि सिंटैक्स कैसा होना चाहिए, या आप वास्तव में इसका विश्लेषण कैसे करें इस पर संकेत चाहते हैं? – delnan

+0

आप सही हैं। मैंने पिछले साल बेसिक सीखना शुरू किया था और मैंने वास्तव में इसका आनंद लिया था इसलिए अब मैं सी सीखने का प्रयास कर रहा हूं ताकि मैं कुछ गहन प्रोग्रामिंग कर सकूं। मैंने दृश्य मूल भी सीखा। हालांकि, मुझे लगता है कि अगर मैं किसी भी तरह से मूल वाक्यविन्यास को संशोधित कर सकता हूं, तो संभवतः मैं अपने स्वयं के कमांड जोड़ सकता हूं और साथ ही इसे बेसिक का एक और शक्तिशाली संस्करण बना सकता हूं लेकिन एक सरल वाक्यविन्यास के साथ। – RCProgramming

उत्तर

14

यह एक आसान काम नहीं है। भाषा पार्सिंग और कंपाइलर सिद्धांत बहुत भारी विषयों हैं। बहुत ओ 'गणित। आपको यह भी तय करना होगा कि आप किस प्लेटफ़ॉर्म को लक्षित करना चाहते हैं, जो यह भी निर्धारित करेगा कि आपकी भाषा पूरी तरह संकलित है (उदाहरण के लिए सी/सी ++, पास्कल), बाइटकोड (जैसे पायथन, जावा) में संकलित, या रनटाइम पर व्याख्या की गई है (उदाहरण के लिए वीबीस्क्रिप्ट , जावास्क्रिप्ट)। भाषा को स्वयं निर्दिष्ट करने के लिए, Backus-Naur format पर ब्रश करें। - पुराने स्कूल उद्योग मानक

  • लेक्स/Yacc (फ्लेक्स/बाइसन जीएनयू संस्करण हैं):

    आप के साथ मदद करने के लिए, वहाँ कई मजबूत पार्सर जनरेटर वहाँ भी शामिल हैं। सी में एक संकलक विकसित करने के लिए/सी ++

  • ANTLR -, एक अलग दृष्टिकोण सी ++ का उपयोग कर स्वयं भाषा के विनिर्देश की इजाजत दी - यदि आप एक संकलक जावा
  • Boost.Spirit का उपयोग कर बनाने में रुचि रखते हैं।

और कई अन्य। एक तुलना here पाया जा सकता है, जबकि अभी तक एक और सूची पाया जा सकता है here

तुम सच में पूरा सिद्धांत में रुचि रखते हैं, तो आप The Dragon Book की जाँच करना चाहते हैं।

लेकिन मुझे दोहराया जाना चाहिए: यह एक बड़ा विषय है। रास्ते में आपकी मदद करने के लिए कई सारे टूल हैं, लेकिन खरगोश का छेद बहुत गहरा हो जाता है।

+3

यह एक बड़ा विषय है, लेकिन इसमें अधिकतर शामिल नहीं है (कम से कम अधिकांश लोग क्या सोचेंगे के रूप में) गणित। –

+0

इस संपूर्ण उत्तर के लिए बहुत बहुत धन्यवाद। मेरे पास आपके उत्तर के बारे में कुछ प्रश्न हैं। पार्सिंग का मतलब क्या है? बेसिक जैसे भाषा किस श्रेणी में आती है? – RCProgramming

+0

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

2

मुझे लगता है कि इस से गोली मार दी है:

  1. सरल उपयोग करने के लिए।
  2. डिजाइन/कार्यान्वित करने के लिए सरल।
  3. मजबूत अभिव्यक्ति क्षमताओं।

उनमें से 1.9 चुनें।

इनमें से किसी भी की उचित डिग्री प्राप्त करना बहुत संभव है। किसी भी दो को पूरी तरह से करना बहुत कड़ी मेहनत कर रहा है और आपको तीनों पत्तियों को एक गैर-मकान-भूमि में प्राप्त करने की कोशिश कर रहा है जहां आप कोई अच्छा काम नहीं करते हैं।

पेज। मैं # 1 + # 3