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

From Vigyanwiki
Revision as of 15:48, 24 May 2023 by alpha>Soumyabisht (TEXT)


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

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

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

पहला संकलक

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

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

पहला कार्यान्वित संकलकग्रेस हूपर द्वारा लिखा गया था, जिसने ''संकलक'' शब्द भी गढ़ा था, जो उसके A-0 प्रणाली से संबंधित है जो एक लोडर या लिंकर के रूप में कार्य करता है, न कि एक संकलक की आधुनिक धारणा में कार्य करता है। [3]आधुनिक अर्थ में पहला स्वयंकूट और संकलक एलिक ग्लेनी द्वारा 1952 में मैनचेस्टर विश्वविद्यालय में मार्क 1 कंप्यूटर के लिए विकसित किया गया था।[4][5] आईबीएम में जॉन डब्ल्यू बैकस के नेतृत्व में फोरट्रान समूह ने 1957 में पहला व्यावसायिक रूप से उपलब्ध संकलक प्रस्तावित किया, जिसे बनाने में 18 व्यक्ति-वर्ष लगे थे।[6]

पहला ALGOL 58 संकलक 1958 के अंत तक Z22 (कंप्यूटर) कंप्यूटर के लिए फ्रेडरिक एल. बाउर, हरमन बॉटनब्रुक, हेंज रूटिशॉसर और क्लाउस सैमल्सन द्वारा पूरा किया गया था। बाउर एट अल पिछले वर्षों में सीक्वेंतिएल फॉर्मेलुबेरसेटज़ुंग (अर्थात अनुक्रमिक सूत्र अनुवाद) के लिए संकलक तकनीक पर काम कर रहा था।

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

स्वयं-होस्टिंग संकलक

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

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

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

नेलियाक

नौसेना इलेक्ट्रॉनिक्स प्रयोगशाला अंतर्राष्ट्रीय ALGOL संकलक या NELIAC 1958 में नौसेना इलेक्ट्रॉनिक्स प्रयोगशाला द्वारा विकसित ALGOL 58 क्रमादेशन भाषा की एक बोली और संकलक कार्यान्वयन था।[9]

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

लिस्प

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

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

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

फोर्थ

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

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

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

ALGOL परियोजना (1957-1960) द्वारा ब्लॉक संरचना को कंप्यूटर क्रमादेशन भाषाओं में प्रस्तावित किया गया था, जिसके परिणामस्वरूप, परिणामी ALGOL वाक्य रचना का वर्णन करने के लिए एक संदर्भ-मुक्त व्याकरण भी सम्मलित था।

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

एलआर पदव्याख्या

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

नुथ ने प्रमाणित किया कि LR(k) व्याकरण को एक निष्पादन समय के साथ अनिवार्य रूप से क्रमादेश की लंबाई के अनुपात में पार्स किया जा सकता है जो होता है, और यह k > 1 कि प्रत्येक LR(k) व्याकरण को यांत्रिक रूप से उसी भाषा के लिए LR(1) व्याकरण में रूपांतरित किया जा सकता है। दूसरे शब्दों में, किसी भी नियतात्मक संदर्भ-मुक्त व्याकरण (DCFG) को पार्स करने के लिए केवल एक प्रतीक का होना आवश्यक है।[15]

कोरेन्जक (1969) सबसे पहले क्रमादेशन भाषाओं के लिए पदव्याख्या दिखाने वाले थे जिन्हें इन तकनीकों का उपयोग करके उत्पादित किया जा सकता था।[16] फ्रैंक डीरेमर ने अधिक व्यावहारिक सरल LR (SLR) और अग्रावलोकन LR (LALR) तकनीकों को तैयार किया, जो 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]इस तकनीक को बाद में 1988 में जी.एच. रॉबर्ट्स द्वारा [20] और साथ ही 1992 में लेर्मर्स, ऑगस्टिजन, क्रुसेमन अरेट्ज़ द्वारा[21] सैद्धांतिक कंप्यूटर विज्ञान पत्रिका में एक लेख में उजागर किया गया था।

एलएल पदव्याख्या

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

LL(k) व्याकरण को एक पुनरावर्ती मूल पदव्याख्या द्वारा पार्स किया जा सकता है जिसे सामान्यतः हाथ से कोडित किया जाता है, हालांकि मेटा II जैसे एक संकेतन का वैकल्पिक रूप से उपयोग किया जा सकता है।

ALGOL के अभिकल्पना ने पुनरावर्ती अवरोहण की अन्वेषण को जन्म दिया, क्योंकि ALGOL भाषा ही पुनरावर्ती है। पुनरावर्ती अवरोहण पदव्याख्या की अवधारणा पर ए.ए. ग्राउ और एडगर टी. ''नेड'' द्वारा अलग-अलग पत्रों में एसीएम के संचार के जनवरी 1961 के प्रकाशन में चर्चा की गई थी।[22][23] रिचर्ड वेचॉफ और उनके सहयोगियों ने मार्च 1961 में बरोज़ कॉर्पोरेशन ALGOL संकलक में प्रनरावर्तन अवरोही पद परिचय को भी उपयोजित किया,[24] दोनों समूहों ने अलग-अलग प्रकार का उपयोग किया लेकिन कम से कम अनौपचारिक संपर्क में थे।[25]

LL(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 2022-09-27.{{cite thesis}}: CS1 maint: unrecognized language (link)
  2. 2.0 2.1 Böhm, Corrado (1954). डिजिटल कंप्यूटर: प्रोग्राम अवधारणा के दौरान मशीन का उपयोग करके तार्किक-गणितीय सूत्रों को एन्कोड करने पर (PDF) (PhD) (in English). Zurich: ETH Zurich. Retrieved 2022-09-27.
  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 2022-12-14.
  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 2020-12-13. Retrieved 2008-05-23.
  12. "फोर्थ में मेटाकंपिलेशन का परिचय". 24 March 2021.
  13. Howe, Richard James. "एक मेटा-कंपाइलर, ईफर्थ का कार्यान्वयन, और दोनों पर एक ट्यूटोरियल". GitHub. Retrieved 2022-09-27.
  14. Chomsky, Noam (Sep 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 2011-06-30.
  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 2011-08-03. 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 }


अग्रिम पठन


बाहरी संबंध

  • 1980 से पहले संकलक निर्माण - डिक ग्रुने द्वारा लिखित साहित्य सूची
  • "लेखन संकलक का इतिहास" (PDF). कंप्यूटर और स्वचालन. XI (12): 8–10, 12, 14, 24–25. दिसंबर 1962. {{cite journal}}: Check date values in: |date= (help)