2009-12-18 3 views
14

मैंने रूबी में अपनी अगली परियोजना के रूप में एक छोटा दुभाषिया लिखने का फैसला किया है। सफल होने के लिए मुझे किस ज्ञान/कौशल की आवश्यकता होगी?
मैंने अभी तक व्याख्या करने के लिए भाषा पर फैसला नहीं किया है, लेकिन मुझे ऐसा कुछ ढूंढ रहा है जो खिलौना भाषा नहीं है, लेकिन इसके लिए एक दुभाषिया लिखना अपेक्षाकृत आसान होगा। अग्रिम धन्यवाद।एक दुभाषिया कैसे लिखें?

+0

हुह? अगर भाषा पर फैसला नहीं किया गया है, तो आप कैसे जान सकते हैं? कुछ पुस्तकालयों का उपयोग करने के लिए भी व्याख्या करना बहुत आसान हो सकता है ... –

+0

मुझे लगता है कि इसके विपरीत लिस्प में रुबी दुभाषिया लिखना बहुत आसान है। – Svante

+0

स्वेंट, मैं इसके बारे में इतना निश्चित नहीं हूं। –

उत्तर

29

तुम सीखना होगा कम से कम:

  • शाब्दिक विश्लेषण
  • को पार्स (समूह संरचना में एक साथ टोकन)
  • सार वाक्य रचना के पेड़ (एक डेटा में कार्यक्रम संरचना का प्रतिनिधित्व (टोकन में पात्रों समूहीकरण) संरचना)
  • डेटा प्रतिनिधित्व (मान लीजिए कि आपकी भाषा में चर होंगे)
  • एक मूल्यांकन लूप जो आपके प्रोग्राम को चलाता है

इन विषयों में से कुछ के लिए एक उत्कृष्ट परिचय प्रारंभिक पाठ Structure and Interpretation of Computer Programs में पाया जा सकता है। उस पुस्तक में उपयोग की जाने वाली भाषा योजना है, जो एक मजबूत, अच्छी तरह से निर्दिष्ट भाषा है जो आदर्श रूप से आपके पहले दुभाषिया कार्यान्वयन के लिए अनुकूल है। अत्यधिक सिफारिशित।

+0

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

+2

उस प्रश्न का उत्तर कई कारकों पर निर्भर करता है, जिनमें से सबसे महत्वपूर्ण हैं: (ए) कार्यान्वयन करने वाले व्यक्ति का अनुभव स्तर, और (बी) व्याख्या करने के लिए भाषा की पसंद। इसके अलावा शायद (सी) कार्यान्वयन भाषा की पसंद। एक अनुमानित अनुमान के रूप में, एक मध्यवर्ती प्रोग्रामर तकनीक सीखने के लिए, मैं समर्पित काम के कुछ हफ्तों कह सकता हूं। –

1

यह इतना कठिन नहीं है। यहां एक LISP interpreter in ruby है और स्रोत इतना छोटा है कि आपको इसे कॉपी/पेस्ट करना होगा। लेकिन क्या आप अब एलआईएसपी सीखेंगे? Hehe।

5

मैं अभी तक व्याख्या करने के लिए भाषा पर तय नहीं किया है, लेकिन मैं कुछ है कि एक खिलौना भाषा नहीं है के लिए देख रहा हूँ, लेकिन अपेक्षाकृत के लिए एक दुभाषिया लिखने के लिए आसान होगा। अग्रिम में धन्यवाद।

योजना या क्लोजर जैसी लिस्प की कुछ बोली का प्रयास करें। (अब एक विचार है: क्लोजर-इन-रूबी, जो रुबी के साथ-साथ क्लोजर के साथ एकीकृत करता है, जावा के साथ करता है।)

लिस्प के साथ, सिंटैक्स की मूर्खता के साथ परेशान करने की कोई आवश्यकता नहीं है, क्योंकि लिस्प के वाक्यविन्यास बहुत करीब है अमूर्त वाक्यविन्यास पेड़।

+1

क्लोरर एक भाषा की तरह लगता है स्कूबी डू खोदना होगा। – FMc

+0

यह किया गया है http://www.springerlink.com/content/q3n77q7172831288/ और http://onestepback.org/index.cgi/Tech/Ruby/LispInRuby.red –

2

This SICP chapter दिखाता है कि लिस्प में एक लिस्प दुभाषिया कैसे लिखना है (एक मेटासिर्क्यूलर मूल्यांकनकर्ता)। मेरी राय में यह शुरू करने के लिए सबसे अच्छी जगह है। इसके बाद आप लिस्प के लिए उन्नत दुभाषियों और कंपाइलर्स को लिखना सीखने के लिए Lisp in Small Pieces पर जा सकते हैं। लिस्प (भाषा में स्वयं!) जैसी भाषा को लागू करने का लाभ यह है कि आपको लेक्सिकल विश्लेषक, पार्सर, एएसटी, डेटा/प्रोग्राम प्रतिनिधित्व और आरईपीएल मुफ्त में मिलता है। आप अपनी महान भाषा काम करने के काम पर ध्यान केंद्रित कर सकते हैं!

2

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

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

यदि आप मेरी (शाब्दिक रूप से दो दिन पुरानी) एलआईएसपी के जावा कार्यान्वयन को देखना चाहते हैं, तो mylisp.googlecode.com देखें। मैं अभी भी इस पर काम कर रहा हूं लेकिन यह अविश्वसनीय है कि मौजूदा सामानों को काम करने में कितना समय लगेगा।

1

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

ज्ञान आपको चाहिए?

  • Tokenizing (कुछ में पात्रों में से है कि बहुत बड़ा हिस्सा मोड़ और अधिक कुशलता से पठनीय, प्रभावी रूप से इसे बंटवारे 'शब्द' में)
  • पार्सिंग (टोकन से अधिक जा रहा है और इसमें से एक डेटा संरचना के निर्माण)
  • की व्याख्या करना (डेटा संरचना पर लूपिंग और प्रत्येक कमांड को निष्पादित करना)

और उस अंतिम व्यक्ति के लिए आपको चर के चारों ओर रखने के लिए भी एक तरीका चाहिए। आम तौर पर आप केवल एक "स्टैक" लागू करेंगे, डेटा का एक बड़ा ब्लॉक जहां आप अंत में एक क्षेत्र को चिह्नित कर सकते हैं।

1

यह लिस्प में नहीं लागू किया है, लेकिन जब मैं हास्केल के साथ शुरू किया गया था (हालांकि मैं कहीं भी 48 घंटे के बाद इसे पूरा करने के पास नहीं मिला; YMMV) मैं Write Yourself A Scheme in 48 Hours पाया एक बहुत ही उपयोगी दस्तावेज होने के लिए। यह आपको सामान्य रूप से दुभाषियों में बहुत अंतर्दृष्टि देता है।