अपने साथ एक प्रोग्रामिंग भाषा संकलित करें


10

मैं कंप्यूटर साइंस का छात्र हूं। मैं अपनी खुद की प्रोग्रामिंग भाषा (कुछ निर्देशों के साथ एक मूल भाषा) बनाना चाहता हूं।

मुझे पता है कि एक सिंटैक्टिक एनालाइज़र कैसे करना है, मैंने पहले ही पर्ल में किया था। एक लेख में, मैंने संकलक के बारे में कुछ पढ़ा, एक संकलक अपने आप में किया जाता है।

उदाहरण के लिए C संकलक C. में लिखा गया है। यह कैसे संभव है? मैं अपनी भाषा बना सकता हूं लेकिन मुझे नहीं पता कि मैं इसे कैसे निष्पादित कर सकता हूं? कोई उपाय?

यह वास्तव में एक अच्छा सवाल है और मैं एक ब्लॉग परियोजना लिख ​​सकता हूं।


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

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

जवाबों:


13

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


तो, मैं C का उपयोग करके अपना पहला संकलक बना सकता हूं और अगली बार मैं v1 के साथ अपने संकलक v2 को संकलित करूंगा? लेकिन एक समस्या है, मुझे कैसे पता चल सकता है कि संकलक को कोई समस्या नहीं है? मुझे अपने स्रोत कोड को कोडांतरक में बदलने की आवश्यकता है? या दूसरी बात में?
बैपटिस्टल

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

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

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

हम्म नं मैं इसे पसंद करता हूं: प्रवेश में मेरी भाषा -> मशीन कोड। मैं अपनी भाषा को दूसरे में नहीं बदलना चाहता (पहली बार संकलन के लिए) यह संभव है?
बैप्टिस्टल

2

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

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