संकलक निर्माण का इतिहास

From Vigyanwiki
Revision as of 13:27, 13 May 2023 by alpha>Indicwiki (Created page with "{{Short description|none}} {{Use dmy dates|date=April 2022}} {{History of computing}} कम्प्यूटिंग में, एक कंपाइलर एक ...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

उच्च-स्तरीय प्रोग्रामिंग भाषा में लिखे गए किसी भी प्रोग्राम को निष्पादित करने से पहले ऑब्जेक्ट कोड में अनुवादित किया जाना चाहिए, इसलिए ऐसी भाषा का उपयोग करने वाले सभी प्रोग्रामर एक कंपाइलर या दुभाषिया (कंप्यूटिंग) का उपयोग करते हैं। इस प्रकार, प्रोग्रामर के लिए कंपाइलर बहुत महत्वपूर्ण हैं। एक संकलक में सुधार से निष्पादन योग्य कार्यक्रमों में बड़ी संख्या में सुधार हो सकते हैं।

PQCC | प्रोडक्शन क्वालिटी कंपाइलर-कंपाइलर, 1970 के दशक के अंत में, कंपाइलर संगठन के सिद्धांतों को पेश किया जो आज भी व्यापक रूप से उपयोग किए जाते हैं (उदाहरण के लिए, एक फ्रंट-एंड हैंडलिंग सिंटैक्स और शब्दार्थ और एक बैक-एंड जनरेटिंग मशीन कोड)।

पहला संकलक

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

पहला व्यावहारिक संकलक 1951 में कोराडो बोहम द्वारा अपनी पीएचडी थीसिस के लिए लिखा गया था,[1][2] विश्व में कहीं भी दिए जाने वाले पहले कंप्यूटर विज्ञान डॉक्टरेट में से एक।

पहला कार्यान्वित कंपाइलर ग्रेस हूपर द्वारा लिखा गया था, जिसने कंपाइलर शब्द भी गढ़ा था, रेफरी नाम = wilkes1968 >मौरिस वी. विल्क्स। 1968. कंप्यूटर तब और अब। कम्प्यूटिंग मशीनरी के लिए एसोसिएशन का जर्नल, 15(1):1–7, जनवरी। पी। 3 (संपादक द्वारा जोड़े गए कोष्ठक में एक टिप्पणी), (मुझे नहीं लगता कि कंपाइलर शब्द तब [1953] सामान्य उपयोग में था, हालांकि यह वास्तव में ग्रेस हॉपर द्वारा पेश किया गया था।) </ रेफ>[3] उसके A-0 प्रणाली का जिक्र है जो एक लोडर या लिंकर (कंप्यूटिंग) के रूप में कार्य करता है, न कि एक कंपाइलर की आधुनिक धारणा। आधुनिक अर्थों में पहला ऑटोकोड और कंपाइलर एलिक ग्लेनी द्वारा 1952 में मैनचेस्टर विश्वविद्यालय में मैनचेस्टर मार्क 1 कंप्यूटर के लिए विकसित किया गया था।[4][5] फोरट्रान आईबीएम में जॉन डब्ल्यू बैकस के नेतृत्व वाली टीम ने 1957 में पहला व्यावसायिक रूप से उपलब्ध कंपाइलर पेश किया, जिसे बनाने में 18 व्यक्ति-वर्ष लगे।[6] पहला ALGOL 58 संकलक 1958 के अंत तक Z22 (कंप्यूटर) कंप्यूटर के लिए फ्रेडरिक एल. बाउर, हरमन बॉटनब्रुक, हेंज रूटिशॉसर और क्लाउस सैमल्सन द्वारा पूरा किया गया था। बाउर एट अल। पिछले वर्षों में Sequentielle Formelübersetzung (यानी अनुक्रमिक सूत्र अनुवाद) के लिए संकलक तकनीक पर काम कर रहा था।

1960 तक, एक विस्तारित फोरट्रान संकलक, ALTAC, फ़िल्को 2000 पर उपलब्ध था, इसलिए यह संभव है कि 1960 के मध्य में आईबीएम और फिल्को कंप्यूटर आर्किटेक्चर दोनों के लिए एक फोरट्रान प्रोग्राम संकलित किया गया था।[7] पहली ज्ञात प्रदर्शित क्रॉस-प्लेटफॉर्म उच्च-स्तरीय भाषा COBOL थी। दिसंबर 1960 में एक प्रदर्शन में, UNIVAC II और RCA 501 दोनों पर एक COBOL कार्यक्रम संकलित और निष्पादित किया गया था।[3][8]


सेल्फ-होस्टिंग कंपाइलर्स

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

कोराडो बोहम पीएचडी शोध प्रबंध

Corrado Bohm ने 1951 के अपने पीएचडी शोध प्रबंध में उस भाषा को मशीन पर संकलित करने के लिए एक भाषा, एक मशीन और एक अनुवाद विधि विकसित की।[1][2]उन्होंने न केवल एक पूर्ण कम्पाइलर का वर्णन किया बल्कि पहली बार उस कम्पाइलर को अपनी भाषा में परिभाषित भी किया। भाषा अपने आप में रोचक थी, क्योंकि प्रत्येक कथन (इनपुट कथनों, आउटपुट कथनों और नियंत्रण कथनों सहित) एक नियत कार्य (कंप्यूटर विज्ञान) का एक विशेष मामला था।

नेलियाक

नेवी इलेक्ट्रॉनिक्स लेबोरेटरी इंटरनेशनल ALGOL कंपाइलर या NELIAC 1958 में नौसेना इलेक्ट्रॉनिक्स प्रयोगशाला द्वारा विकसित ALGOL 58 प्रोग्रामिंग भाषा बोली एक प्रोग्रामिंग लैंग्वेज बोली और कंपाइलर कार्यान्वयन थी।[9] NELIAC हैरी हस्की के दिमाग की उपज थी - संगणक तंत्र संस्था एसोसिएशन के अध्यक्ष और एक प्रसिद्ध कंप्यूटर वैज्ञानिक (और बाद में निकोलस विर्थ के अकादमिक पर्यवेक्षक) थे, और एनईएल में कम्प्यूटेशनल सेंटर के प्रमुख मौरी हैल्स्टेड द्वारा समर्थित थे। सबसे पहला संस्करण प्रोटोटाइप AN/USQ-17|USQ-17 कंप्यूटर (जिसे काउंटेस कहा जाता है) पर प्रयोगशाला में लागू किया गया था। यह दुनिया का पहला सेल्फ-कंपाइलिंग कंपाइलर था - कंपाइलर को पहले असेंबली लैंग्वेज (बूटस्ट्रैप) में सरलीकृत रूप में कोडित किया गया था, फिर अपनी भाषा में फिर से लिखा गया और बूटस्ट्रैप द्वारा संकलित किया गया, और अंत में खुद को फिर से संकलित किया गया। बूटस्ट्रैप अप्रचलित।

लिस्प

1962 में मैसाचुसेट्स की तकनीकी संस्था में टिम हार्ट और माइक लेविन द्वारा लिस्प प्रोग्रामिंग भाषा के लिए एक और शुरुआती सेल्फ-होस्टिंग (कंपाइलर) | सेल्फ-होस्टिंग कंपाइलर लिखा गया था।[10] उन्होंने लिस्प में लिस्प कंपाइलर लिखा, मौजूदा लिस्प दुभाषिया के अंदर इसका परीक्षण किया। एक बार जब उन्होंने कंपाइलर को उस बिंदु तक सुधार लिया था जहां वह अपने स्वयं के स्रोत कोड को संकलित कर सकता था, तो यह स्व-होस्टिंग था।[11]

कंपाइलर जैसा कि यह मानक कंपाइलर टेप पर मौजूद है, एक मशीनी भाषा का प्रोग्राम है, जिसे कंपाइलर की एस-अभिव्यक्ति डेफिनिशन को इंटरप्रेटर के माध्यम से खुद पर काम करके प्राप्त किया गया था। (एआई मेमो 39)[11]

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

फोर्थ

फोर्थ (प्रोग्रामिंग भाषा) सेल्फ-होस्टिंग कंपाइलर का एक उदाहरण है। द फोर्थ (प्रोग्रामिंग लैंग्वेज) # सेल्फ-कंपाइलेशन और फोर्थ के क्रॉस कंपाइलेशन फीचर मेटासंकलन और मेटाकंपाइलर के पर्यायवाची हैं।[12][13] लिस्प (प्रोग्रामिंग भाषा) की तरह, फोर्थ एक एक्स्टेंसिबल प्रोग्रामिंग लैंग्वेज है। यह फोर्थ और लिस्प की एक्स्टेंसिबल प्रोग्रामिंग लैंग्वेज विशेषताएं हैं जो उन्हें स्वयं के नए संस्करण उत्पन्न करने या खुद को नए वातावरण में पोर्ट करने में सक्षम बनाती हैं।

संदर्भ-मुक्त व्याकरण और पारसर्स

एक पदच्छेद एक कंपाइलर का एक महत्वपूर्ण घटक है। यह आंतरिक प्रतिनिधित्व के कुछ रूप बनाने के लिए कंप्यूटर प्रोग्रामिंग भाषा के स्रोत कोड को पार्स करता है। प्रोग्रामिंग भाषाओं को एक संदर्भ-मुक्त व्याकरण के संदर्भ में निर्दिष्ट किया जाता है क्योंकि उनके लिए तेज और कुशल पार्सर लिखे जा सकते हैं। पार्सर्स को हाथ से लिखा जा सकता है या पार्सर जनरेटर द्वारा उत्पन्न किया जा सकता है। एक संदर्भ-मुक्त व्याकरण यह वर्णन करने के लिए एक सरल और सटीक तंत्र प्रदान करता है कि छोटे ब्लॉक (प्रोग्रामिंग) से प्रोग्रामिंग भाषा का निर्माण कैसे किया जाता है। सन्दर्भ-मुक्त व्याकरण की औपचारिकता 1950 के दशक के मध्य में नोम चौमस्की द्वारा विकसित की गई थी।[14] ALGOL प्रोजेक्ट (1957-1960) द्वारा ब्लॉक संरचना को कंप्यूटर प्रोग्रामिंग भाषाओं में पेश किया गया था, जिसके परिणामस्वरूप, परिणामी ALGOL सिंटैक्स का वर्णन करने के लिए एक संदर्भ-मुक्त व्याकरण भी शामिल था।

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

एलआर पार्सिंग

एलआर पार्सर (बाएं से दाएं) का आविष्कार डोनाल्ड नुथ ने 1965 में एक पेपर ऑन द ट्रांसलेशन ऑफ लैंग्वेजेस फ्रॉम लेफ्ट टू राइट में किया था। एक एलआर पार्सर एक पार्सर है जो इनपुट को बाएं से दाएं पढ़ता है (जैसा कि यह दृश्यमान रूप से प्रदर्शित होता है) और सबसे सही व्युत्पन्न उत्पन्न करता है। शब्द LR(k) पार्सर का भी उपयोग किया जाता है, जहां k बिना उपयोग किए गए पार्सिंग#लुकाहेड इनपुट प्रतीकों की संख्या को संदर्भित करता है जिनका उपयोग पार्सिंग निर्णय लेने में किया जाता है।

नुथ ने साबित किया कि LR(k) व्याकरण को एक निष्पादन समय के साथ पार्स किया जा सकता है जो अनिवार्य रूप से कार्यक्रम की लंबाई के अनुपात में होता है, और यह कि प्रत्येक LR(k) व्याकरण k > 1 के लिए हो सकता है यंत्रवत् एक ही भाषा के लिए एक एलआर (1) व्याकरण में तब्दील। दूसरे शब्दों में, किसी भी नियतात्मक संदर्भ-मुक्त व्याकरण (DCFG) को पार्स करने के लिए केवल एक प्रतीक का होना आवश्यक है।[15] कोरेन्जक (1969) सबसे पहले प्रोग्रामिंग भाषाओं के लिए पार्सर दिखाने वाले थे जिन्हें इन तकनीकों का उपयोग करके उत्पादित किया जा सकता था।[16] फ्रैंक डीरेमर ने 1969 में एमआईटी में अपने पीएचडी शोध प्रबंध में प्रकाशित अधिक व्यावहारिक सरल एलआर पार्सर (एसएलआर) और एलएएलआर पार्सर | लुक-फॉरवर्ड एलआर (एलएएलआर) तकनीकों को तैयार किया।[17][18] यह एक महत्वपूर्ण सफलता थी, क्योंकि डोनाल्ड नुथ द्वारा परिभाषित LR(k) अनुवादक, 1960 और 1970 के दशक में कंप्यूटर सिस्टम पर कार्यान्वयन के लिए बहुत बड़े थे।

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

एक पुनरावर्ती चढ़ाई पार्सर तालिकाओं के बजाय पारस्परिक रूप से पुनरावर्ती कार्यों का उपयोग करके एक एलएएलआर पार्सर लागू करता है। इस प्रकार, पार्सर सीधे मेजबान भाषा में पुनरावर्ती वंश के समान एन्कोड किया गया है। डायरेक्ट एन्कोडिंग आमतौर पर एक पार्सर उत्पन्न करता है जो इसके टेबल-संचालित समकक्ष से तेज़ होता है[19] उसी कारण से संकलन व्याख्या से तेज़ है। एक पुनरावर्ती एसेंट पार्सर को संपादित करना (सिद्धांत रूप में) संभव है, जबकि एक सारणीबद्ध कार्यान्वयन औसत मानव के लिए लगभग अपठनीय है।

पुनरावर्ती आरोहण का वर्णन सबसे पहले 1986 में थॉमस पेनेल्लो ने अपने लेख वेरी फास्ट एलआर पार्सिंग में किया था।[19]इस तकनीक की व्याख्या बाद में जी.एच. रॉबर्ट्स[20] 1988 में और साथ ही लेर्मर्स, ऑगस्टिजन, क्रुसेमन अरेट्ज़ के एक लेख में[21] 1992 में सैद्धांतिक कंप्यूटर विज्ञान पत्रिका में।

एलएल पार्सिंग

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

एलएल (के) व्याकरण को एक पुनरावर्ती मूल पार्सर द्वारा पार्स किया जा सकता है जिसे आमतौर पर हाथ से कोडित किया जाता है, हालांकि लक्ष्य द्वितीय जैसे एक नोटेशन का वैकल्पिक रूप से उपयोग किया जा सकता है।

ALGOL के डिजाइन ने पुनरावर्ती अवरोहण की जांच को जन्म दिया, क्योंकि ALGOL भाषा ही पुनरावर्ती है। पुनरावर्ती वंश पार्सर की अवधारणा पर जनवरी 1961 के अंक में ए.ए. ग्राउ और एडगर टी. आयरन्स|एडगर टी. नेड आयरन्स।[22][23] रिचर्ड वेचॉफ और उनके सहयोगियों ने मार्च 1961 में बरोज़ कॉर्पोरेशन ALGOL कंपाइलर में रिकर्सिव डिसेंट को भी लागू किया,[24] दोनों समूहों ने अलग-अलग तरीकों का इस्तेमाल किया लेकिन कम से कम अनौपचारिक संपर्क में थे।[25] एलएल (1) व्याकरण का विचार लुईस और स्टर्न्स (1968) द्वारा पेश किया गया था।[26][27] रिकर्सिव डिसेंट को 1970 के दशक में कंपाइलर निर्माण सिखाने के लिए इस्तेमाल की जाने वाली एक शैक्षिक प्रोग्रामिंग भाषा PL/0 के साथ निकलॉस विर्थ द्वारा लोकप्रिय किया गया था।[28] एलआर पार्सिंग एलएल पार्सिंग की तुलना में भाषाओं की एक बड़ी श्रृंखला को संभाल सकता है, और त्रुटि रिपोर्टिंग में भी बेहतर है (यह विवादित है, संदर्भ आवश्यक है), यानी जब इनपुट जल्द से जल्द व्याकरण के अनुरूप नहीं होता है तो यह सिंटैक्टिक त्रुटियों का पता लगाता है।

अर्ली पार्सर

1970 में, जे अर्ले ने आविष्कार किया जे अर्ली पार्सर के रूप में जाना जाने लगा। अर्ली पार्सर्स आकर्षक हैं क्योंकि वे सभी संदर्भ-मुक्त भाषाओं को यथोचित कुशलता से पार्स कर सकते हैं।[29]


व्याकरण विवरण भाषाएँ

जॉन बैकस ने धातुविज्ञान संबंधी सूत्र प्रस्तावित किए[30][31] नई प्रोग्रामिंग भाषा IAL के सिंटैक्स का वर्णन करने के लिए, जिसे आज ALGOL 58 (1959) के रूप में जाना जाता है। बैकस का काम एमिल पोस्ट द्वारा तैयार की गई पोस्ट कैननिकल प्रणाली पर आधारित था।

ALGOL के और विकास के कारण ALGOL 60; अपनी रिपोर्ट (1963) में, पीटर नौर ने बैकस के नोटेशन बैकस नॉर्मल फॉर्म (बीएनएफ) का नाम दिया, और इस्तेमाल किए गए वर्ण सेट को कम करने के लिए इसे सरल बनाया। हालांकि, डोनाल्ड नुथ ने तर्क दिया कि बीएनएफ को बैकस-नौर फॉर्म के रूप में पढ़ा जाना चाहिए,[32] और यह आमतौर पर स्वीकृत उपयोग बन गया है।

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

पार्सर जेनरेटर

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

उस नाम का उपयोग करने वाला पहला कंपाइलर-कंपाइलर 1960 में टोनी ब्रूकर द्वारा लिखा गया था और एटलस ऑटोकोड कंपाइलर सहित मैनचेस्टर विश्वविद्यालय में एटलस कंप्यूटर (मैनचेस्टर) कंप्यूटर के लिए कंपाइलर बनाने के लिए इस्तेमाल किया गया था। हालाँकि यह आधुनिक कंपाइलर-कंपाइलर से अलग था, और आज शायद इसे एक उच्च अनुकूलन योग्य जेनेरिक कंपाइलर और एक्स्टेंसिबल प्रोग्रामिंग | एक्स्टेंसिबल-सिंटैक्स भाषा के बीच कहीं होने के रूप में वर्णित किया जाएगा। कंपाइलर-कंपाइलर नाम अधिकांश आधुनिक कंपाइलर-कंपाइलर्स की तुलना में ब्रूकर की प्रणाली के लिए कहीं अधिक उपयुक्त था, जिन्हें पार्सर जनरेटर के रूप में अधिक सटीक रूप से वर्णित किया गया है। यह लगभग तय है कि ब्रोकर के काम को याद किए जाने के बजाय Yacc के कारण कंपाइलर-कंपाइलर नाम आम उपयोग में आ गया है।[citation needed]

1960 के दशक की शुरुआत में, टेक्सस उपकरण ्स में रॉबर्ट मैकक्लेर ने TMG (भाषा) नामक एक कंपाइलर-कंपाइलर का आविष्कार किया, जिसका नाम ट्रांसमोग्रिफिकेशन से लिया गया।[33][34][35][36] बाद के वर्षों में TMG कई UNIVAC और IBM मेनफ्रेम कंप्यूटरों को में porting कर रहा था।

मॉलटिक्स प्रोजेक्ट, एमआईटी और बेल लैब्स के बीच एक संयुक्त उद्यम, एक उच्च-स्तरीय भाषा में एक ऑपरेटिंग सिस्टम विकसित करने वाले पहले में से एक था। पीएल/आई को भाषा के रूप में चुना गया था, लेकिन एक बाहरी आपूर्तिकर्ता काम करने वाले कंपाइलर की आपूर्ति नहीं कर सका।[37] मल्टिक्स टीम ने 1964 में अपनी कार्यान्वयन भाषा के रूप में प्रारंभिक PL/I (EPL) के रूप में जानी जाने वाली PL/I की अपनी स्वयं की सबसेट बोली विकसित की। TMG को GE-600 श्रृंखला में पोर्ट किया गया और डगलस मैक्लॉयय, रॉबर्ट मॉरिस (क्रिप्टोग्राफर) द्वारा EPL विकसित करने के लिए उपयोग किया गया। , और दूसरे।

1969 में केन थॉम्पसन द्वारा PDP-7 के लिए यूनिक्स का पहला संस्करण लिखे जाने के कुछ ही समय बाद, डगलस मैक्लरॉय ने नई प्रणाली की पहली उच्च-स्तरीय भाषा बनाई: McClure के TMG का कार्यान्वयन।[38] TMG 1970 में अपने PDP-7 पर सी प्रोग्रामिंग भाषा के लिए कंपाइलर लिखने के लिए केन थॉम्पसन द्वारा इस्तेमाल किया गया कंपाइलर डेफिनिशन टूल भी था। Bबी प्रोग्रामिंग भाषा लैंग्वेज का तत्काल पूर्वज था।

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

एक्सपीएल

XPL PL/I प्रोग्रामिंग भाषा की एक बोली है, जिसका उपयोग कंप्यूटर भाषाओं के लिए संकलक के विकास के लिए किया जाता है। इसे 1967 में विलियम एम. मैककिमैन, जिम हॉर्निंग | जेम्स जे. हॉर्निंग, और डेविड वोर्टमैन | डेविड बी. वोर्टमैन के साथ एक टीम द्वारा स्टैनफोर्ड विश्वविद्यालय और कैलिफोर्निया विश्वविद्यालय, सांता क्रूज़ में डिजाइन और कार्यान्वित किया गया था। इसकी घोषणा पहली बार 1968 में सैन फ्रांसिस्को में पतन संयुक्त कंप्यूटर सम्मेलन में की गई थी।[39][40] XPL में अपेक्षाकृत सरल संकलक-संकलक डब किया गया XPL#ANALYZER, नीचे-ऊपर पार्सिंग|बॉटम-अप कंपाइलर प्रिडेंस पार्सिंग तकनीक जिसे Shift-reduce parser#MSP (मिश्रित रणनीति वरीयता) कहा जाता है, पर आधारित है। XPL को IBM सिस्टम/360 कंप्यूटर पर बरोज़ एल्गोल के माध्यम से बूटस्ट्रैप किया गया था। (टोरंटो विश्वविद्यालय की आंतरिक परियोजनाओं में उपयोग किए गए XPL के कुछ बाद के संस्करणों ने एक SLR(1) पार्सर का उपयोग किया, लेकिन उन कार्यान्वयनों को कभी वितरित नहीं किया गया)।

वाईएसीसी

Yacc एक पार्सर जनरेटर (शिथिल, संकलक-कंपाइलर) है, जिसे लेक्स प्रोग्रामिंग टूल के साथ भ्रमित नहीं होना चाहिए, जो कि Yacc द्वारा पहले चरण के रूप में अक्सर उपयोग किया जाने वाला एक शाब्दिक विश्लेषण है। Yacc को स्टीफन सी. जॉनसन द्वारा AT&T में यूनिक्स ऑपरेटिंग सिस्टम के लिए विकसित किया गया था।[41] नाम अभी तक एक और संकलक संकलक के लिए एक संक्षिप्त नाम है। यह बैकस-नौर फॉर्म के समान एक नोटेशन में लिखे गए व्याकरण के आधार पर एक एलएएलआर (1) कंपाइलर उत्पन्न करता है।

जॉनसन ने 1970 के दशक की शुरुआत में बेल लैब्स में Yacc पर काम किया।[42] वह TMG से परिचित थे और इसका प्रभाव Yacc और C प्रोग्रामिंग लैंग्वेज के डिजाइन में देखा जा सकता है। क्योंकि अधिकांश यूनिक्स प्रणालियों पर Yacc डिफ़ॉल्ट संकलक जनरेटर था, इसे व्यापक रूप से वितरित और उपयोग किया गया था। जीएनयू बाइसन जैसे संजात अभी भी उपयोग में हैं।

Yacc द्वारा उत्पन्न संकलक को एक शाब्दिक विश्लेषक की आवश्यकता होती है। लेक्सिकल एनालाइज़र जनरेटर, जैसे लेक्स प्रोग्रामिंग टूल या फ्लेक्स लेक्सिकल एनालाइजर व्यापक रूप से उपलब्ध हैं। IEEE POSIX P1003.2 मानक Lex और Yacc दोनों के लिए कार्यक्षमता और आवश्यकताओं को परिभाषित करता है।

कोको/आर

कोको/आर एक पार्सर जनरेटर है जो ईबीएनएफ के एक संस्करण में लिखे गए इनपुट व्याकरण से मोडुला-2 (अन्य भाषाओं के लिए प्लग-इन के साथ) में एलएल (1) पार्सर उत्पन्न करता है। यह 1985 में ज्यूरिख (ETHZ) में स्विस फेडरल इंस्टीट्यूट ऑफ टेक्नोलॉजी में हंसपीटर मोसेनबॉक द्वारा विकसित किया गया था।

एएनटीएलआर

एएनटीएलआर एक पार्सर जनरेटर है जो ईबीएनएफ के एक संस्करण में लिखे इनपुट व्याकरण से जावा में एलएल (*) पार्सर्स उत्पन्न करता है। यह 1990 के दशक की शुरुआत में पीसीसीटीएस नामक एक पुराने जनरेटर के उत्तराधिकारी के रूप में सैन फ्रांसिस्को विश्वविद्यालय में टेरेंस पार द्वारा विकसित किया गया था।

मेटाकंपलर

मेटाकंपाइलर पार्सर जेनरेटर से भिन्न होते हैं, इनपुट के रूप में मेटलंगेज # मेटाप्रोग्रामिंग में लिखे गए कंप्यूटर प्रोग्राम को लेते हैं। उनके इनपुट में एम्बेडेड ट्रांसफ़ॉर्म ऑपरेशंस के साथ संयुक्त व्याकरण विश्लेषण सूत्र होते हैं जो अमूर्त सिंटैक्स ट्री का निर्माण करते हैं, या केवल आउटपुट रिफॉर्मेटेड टेक्स्ट स्ट्रिंग्स जो स्टैक मशीन कोड हो सकते हैं।

कई को अपनी स्वयं की धातुभाषा में प्रोग्राम किया जा सकता है, जिससे वे स्वयं को संकलित करने में सक्षम हो जाते हैं, जिससे वे स्व-होस्टिंग एक्स्टेंसिबल लैंग्वेज कंपाइलर बन जाते हैं।

कई मेटाकंपाइलर मेटाकंपलर#श्योरे धातुभाषाओं के काम पर निर्मित होते हैं। उनका META II कंपाइलर, जो पहली बार 1964 में रिलीज़ हुआ था, पहला प्रलेखित मेटाकंपाइलर था। अपनी स्वयं की भाषा और अन्य को परिभाषित करने में सक्षम, META II ने औपचारिक व्याकरण # विश्लेषणात्मक व्याकरणों को स्वीकार किया है जिसमें कोड जनरेशन (संकलक) | आउटपुट (कोड उत्पादन) शामिल हैं। यह आभासी मशीन के शुरुआती उदाहरणों में से एक में भी अनुवादित है। निर्मित टोकन पहचानने वाले कार्यों द्वारा लेक्सिकल विश्लेषण किया गया था: .ID, .STRING और .NUMBER। वाक्य-विन्यास सूत्र में उद्धरित स्ट्रिंग्स उन शब्दों को पहचानते हैं जिन्हें नहीं रखा जाता है।[43] ट्री-मेटा, एक दूसरी पीढ़ी का शोर्रे मेटाकंपाइलर, 1968 के आसपास दिखाई दिया। इसने व्याकरण विश्लेषण से कोड उत्पादन को अलग करने वाले अनपार्स नियमों को जोड़ते हुए मेटा II की क्षमताओं को बढ़ाया। सिंटैक्स सूत्र में ट्री ट्रांसफ़ॉर्म ऑपरेशंस अमूर्त सिंटैक्स ट्री उत्पन्न करते हैं जो कि अनपार्स नियम संचालित होते हैं। अनपार्स ट्री पैटर्न मिलान ने पीपहोल अनुकूलन क्षमता प्रदान की।

Metacompiler#CWIC, 1970 के ACM प्रकाशन में वर्णित एक तीसरी पीढ़ी का Schorre मेटाकंपाइलर है जिसने लेक्सिंग नियमों और बैकट्रैकिंग ऑपरेटरों को व्याकरण विश्लेषण में जोड़ा। LISP 2 का विवाह CWIC जनरेटर भाषा में TREEMETA के अनपार्स नियमों के साथ हुआ था। LISP 2 प्रसंस्करण के साथ, CWIC पूरी तरह से अनुकूलित कोड उत्पन्न कर सकता है। सीडब्ल्यूआईसी ने नामित कोड अनुभागों में बाइनरी कोड जनरेशन भी प्रदान किया। CWIC का उपयोग करके सिंगल और मल्टीपास कंपाइल को लागू किया जा सकता है।

CWIC को 8-बिट बाइट-एड्रेसेबल मशीन कोड निर्देशों के लिए संकलित किया गया है, जिसे मुख्य रूप से IBM सिस्टम/360 कोड बनाने के लिए डिज़ाइन किया गया है।

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

क्रॉस संकलन

एक क्रॉस संकलन एक वातावरण में चलता है लेकिन दूसरे के लिए ऑब्जेक्ट कोड तैयार करता है। क्रॉस कंपाइलर्स का उपयोग एम्बेडेड विकास के लिए किया जाता है, जहां लक्ष्य कंप्यूटर की सीमित क्षमताएं होती हैं।

क्रॉस संकलन का एक प्रारंभिक उदाहरण एआईएमआईसीओ था, जहां आईबीएम 705 के लिए असेंबली भाषा उत्पन्न करने के लिए यूनीवैक II पर एक फ्लो-मैटिक प्रोग्राम का उपयोग किया गया था, जिसे आईबीएम कंप्यूटर पर इकट्ठा किया गया था।[3]

ALGOL 68C संकलक ने ZCODE आउटपुट उत्पन्न किया, जिसे या तो ZCODE अनुवादक द्वारा स्थानीय मशीन कोड में संकलित किया जा सकता है या व्याख्या की जा सकती है। ZCODE एक रजिस्टर-आधारित मध्यवर्ती भाषा है। ZCODE की व्याख्या या संकलन करने की इस क्षमता ने ALGOL 68C को कई अलग-अलग कंप्यूटर प्लेटफॉर्म पर पोर्ट करने के लिए प्रोत्साहित किया।

ऑप्टिमाइज़िंग कंपाइलर्स

संकलक अनुकूलन ऑब्जेक्ट कोड की गुणवत्ता में सुधार करने की प्रक्रिया है, जो इसके द्वारा उत्पन्न परिणामों को बदले बिना है।

पहले फोरट्रान कंपाइलर के डेवलपर्स का उद्देश्य कोड उत्पन्न करना था जो औसत हाथ-कोडित कोडांतरक से बेहतर था, ताकि ग्राहक वास्तव में अपने उत्पाद का उपयोग कर सकें। पहले वास्तविक संकलक में से एक में, वे अक्सर सफल हुए।[44] बाद के कंपाइलर्स, जैसे आईबीएम के फोरट्रान # फोरट्रान IV कंपाइलर, अच्छे डायग्नोस्टिक्स पर अधिक प्राथमिकता देते हैं और ऑब्जेक्ट कोड ऑप्टिमाइज़ेशन की कीमत पर अधिक तेज़ी से निष्पादित करते हैं। आईबीएम सिस्टम/360 आर्किटेक्चर | आईबीएम सिस्टम/360 श्रृंखला तक आईबीएम ने दो अलग-अलग कंपाइलर प्रदान नहीं किए थे - एक तेज़-निष्पादन कोड चेकर, और एक धीमा, एक का अनुकूलन।

फ्रांसिस ई. एलन ने जॉन कॉके (कंप्यूटर वैज्ञानिक) के साथ अकेले और संयुक्त रूप से काम करते हुए अनुकूलन के लिए कई अवधारणाएं पेश कीं। एलन का 1966 का पेपर, प्रोग्राम ऑप्टिमाइजेशन,[45] ऑप्टिमाइज़ेशन के लिए प्रोग्राम सामग्री को एन्कोड करने के लिए ग्राफ़ (डेटा संरचना) का उपयोग शुरू किया।[46] उनके 1970 के पेपर, कंट्रोल फ्लो एनालिसिस[47] और कार्यक्रम अनुकूलन के लिए एक आधार[48] कुशल और प्रभावी डेटा प्रवाह विश्लेषण और अनुकूलन के संदर्भ के रूप में स्थापित अंतराल। कॉके के साथ उनका 1971 का पेपर, ए कैटलॉग ऑफ़ ऑप्टिमाइज़िंग ट्रांसफ़ॉर्मेशन,[49] अनुकूलन परिवर्तनों का पहला विवरण और व्यवस्थितकरण प्रदान किया। उसके 1973 और 1974 के अंतर-प्रक्रियात्मक डेटा-प्रवाह विश्लेषण के पत्रों ने विश्लेषण को पूरे कार्यक्रमों तक विस्तारित किया।[50][51] कॉके के साथ उनका 1976 का पेपर आज कंपाइलर्स को अनुकूलित करने में उपयोग की जाने वाली दो मुख्य विश्लेषण रणनीतियों में से एक का वर्णन करता है।[52] एलन ने आईबीएम 7030 स्ट्रेच-आईबीएम 7950 हार्वेस्ट और प्रायोगिक एसीएस-1 के लिए कंपाइलर्स के हिस्से के रूप में अपने तरीकों को विकसित और कार्यान्वित किया। इस कार्य ने आधुनिक मशीन- और भाषा-स्वतंत्र ऑप्टिमाइज़र की व्यवहार्यता और संरचना स्थापित की। वह फोरट्रान कार्यक्रमों के स्वत: समानांतर निष्पादन पर पीटीआरएएन परियोजना की स्थापना और नेतृत्व करने के लिए आगे बढ़ीं।[53] उनकी पीटीआरएएन टीम ने नई समांतरता का पता लगाने वाली योजनाएं विकसित कीं और कार्यक्रम निर्भरता ग्राफ की अवधारणा बनाई, प्राथमिक संरचना विधि जो कि अधिकांश समांतर कंपाइलरों द्वारा उपयोग की जाती है।

जॉन कॉके और जैकब टी. श्वार्ट्ज द्वारा प्रोग्रामिंग लैंग्वेज और उनके कंपाइलर, 1970 की शुरुआत में प्रकाशित, 200 से अधिक पृष्ठों को अनुकूलन एल्गोरिदम के लिए समर्पित किया। इसमें आंशिक अतिरेक उन्मूलन और शक्ति में कमी जैसी कई परिचित तकनीकें शामिल थीं।[54]


पीपहोल अनुकूलन

पीपहोल ऑप्टिमाइज़ेशन एक सरल लेकिन प्रभावी ऑप्टिमाइज़ेशन तकनीक है। इसका आविष्कार विलियम एम. मैककिमैन ने किया था और 1965 में सीएसीएम में प्रकाशित हुआ था।[55] इसका उपयोग XPL संकलक में किया गया था जिसे McKeeman ने विकसित करने में मदद की थी।

कैपेक्स कोबोल ऑप्टिमाइज़र

Capex Corporation ने COBOL के लिए 1970 के दशक के मध्य में COBOL ऑप्टिमाइज़र विकसित किया। इस प्रकार का ऑप्टिमाइज़र, इस मामले में, मानक IBM COBOL कंपाइलर में कमजोरियों के ज्ञान पर निर्भर करता है, और वास्तव में अधिक कुशल कोड के साथ ऑब्जेक्ट कोड के खंड (या पैच (कंप्यूटिंग)) को प्रतिस्थापित करता है। प्रतिस्थापन कोड एक रेखीय लुकअप तालिका को उदाहरण के लिए एक द्विआधारी खोज के साथ बदल सकता है या कभी-कभी एक अपेक्षाकृत धीमी निर्देश को एक ज्ञात तेज़ के साथ बदल सकता है जो अन्यथा इसके संदर्भ में कार्यात्मक रूप से समकक्ष था। इस तकनीक को अब स्ट्रेंथ रिडक्शन के रूप में जाना जाता है। उदाहरण के लिए, आईबीएम सिस्टम/360 आर्किटेक्चर | आईबीएम सिस्टम/360 हार्डवेयर पर सीएलआई निर्देश, विशेष मॉडल के आधार पर, सिंगल बाइट तुलना के लिए सीएलसी निर्देश के रूप में दो बार और 5 गुना तेज था।[56][57] आधुनिक संकलक आमतौर पर अनुकूलन विकल्प प्रदान करते हैं ताकि प्रोग्रामर यह चुन सकें कि अनुकूलन पास को निष्पादित करना है या नहीं।

डायग्नोस्टिक्स

जब एक कंपाइलर को वाक्यात्मक रूप से गलत प्रोग्राम दिया जाता है, तो एक अच्छा, स्पष्ट त्रुटि संदेश मददगार होता है। संकलक लेखक के दृष्टिकोण से, इसे प्राप्त करना अक्सर कठिन होता है।

1960 के दशक के अंत में वाटरलू विश्वविद्यालय, कनाडा में WATFIV फोरट्रान संकलक विकसित किया गया था। यह उस समय के आईबीएम के फोरट्रान कंपाइलर्स की तुलना में बेहतर त्रुटि संदेश देने के लिए डिज़ाइन किया गया था। इसके अलावा, WATFIV कहीं अधिक उपयोगी था, क्योंकि यह संकलन, लिंकर (कंप्यूटिंग) और निष्पादन को एक चरण में मिलाता था, जबकि IBM के संकलक के पास चलाने के लिए तीन अलग-अलग घटक थे।

पीएल/सी

PL/C 1970 के दशक की शुरुआत में कॉर्नेल विश्वविद्यालय में विकसित एक कंप्यूटर प्रोग्रामिंग भाषा थी। जबकि PL/C IBM की PL/I भाषा का एक उपसमुच्चय था, इसे शिक्षण प्रोग्रामिंग के लिए उपयोग किए जाने के विशिष्ट लक्ष्य के साथ डिज़ाइन किया गया था। पीएल/सी को डिजाइन करने वाले दो शोधकर्ता और अकादमिक शिक्षक रिचर्ड डब्ल्यू कॉनवे और थॉमस आर विलकॉक्स थे। उन्होंने मार्च 1973 में ACM के संचार में प्रकाशित PL/I के लिए डायग्नोस्टिक कंपाइलर का प्रसिद्ध लेख डिज़ाइन और कार्यान्वयन प्रस्तुत किया।[58] पीएल/सी ने पीएल/आई की कुछ अधिक जटिल विशेषताओं को समाप्त कर दिया, और व्यापक डिबगिंग और त्रुटि सुधार सुविधाओं को जोड़ा। पीएल/सी कंपाइलर में कई सिंटैक्स त्रुटियों के व्यापक स्वत: सुधार के उपयोग के माध्यम से और किसी भी शेष सिंटैक्स त्रुटियों को आउटपुट स्टेटमेंट में परिवर्तित करके, किसी भी प्रोग्राम को संकलित करने में विफल होने की असामान्य क्षमता नहीं थी।

जस्ट-इन-टाइम संकलन

जस्ट-इन-टाइम (JIT) संकलन रनटाइम सॉफ्टवेयर मीट्रिक या अन्य प्रदर्शन-बढ़ाने वाले विकल्पों का लाभ उठाने के लिए निष्पादन योग्य कोड उड़ान पर | ऑन-द-फ्लाई या इसके वास्तविक निष्पादन के जितना करीब संभव हो, उत्पन्न करना है।

मध्यवर्ती प्रतिनिधित्व

अधिकांश आधुनिक कंपाइलरों में एक लेक्सर और पार्सर होता है जो प्रोग्राम के मध्यवर्ती प्रतिनिधित्व का उत्पादन करता है। मध्यवर्ती प्रतिनिधित्व संचालन का एक सरल अनुक्रम है जिसका उपयोग एक ऑप्टिमाइज़र और एक कोड जनरेशन (कंपाइलर) द्वारा किया जा सकता है जो लक्ष्य प्रोसेसर के मशीन कोड में निर्देश उत्पन्न करता है। क्योंकि कोड जनरेटर एक मध्यवर्ती प्रतिनिधित्व का उपयोग करता है, एक ही कोड जनरेटर का उपयोग कई अलग-अलग उच्च-स्तरीय भाषाओं के लिए किया जा सकता है।

मध्यवर्ती प्रतिनिधित्व के लिए बहुत संभावनाएं हैं। तीन-पता कोड, जिसे चौगुना या क्वाड के रूप में भी जाना जाता है, एक सामान्य रूप है, जहां एक ऑपरेटर, दो ऑपरेंड और एक परिणाम होता है। तीन-पता कोड के स्पष्ट चर के विपरीत, दो-पता कोड या ट्रिपल में एक ढेर होता है जिसके परिणाम लिखे जाते हैं।

स्टेटिक सिंगल असाइनमेंट (SSA) को 1980 के दशक में अंतर्राष्ट्रीय व्यवसाय तंत्र के शोधकर्ता रॉन साइट्रॉन, जेने फेरेंटे, बैरी रोसेन (कंप्यूटर वैज्ञानिक) | बैरी के. रोसेन, मार्क एन. वेगमैन और एफ. केनेथ ज़ेडेक द्वारा विकसित किया गया था।[59] एसएसए में, एक चर को केवल एक बार मान दिया जाता है। किसी मौजूदा चर को संशोधित करने के बजाय एक नया चर बनाया जाता है। एसएसए अनुकूलन और कोड जनरेशन को सरल करता है।

कोड जनरेशन

एक कोड जनरेटर लक्ष्य प्रोसेसर के लिए मशीन कोड निर्देश उत्पन्न करता है।

रजिस्टर आवंटन

सेठी-उलमैन एल्गोरिथम या सेठी-उलमैन नंबरिंग, वेरिएबल्स को होल्ड करने के लिए आवश्यक प्रोसेसर रजिस्टर की संख्या को कम करने की एक विधि है।

उल्लेखनीय संकलक

यह भी देखें

  • प्रोग्रामिंग भाषाओं का इतिहास
  • लेक्स प्रोग्रामिंग टूल (और फ्लेक्स लेक्सिकल एनालाइज़र), टोकन पार्सर आमतौर पर yacc (और बाइसन) के संयोजन में उपयोग किया जाता है।
  • बैकस-नौर रूप, एक मेटासिंटैक्स जिसका उपयोग संदर्भ-मुक्त व्याकरण को व्यक्त करने के लिए किया जाता है: यानी औपचारिक भाषाओं का वर्णन करने का एक औपचारिक तरीका।
  • स्व-दुभाषिया, एक ऐसी भाषा में लिखा गया दुभाषिया जिसकी वह व्याख्या कर सके।

संदर्भ

  1. 1.0 1.1 Böhm, Corrado (1954). डिजिटल कैलकुलेटर: प्रोग्राम के डिजाइन में मशीन द्वारा तार्किक-गणितीय सूत्रों के गूढ़ रहस्य से (PDF) (PhD) (in French). Zurich: ETH Zurich. Retrieved 27 September 2022.{{cite thesis}}: CS1 maint: unrecognized language (link)
  2. 2.0 2.1 Böhm, Corrado (1954). डिजिटल कंप्यूटर: प्रोग्राम अवधारणा के दौरान मशीन का उपयोग करके तार्किक-गणितीय सूत्रों को एन्कोड करने पर (PDF) (PhD) (in English). Zurich: ETH Zurich. Retrieved 27 September 2022.
  3. 3.0 3.1 3.2 [1] The World's First COBOL Compilers Archived 13 October 2011 at the Wayback Machine
  4. Knuth, Donald E.; Pardo, Luis Trabb. "प्रोग्रामिंग भाषाओं का प्रारंभिक विकास". Encyclopedia of Computer Science and Technology. 7: 419–493.
  5. Bentley, Peter J. (2012). Digitized: The Science of Computers and how it Shapes Our World. Oxford University Press. p. 87. ISBN 9780199693795. Archived from the original on 29 August 2016.
  6. Backus et al. "The FORTRAN automatic coding system", Proc. AFIPS 1957 Western Joint Computer Conf., Spartan Books, Baltimore 188–198
  7. [2] Rosen, Saul. ALTAC, FORTRAN, and compatibility. Proceedings of the 1961 16th ACM national meeting
  8. Norman, Jeremy. "ग्रेस हॉपर और सहकर्मियों ने COBOL का परिचय दिया". HistoryOfInformation.com. Jeremy Norman. Retrieved 14 December 2022.
  9. "Algol 58 implementations and dialects — Software Preservation Group".
  10. T. Hart and M. Levin "The New Compiler", AIM-39 CSAIL Digital Archive – Artificial Intelligence Laboratory Series
  11. 11.0 11.1 Hart, Tim; Levin, Mike. "AI Memo 39-The new compiler" (PDF). Archived from the original (PDF) on 13 December 2020. Retrieved 23 May 2008.
  12. "फोर्थ में मेटाकंपिलेशन का परिचय". 24 March 2021.
  13. Howe, Richard James. "एक मेटा-कंपाइलर, ईफर्थ का कार्यान्वयन, और दोनों पर एक ट्यूटोरियल". GitHub. Retrieved 27 September 2022.
  14. Chomsky, Noam (September 1956). "Three models for the description of language". IEEE Transactions on Information Theory. 2 (3): 113–124. doi:10.1109/TIT.1956.1056813. S2CID 19519474.
  15. Knuth, Donald. "बायें से दायें भाषाओं के अनुवाद पर" (PDF). Archived from the original (PDF) on 15 March 2012. Retrieved 29 May 2011.
  16. Korenjak, A. "A Practical Method for Constructing LR(k) Processors", Communications of the ACM, Vol. 12, No. 11, 1969
  17. DeRemer, F. Practical Translators for LR(k) Languages. PhD dissertation, MIT, 1969.
  18. DeRemer, F. "Simple LR(k) Grammars", Communications of the ACM, Vol. 14, No. 7, 1971.
  19. 19.0 19.1 Thomas J Pennello (1986). "बहुत तेज़ एलआर पार्सिंग". ACM SIGPLAN Notices. Vol. 21, no. 7.
  20. G.H. Roberts (1988). "Recursive ascent: an LR analog to recursive descent". ACM SIGPLAN Notices. 23 (8): 23–29. doi:10.1145/47907.47909. S2CID 12740771.
  21. Leermakers, Augusteijn, Kruseman Aretz (1992). "एक कार्यात्मक एलआर पार्सर". Theoretical Computer Science. 104 (2): 313–323. doi:10.1016/0304-3975(92)90128-3.{{cite journal}}: CS1 maint: multiple names: authors list (link)
  22. A.A. Grau, "Recursive processes and ALGOL translation", Communications of the ACM, 4, No. 1, pp. 10–15. Jan. 1961
  23. Edgar T. Irons, "A syntax-directed compiler for ALGOL 60", Communications of the ACM, 4, No. 1, Jan. 1961, pp. 51–55.
  24. "Stories of the B5000 and People Who Were There" (PDF).
  25. Waychoff, Richard; Turner, Lloyd; Rosin, Robert F.; Pearson, Ralph W.; Oliphint, G. Clark; MacKenzie, F. Brad; MacDonald, Ray W.; MacDonald, Duncan N.; Lonergan, William D.; Kreuder, Norman L.; King, Paul D.; Hootman, Joseph T.; Hauck, Erwin A.; Hale, John E.; Galler, Bernard A.; Ford, James; Eppert, Ray R.; Dent, Benjamin A.; Dahm, David M.; Creech, Bobby A.; Collins, George A.; Berce, Henri; Barton, Robert S. (6 September 1985). "The Burroughs B5000 Conference, Charles Babbage Institute". hdl:11299/107105. {{cite journal}}: Cite journal requires |journal= (help)
  26. P. M. Lewis, R. E. Stearns, "Syntax directed transduction," focs, pp.21–35, 7th Annual Symposium on Switching and Automata Theory (SWAT 1966), 1966
  27. Lewis, P. and Stearns, R. "Syntax-Directed Transduction", Journal of the ACM, Vol. 15, No. 3, 1968.
  28. "The PL/0 compiler/interpreter". Archived from the original on 8 December 2008. Retrieved 7 July 2011.
  29. J. Earley, "An efficient context-free parsing algorithm", Communications of the Association for Computing Machinery, 13:2:94-102, 1970.
  30. Backus, J. W. (1959). "ज्यूरिख ACM-GAMM सम्मेलन की प्रस्तावित अंतर्राष्ट्रीय बीजगणितीय भाषा का वाक्य-विन्यास और शब्दार्थ". Proceedings of the International Conference on Information Processing: 125–132.
  31. Farrell, James A. (August 1995). "विस्तारित बैकस नौर फॉर्म". Compiler Basics. Retrieved 11 May 2011.
  32. Donald E. Knuth, "Backus Normal Form vs. Backus Naur Form", Communications of the ACM, 7(12):735–736, 1964.
  33. "टीएमजी मेटा कंपाइलर". reocities.com. Archived from the original on 4 March 2016. Retrieved 30 June 2011.
  34. "कंप्यूटर भाषाओं का विश्वकोश". Archived from the original on 21 September 2007. Retrieved 30 June 2011.
  35. McClure, R. M. (1965). Programming languages for non-numeric processing—1. pp. 262–274. doi:10.1145/800197.806050. ISBN 9781450374958. S2CID 44606611. {{cite book}}: |work= ignored (help)
  36. R. M. McClure, TMG—A Syntax Directed Compiler Proc. 20th ACM National Conf. (1965), pp. 262–274.
  37. "Multics PL/I". multicians.org.
  38. "शुद्ध". Archived from the original on 10 January 2015. Retrieved 3 August 2011. Dennis M. Ritchie. The Development of the C Language
  39. McKeeman, William Marshall; Horning, James J.; and Wortman, David B., A Compiler Generator (1971), ISBN 978-0-13-155077-3.
  40. Computer Science Department, University of Toronto, "The XPL Programming Language"
  41. Johnson, S.C., "Yacc – Yet Another Compiler-Compiler", Computing Science Technical Report 32, AT&T Bell Labs, 1975
  42. Hamilton, Naomi. "The A-Z of Programming Languages: YACC". TechWorld.
  43. Schorre, D. V. (1964). "META II a syntax-oriented compiler writing language". Proceedings of the 1964 19th ACM national conference. pp. 41.301–41.3011. doi:10.1145/800257.808896. ISBN 9781450379182. S2CID 43144779. {{cite book}}: |work= ignored (help)
  44. "Comp.compilers: Re: History and evolution of compilers". iecc.com.
  45. Frances E. Allen, "Program optimization" In Mark I. Halpern and Christopher J. Shaw, editors, Annual Review in Automatic Programming, volume 5, pages 239–307. Pergamon Press, New York, 1969.
  46. Allen, Frances E.; Cocke, John (11 July 1972). Graph-Theoretic Constructs for Program Control Flow Analysis (RC 3923) (PDF). Yorktown Heights, NY: IBM Thomas J. Watson Research Center. Retrieved 6 May 2021.
  47. Frances E. Allen. "Control flow analysis". ACM SIGPLAN Notices, 5(7):1–19, July 1970.
  48. Frances E. Allen. "A basis for program optimization". In Proc. IFIP Congress 71, pages 385–390. North-Holland, 1972.
  49. Frances E. Allen and John Cocke. "A catalogue of optimizing transformations." In R. Rustin, editor, Design and Optimization of Compilers, pages 1–30. Prentice-Hall, 1971.
  50. Frances E. Allen. "Interprocedural data flow analysis". In Proc. IFIP Congress 74, pages 398–402. North-Holland, 1974.
  51. Frances E. Allen. "A method for determining program data relationships". In Andrei Ershov and Valery A. Nepomniaschy, editors, Proc. International Symposium on Theoretical Programming, Novosibirsk, USSR, August 1972, volume 5 of Lecture Notes in Computer Science, pages 299–308. Springer-Verlag, 1974.
  52. Frances E. Allen and John Cocke. "A program data flow analysis procedure", Communications of the ACM, 19(3):137–147, March 1976.
  53. Sarkar, Vivek (1991). "PTRAN—the IBM Parallel Translation System". समानांतर कार्यात्मक भाषाएं और संकलक. New York, NY: Association for Computing Machinery. pp. 309–391. doi:10.1145/107214.129260. ISBN 0201522438. Retrieved 6 May 2021.
  54. John Cocke and Jacob T. Schwartz, Programming Languages and their Compilers. Courant Institute of Mathematical Sciences, New York University, April 1970.
  55. McKeeman, W.M. "Peephole optimization". Communications of the ACM 8, 7 (July 1965), 443–444
  56. "System/360 Instruction Timing Information" (PDF). IBM Systems Reference Library. May 1964. Retrieved 6 May 2021.
  57. Evans, Michael (1982). "कोबोल पर्यावरण के लिए सॉफ्टवेयर इंजीनियरिंग". Communications of the ACM. 25 (12): 874–882. doi:10.1145/358728.358732. S2CID 17268690.
  58. CACM March 1973 pp 169–179.
  59. {{cite journal |title=स्थैतिक एकल असाइनमेंट फॉर्म और नियंत्रण निर्भरता ग्राफ की कुशल गणना|author1=Cytron, Ron |author2=Ferrante, Jeanne |author3=Rosen, Barry K. |author4=Wegman, Mark N. |author5=Zadeck, F. Kenneth |s2cid=13243943 |journal=ACM Transactions on Programming Languages and Systems |volume=13 |year=1991 |pages=451–490 |url=http://www.cs.utexas.edu/~pingali/CS380C/2010/papers/ssaCytron.pdf |issue=4 |doi=10.1145/115372.115320 |citeseerx=10.1.1.100.6361 }


अग्रिम पठन


बाहरी संबंध