26

मैं अपने ही भाषा अब (जाहिरा तौर पर शिक्षण अनुभव के लिए) और इस तरह की जरूरत के रूप में अपेक्षाकृत पारसर्स के निर्माण पर आधारित होने के लिए थोड़ी देर के लिए लेखन के साथ चारों ओर खेलने के लिए चाहता था, दुभाषिए, और कंपाइलर्स। तो:लर्निंग रिसोर्सेज, और संकलनकर्ता

  • क्या किसी को पार्सर्स, दुभाषिए और कंपाइलर्स बनाने पर किसी भी अच्छे संसाधन के बारे में पता है?

संपादित करें: मैं संकलक संकलक/ऐसे लेक्स, Yacc और बाइसन के रूप में पार्सर compilers के लिए नहीं देख रहा हूँ ...

+1

संभवतः डुप्लिकेट [एक कंपाइलर लिखना सीखना] (http: // stackoverflow।कॉम/प्रश्न/1669/लर्निंग-टू-राइट-ए-कंपाइलर) – nawfal

उत्तर

7

Aho के "ड्रैगन पुस्तक" मानक संदर्भ है, लेकिन एक और अच्छा विकल्प एंड्रयू अपेल के Modern Compiler Implementation in Java (भी ML और C में उपलब्ध जायके) है। यह आप कदम-दर-कदम एक संकलक/दुभाषिया के लिए आवश्यक घटकों के बारे में के माध्यम से चलता है और उपयोगी स्रोत कोड का एक बहुत प्रदान करता है।

+0

+1, उनका स्वामित्व, अच्छी किताबें। –

1

उत्तर: लेक्स, याक, जंगली भैंसों

तुम्हारा मतलब आप उन्हें करने के लिए या कि आपको उनका उपयोग में कोई दिलचस्पी नहीं कर रहे हैं संकेत की जरूरत नहीं है है? मैं हाथ से एक लेजर या पार्सर लिखने की सिफारिश नहीं करता हूं।

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

+0

एस/हार्ड/हार्ड और मजेदार/जी –

+0

[@ क्रिस क्रॉवे] (http://stackoverflow.com/questions/41785/learning-resources-on-parsers-interpreters-and-compilers#41805) चूंकि एक प्राथमिक कारण इस विषय को देखना इस बारे में जानना है, मैं जमीन से इस तरह कुछ बनाने के लिए और अधिक देख रहा हूं। मुझे कुछ _compiler-compilers_ आदि के बारे में पता है और मैं शायद यह देखता हूं कि उन्हें कैसे कार्यान्वित किया जाता है, लेकिन इसके अलावा मैं संसाधनों को चाहता हूं जो मुझे बेहतर ढंग से समझने में मदद करेंगे कि कैसे पार्सर्स, दुभाषिया, और कंपाइलर्स काम करते हैं और कैसे कार्यान्वित करें उन्हें। – akdom

7

स्टीव येग (Rich Programmer Food) द्वारा इस उच्च मनोरंजक ब्लॉग पोस्ट तुम सब कुछ नहीं कहेंगे आप जानना चाहते हैं के बारे में कैसे एक संकलक का निर्माण करने के (हालांकि यह अच्छा अंदाज़ा भी पर्याप्त मात्रा में शामिल नहीं है), लेकिन यह करता है का कारण बताते हुए आप compliers को समझना चाहते हैं की एक महान काम।

हेक, उस पोस्ट ने मुझे लगभग कंपाइलर्स का अध्ययन शुरू करने के लिए मिल गया, और मेरे पास पूर्णकालिक नौकरी है, घर पर 3 साल पुराना है, और औसतन प्रति दिन लगभग -1.5 मुफ्त घंटे है।

2

मैं Compiler Design in C आप दुर्भाग्य से एक का इस्तेमाल किया पुस्तक साइट में मिल करने के लिए होगा जो सलाह देते हैं। किताब के साथ ही वास्तविक समस्या यह है कि इसे वापस लिखा गया था जब संकलन की गति एक महत्वपूर्ण कारक तो संकलक सी में लिखा है कि एक कम स्तर की भाषा है कि कभी कभी कार्यान्वयन सिद्धांत कार्यान्वयन कोड के नीचे दबे है काफी है किया गया है।

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

2

मैंने हाल ही में Programming Language Processors in Java पढ़ा है और यह आपको मूल अवधारणाओं के साथ शुरू करने की सलाह देगा और फिर वैकल्पिक दृष्टिकोणों की चर्चा के साथ कोड पीढ़ी समेत एक पुनरावर्ती-मूल संकलक के कार्यान्वयन के माध्यम से आपको ले जाएगा। हालांकि मैंने इस धागे में अन्य सुझाई गई किताबें नहीं पढ़ी हैं, इसलिए उन लोगों के साथ तुलना नहीं कर सकते हैं। जावा भाग में मत डालें, अगर आप जावा को नहीं जानते हैं, क्योंकि अवधारणाएं और उनके कार्यान्वयन अच्छी तरह से समझाए गए हैं कि आपको जावा की विस्तृत समझ की आवश्यकता के बिना जिस्ट मिल जाए।

+0

मुझे लगता है कि यह पुस्तक स्टार्टर के लिए ड्रैगन पुस्तक की तुलना में काफी बेहतर है। अत्यधिक सिफारिशित। –

1

बस मामले में आप:

  • कुछ जल्दी निर्माण करने के लिए है, तो गहराई में जाने
  • एक अंतर्निहित मंच
पर नेट उपयोग करने के साथ ठीक कर रहे हैं
  • खेलने का मौका तरह तैयार है

    ... तो मैं आपको माइक्रोसॉफ्ट की डायनामिक लैंग्वेज रनटाइम की जांच करने की सलाह दूंगा, जो पूरे डायनामिक सिल्वरलाइट एसडीके के अंदर स्रोत कोड के रूप में प्रदान किया जाता है।

    http://www.codeplex.com/sdlsdk

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

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

    किसी भी मामले में, किसी अन्य भाषा से सबसे अच्छा भाग्य!

  • 3

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

    मुझे कक्षा नोट्स रिकर्सिव-वंश पार्सर्स को समझाने के लिए बहुत उपयोगी पाया गया।

    3

    मुझे "Let's build a compiler" मिला है - जैक क्रेन्शॉ द्वारा ट्यूटोरियल, अनुसरण करने और समझने में बहुत आसान है। जैक ग्राउंड अप से पास्कल के लिए एक कंपाइलर बनाता है, जिसमें प्रत्येक चरण के बहुत विस्तृत स्पष्टीकरण होते हैं।

    0

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

    9

    सबसे अच्छा कागज मैंने कभी compilers पर पढ़ा दिनांकित "मेटा द्वितीय एक वाक्य रचना उन्मुख संकलक लेखन भाषा" वैल Schorre कर रहा है। (http://doi.acm.org/10.1145/800257.808896)

    10 पृष्ठों में, वह आप कैसे एक astoundingly सरल लेकिन बहुत प्रभावी संकलक संकलक निर्माण करने के लिए पता चलता है, प्रदान करता है आप संकलक संकलक व्याकरण के साथ साथ और के साथ हाथ करने के लिए पर्याप्त विवरण प्रदान करता है इसे दोपहर में लागू करें (एक आश्चर्यजनक वैचारिक क्षण जब आप महसूस करते हैं कि यह कैसे रिकर्स करता है), और केवल grins के लिए ALGOL जैसी भाषा लागू करता है। पेपर एक पूर्ण गैस है और वास्तव में को कंपाइलर तकनीक के साथ काम करने वाले किसी भी व्यक्ति के लिए पढ़ने की आवश्यकता होनी चाहिए।

    पेपर के आधार पर मेटाकोम्पिलिंग पर एक महान ट्यूटोरियल के साथ खेलने का एक लिंक यहां दिया गया है। http://www.bayfronttechnologies.com/mc_tutorial.html