अधिक प्रोग्रामिंग ज्ञान के लिए मेरी प्यारी प्यास बुझाने के अपने सतत प्रयास में मैंने बाइटकोड में संकलित करने वाली सरल प्रोग्रामिंग भाषा (कम से कम अभी तक) लिखने का प्रयास करने के विचार के साथ आ गया है। समस्या यह है कि मैं भाषा डिजाइन के बारे में पहली बात नहीं जानता। क्या किसी को पार्सर बनाने के लिए एक पद्धति पर कोई सलाह है और प्रत्येक भाषा में मूलभूत सुविधाओं का क्या होना चाहिए? भाषा डिजाइन के लिए आप किस पाठ की सिफारिश करेंगे? मुझे किस स्तर के लिए शूटिंग करनी चाहिए? क्या यह एक अवास्तविक है कि किसी एक इनलाइन बाइटकोड को इनलाइन एंबलर की अनुमति देने वाले जीसीसी के समान तरीके से एक सुविधा को शामिल करने में सक्षम होने की उम्मीद है? मैं मुख्य रूप से सी और जावा में कोड देख रहा हूं जो संकलक लेखन के लिए बेहतर होगा?एक साधारण प्रोग्रामिंग भाषा को डिजाइन करने के लिए पद्धतियां
उत्तर
बहुत सारे तरीके हैं ...
आप ढेर भाषाओं और आगे की जांच कर सकता है। जब यह अन्य भाषाओं को डिजाइन करने की बात आती है तो यह बहुत उपयोगी नहीं है, लेकिन ऐसा कुछ है जो बहुत जल्दी किया जा सकता है।
आप कार्यात्मक भाषाओं में देख सकते हैं। उनमें से ज्यादातर कुछ सरल अवधारणाओं पर आधारित हैं, और सरल पार्सिंग है। और, फिर भी, वे बहुत शक्तिशाली हैं।
और फिर, पारंपरिक भाषाएं। वे सबसे कठिन हैं। आपको पार्सिंग विश्लेषकों, पार्सर्स, एलएएलआर व्याकरण, एलएल व्याकरण, ईबीएनएफ और नियमित भाषाएं सिर्फ पार्सिंग को पाने के लिए सीखने की आवश्यकता होगी।
बाइटकोड को लक्षित करना सिर्फ एक अच्छा विचार नहीं है - अन्यथा करना सीखना अभ्यास में केवल पागल और अधिक बेकार है।
अपने आप को एक पक्ष बनाओ, और संकलक के बारे में किताबें और ट्यूटोरियल देखें।
या तो सी या जावा करेगा। जावा का शायद एक फायदा है, क्योंकि ऑब्जेक्ट ओरिएंटेशन इस प्रकार के कार्य के लिए एक अच्छा मैच है। मेरी व्यक्तिगत सिफारिश स्कैला है। इस तरह की चीज करने के लिए यह एक अच्छी भाषा है, और यह आपको भाषा डिजाइन के बारे में दिलचस्प बातें सिखाएगी।
* "बाइटकोड को लक्षित करना सिर्फ एक अच्छा विचार नहीं है" * विरोध के रूप में एक वास्तविक मशीन को लक्षित करने के लिए (उदाहरण के लिएx86), एक दुभाषिया लिखना, या कुछ और? विषय पर, एक कंपाइलर लिखना जो एक "आदर्श" आभासी मशीन को लक्षित करता है (जैसा कि एक सीपीयू के विपरीत है जहां आपको रजिस्टर आवंटन एट अल के बारे में चिंता करना है) एक दुभाषिया लिखने से काफी कठिन होता है? मुझे लगता है कि कोई एक फ्लैट बाइट स्ट्रिंग के बजाय पेड़ को संकलित करके संकलन को काफी आसान बना सकता है, लेकिन मैंने इसे पहले कभी नहीं किया है, और मैं जानना चाहता हूं कि अन्य लोगों को इसके बारे में क्या कहना है। –
@ जॉय वास्तव में एक वास्तविक मशीन को लक्षित करने के विरोध में। यहां तक कि मशीन कोड उत्पन्न करने वाले कंपाइलर्स अक्सर मध्यस्थ बाइटकोड आउटपुट उत्पन्न करते हैं (हालांकि उच्च अंत कंपाइलर संकलन गति और उपलब्ध अनुकूलन में अधिकतम लाभ के लिए ऐसा करने से बच सकते हैं)। एक दुभाषिया लिखना आसान है, वास्तव में, खासकर यदि आप गतिशील भाषा लिखना चुनते हैं। एक पेड़ में संकलन के लिए, एक पेड़ पार्सिंग का _output_ है, इसलिए यह निश्चित रूप से आसान है - हालांकि वास्तव में इतना कुछ नहीं। –
ओह, मैं आपकी सजा से उलझन में आया (जैसा कि आपने कहा था कि लक्ष्यीकरण बाइटकोड पागल और बेकार है, लेकिन आपने विपरीत कहा)। इसके अलावा, मैं बुनियादी पार्सर आउटपुट से अलग निष्पादन के लिए ट्यून किए गए पेड़ की रेखाओं के साथ और बात कर रहा था (हालांकि सरल सेटिंग्स में, वे काफी समान संरचना हो सकते हैं)। –
आप पहले a book on compilers पढ़ना चाहेंगे।
वास्तव में समझ क्या हो रहा है के लिए, आप की संभावना सी
में अपने कोड लिखने के लिएजावा एक बुरा विकल्प है यदि आप इस तरह के Jython के रूप में एक व्याख्या की भाषा में लिखने के लिए चाहता था, नहीं होगा चाहते हैं। लेकिन बाद से यह लगता है कि आप मशीन कोड के लिए नीचे संकलित करने के लिए चाहते हैं, यह सी
मेंआसान हो सकता है मैं निम्नलिखित किताबें पढ़ने की सलाह देते हैं:
यह आपको दे देंगे कस्टम भाषाओं के लिए पार्सर्स, लेक्सर्स और कंपाइलर्स बनाने के लिए टूल और तकनीकें।
- 1. ग्राफ डेटाबेस डिजाइन पद्धतियां
- 2. एक्सेल प्रोग्रामिंग पद्धतियां
- 3. मैं एक साधारण स्टैक-आधारित प्रोग्रामिंग भाषा को कार्यान्वित करने के बारे में कैसे जाउंगा
- 4. प्रोग्रामिंग भाषा डिजाइन पर अच्छे संसाधन?
- 5. एक आवेदन डिजाइन करने के लिए DDD (डोमेन संचालित डिजाइन) डीसीआई गठबंधन करने के लिए कैसे
- 6. मानदंड निर्धारित करने के लिए अगर यह एक प्रोग्रामिंग भाषा
- 7. एक साधारण चैट एप्लिकेशन के लिए उपयुक्त डिजाइन पैटर्न
- 8. सी प्रोग्रामिंग भाषा के लिए यूएमएल
- 9. एक प्रोग्रामिंग भाषा संकलन समय को कम करने के लिए कैसे?
- 10. सी प्रोग्रामिंग भाषा को जीसीसी
- 11. एक साधारण पटकथा भाषा लिखने के लिए ट्यूटोरियल या परिचय?
- 12. माइस्क्ल - एक साधारण डेटाबेस डिजाइन प्रश्न
- 13. एकाधिक भाषा वेबसाइट के लिए डिजाइन पैटर्न?
- 14. कार्यात्मक प्रोग्रामिंग भाषा आत्मनिरीक्षण
- 15. क्या "प्रोग्रामिंग" नीचे एक प्रोग्रामिंग भाषा है?
- 16. आप एक साधारण प्रोग्रामिंग भाषा लिखने के बारे में कैसे जाएंगे?
- 17. प्रोग्रामिंग भाषा?
- 18. आईओ फ्रेमवर्क शुरू करने के लिए आईओ (प्रोग्रामिंग भाषा)
- 19. गो प्रोग्रामिंग भाषा के लिए PostgreSQL ड्राइवर
- 20. एक दृश्य प्रोग्रामिंग भाषा बनाने के लिए प्लेटफार्म
- 21. कार्यात्मक प्रोग्रामिंग + डोमेन-संचालित डिजाइन
- 22. एक कार्यात्मक भाषा के लिए एक दुभाषिया डिजाइन करने में मुख्य मुद्दे क्या हैं?
- 23. एक कार्यात्मक प्रतिक्रियाशील प्रोग्रामिंग भाषा के लिए विशिष्टता
- 24. एक साधारण दुभाषिया के साथ प्रयोग करने के लिए एक सरल कचरा संग्रह एल्गोरिदम क्या है?
- 25. वितरित संदेश को एल्गोरिदम पास करने के लिए चुनने के लिए प्रोग्रामिंग भाषा
- 26. प्रोग्रामिंग एक साधारण आईआरसी (इंटरनेट-रिले-चैट) क्लाइंट
- 27. यूनिकोड आधारित प्रोग्रामिंग भाषा
- 28. निर्देशित ग्राफों को डिजाइन करने के लिए ओपन सोर्स लाइब्रेरी
- 29. उदात्त सी प्रोग्रामिंग भाषा
- 30. मैं कौन सी कार्यात्मक प्रोग्रामिंग भाषा को पहली कार्यात्मक प्रोग्रामिंग भाषा के रूप में चुनना चाहिए?
कई अन्य लोगों के बीच http://stackoverflow.com/questions/479013/requirements-for-compiler-design/479048 का डुप्पी। इसके अलावा, आप बहुत सारे प्रश्न पूछ रहे हैं - एक समय में एक अच्छा नियम है। –
और यह http://stackoverflow.com/questions/1669/learning-to-write-a-compiler विषय क्षेत्र पर निश्चित SO उत्तर है। –
ठीक है मुझे खेद है कि मैंने नहीं देखा कि यह एक डुप्लिकेट था, इसे सिर्फ डुप्लिकेट के रूप में बंद किया जाना चाहिए या क्या मुझे प्रश्न हटा देना चाहिए? –