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

From Vigyanwiki

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

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

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]

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

फोर्थ

फोर्थ (क्रमादेशन भाषा) स्व-होस्टिंग संकलक का एक उदाहरण है। फोर्थ का स्वयं-संकलन और क्रॉस संकलन विशेषता अधि अनुभाषण और अधि संकलक के समानार्थी हैं।[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]

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

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

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

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

पदव्याख्यायित्र जेनरेटर

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

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

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

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

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

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

एक्सपीएल

XPL PL/I क्रमादेशन भाषा की एक बोली है, जिसका उपयोग कंप्यूटर भाषाओं के लिए संकलक के विकास के लिए किया जाता है। इसे 1967 में स्टैनफोर्ड विश्वविद्यालय और कैलिफोर्निया विश्वविद्यालय, सांताक्रूज में विलियम एम. मैककिमैन, जेम्स जे. हॉर्निंग और डेविड बी. वोर्टमैन के साथ एक समूह द्वारा, अभिकल्प और कार्यान्वित किया गया था। इसकी घोषणा पहली बार 1968 में सैन फ्रांसिस्को में सैन फ्रांसिस्को में संयुक्त कम्प्यूटर सम्मेलन पतन में की गई थी।[39][40]

XPL में अपेक्षाकृत सरलअनुवादक लेखन प्रणाली है जिसे विश्लेषक कहा जाता है, 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, स्ट्रिंग और संख्या वाक्य-विन्यास सूत्र में उद्धरित स्ट्रिंग्स उन शब्दों को पहचानते हैं जिन्हें नहीं रखा जाता है।[43]

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

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 श्रृंखला तक नहीं था कि आईबीएम ने दो अलग-अलग संकलक प्रदान नहीं किए - एक तेजी से निष्पादन कोड जाँचकर्ता, एक धीमा, और एक का अनुकूलन था।

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

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

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

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

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

कैपेक्स कोबोल अनुकूलक

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

आधुनिक संकलक सामान्यतः अनुकूलन विकल्प प्रदान करते हैं ताकि क्रमादेशक यह चयन कर सकें कि अनुकूलन पास को निष्पादित करना है या नहीं करना है।

नैदानिक

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

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

पीएल/सी

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

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

समय-समय पर संकलन

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

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

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

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

स्थैतिक एकल कार्य (SSA) को 1980 के दशक में IBM के शोधकर्ता रॉन साइट्रॉन, जेने फेरेंटे, बैरी के. रोसेन, मार्क एन. वेगमैन और एफ. केनेथ ज़ेडेक द्वारा विकसित किया गया था।[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 }


अग्रिम पठन

  • Backus, John, et al., "The FORTRAN Automatic Coding System", पश्चिमी संयुक्त कंप्यूटर सम्मेलन, लॉस एंजिल्स, कैलिफोर्निया, फरवरी 1957 की कार्यवाही। आईबीएम टीम द्वारा पहले फोरट्रान संकलक के डिजाइन और कार्यान्वयन का वर्णन करता है।
  • नुथ, डी. ई., एक सीमित कंप्यूटर पर रन्सिबल-बीजगणितीय अनुवाद, एसीएम का संचार, खंड 2, पृष्ठ 18, (नवंबर 1959)।
  • आयरन्स, एडगर टी., एएलजीओएल 60 के लिए सिंटैक्स निर्देशित कंपाइलर, एसीएम का संचार, खंड 4, पृष्ठ 51 (जनवरी 1961)
  • Dijkstra, Edsger W. (1961). "ALGOL 60 अनुवाद: X1 के लिए एक ALGOL 60 अनुवादक और ALGOL 60 के लिए एक अनुवादक बनाना (PDF) (Technical report). Amsterdam: Mathematisch Centrum. 35.
  • कॉनवे, मेल्विन ई., डिज़ाइन ऑफ़ अ सेपरेबल ट्रांज़िशन-डायग्राम कंपाइलर, कम्युनिकेशंस ऑफ़ द एसीएम, वॉल्यूम 6, अंक 7 (जुलाई 1963)
  • फ़्लॉइड, आर. डब्ल्यू., सिंटैक्टिक विश्लेषण और ऑपरेटर प्राथमिकता, जर्नल ऑफ़ द एसीएम, वॉल्यूम 10, पी 316 (जुलाई 1963)।
  • चीथम, टी. ई., और सैटली, के., सिंटेक्स निर्देशित संकलन, एसजेसीसी पृष्ठ 31 (1964)।
  • रान्डेल, ब्रायन; रसेल, लॉफोर्ड जॉन, ALGOL 60 इम्प्लीमेंटेशन: द ट्रांसलेशन एंड यूज़ ऑफ़ ALGOL 60 प्रोग्राम्स ऑन अ कंप्यूटर, अकादमिक प्रेस, 1964
  • Knuth, D. E. (July 1965). "भाषाओं के अनुवाद पर बाएँ से दाएँ". Information and Control. 8 (6): 607–639. doi:10.1016/S0019-9958(65)90426-2.
  • कॉके, जॉन; श्वार्ट्ज, जैकब टी., प्रोग्रामिंग लैंग्वेजेज एंड देयर कंपाइलर्स: प्रिलिमिनरी नोट्स, कोर्टेंट इंस्टीट्यूट ऑफ मैथेमेटिकल साइंसेज टेक्निकल रिपोर्ट, न्यूयॉर्क यूनिवर्सिटी, 1969।
  • बाउर, फ्रेडरिक एल.; ईकेल, जुरगेन (एड्स।), कंपाइलर कंस्ट्रक्शन, एन एडवांस्ड कोर्स, सेकेंड एड लेक्चर नोट्स इन कंप्यूटर साइंस 21, स्प्रिंगर 1976,  आईएसबीएन 3-540-07542-9
  • ग्रीज़, डेविड, कम्पाइलर कंस्ट्रक्शन फ़ॉर डिजिटल कंप्यूटर्स, न्यूयॉर्क : विली, 1971.  आईएसबीएन 0-471-32776-एक्स


बाहरी संबंध

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