क्योंकि आप किसी प्रकार के आंतरिक छद्म कोड या तालिकाओं/डेटा संरचनाओं का उपयोग करना चाहते हैं।
a = b + c;
आपको लगता है कि लेने के लिए और यह एक
load b
load c
add b + c
store a
एक उदाहरण है, कई समाधान के रूप में
में तोड़ चाहेगा: उदाहरण के लिए आप कोड के कुछ लाइन है। कुछ कारणों से किसी विशेष लक्ष्य के लिए सीधे असेंबली जाने की तुलना में आंतरिक भाषा शायद बेहतर है। आंतरिक भाषा उम्मीद है कि यदि आपके पास अनुकूलक है तो अनुकूलित किया जा सकता है, और यदि आप विभिन्न प्रोसेसर को लक्षित करना चाहते हैं तो एकाधिक लक्ष्यों पर उपयोग करने के लिए पर्याप्त सामान्य है।
मुझे इसके बारे में पर्याप्त जानकारी नहीं है, लेकिन मुझे लगता है कि आपके पास आम तौर पर इस्तेमाल किए जाने वाले पार्सर्स बाइसन/फ्लेक्स भी हैं, जो आपको किसी प्रकार के इंटरमीडिएट कोड/निर्देश सेट में उबालते हैं और फिर आप इसके लिए बैकएंड लिखते हैं।
आपको यह भी लाभ होता है कि उदाहरण के लिए आप बैकएंड को प्रभावित किए बिना सी और सी ++ और अन्य भाषा फ्रंट एंड कर सकते हैं।
आप संकलक को तार्किक मॉड्यूल ब्लॉक में तोड़ने से भी लाभ उठाते हैं, आप पीछे के अंत से स्वतंत्र रूप से फ्रंट एंड को विकसित और परीक्षण कर सकते हैं। उदाहरण के लिए llvm, इंटरमीडिएट भाषा के निर्यात और आयात के लिए अनुमति देता है, यदि आप वाकई वास्तव में मध्यवर्ती भाषा का उपयोग करके कोड लिखना चाहते हैं और बैकएंड पर कई लक्ष्यों का लाभ प्राप्त कर सकते हैं।
स्रोत
2012-03-19 05:40:20
क्या आप कृपया मुझे बता सकते हैं कि यह एम + एन कंपाइलर्स कैसा है? मुझे लगता है कि हमारे पास लक्ष्य मशीन कोड में कनवर्ट करने के लिए आईसीजी और एन कोड जेनरेटर में कनवर्ट करने के लिए एम फ्रंट एंड है। क्या आप प्रत्येक फ्रंट एंड और कंपाइलर के रूप में बैक एंड पर विचार कर रहे हैं? – Zephyr
@ ज़ेफिर, एफई/बीई संयोजन के बिना हमें इतने सारे क्रमिक क्रम की आवश्यकता होगी जो अनावश्यक/अनावश्यक है। –
@Zephyr हां, एक फ्रंट एंड/बैक एंड संयोजन एक कंपाइलर है। निश्चित रूप से यह स्पष्ट है? – EJP