संकलक निर्माण का इतिहास: Difference between revisions

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


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


== पहला संकलक ==
== पहला संकलक ==
Line 15: Line 15:
पहला कार्यान्वित संकलक[[ ग्रेस हूपर ]]द्वारा लिखा गया था, जिसने <nowiki>''संकलक''</nowiki> शब्द भी गढ़ा था, जो उसके [[A-0 प्रणाली]] से संबंधित है जो एक लोडर या लिंकर के रूप में कार्य करता है, न कि एक संकलक की आधुनिक धारणा में कार्य करता है। <ref name="computerhistory.org">[http://www.computerhistory.org/events/lectures/cobol_06121997/index.shtml] The World's First COBOL Compilers  {{webarchive |url=https://web.archive.org/web/20111013021915/http://www.computerhistory.org/events/lectures/cobol_06121997/index.shtml |date=13 October 2011 }}</ref>आधुनिक अर्थ में पहला [[ऑटोकोड|स्वयंकूट]] और संकलक [[एलिक ग्लेनी]] द्वारा 1952 में [[मैनचेस्टर विश्वविद्यालय]] में [[मैनचेस्टर मार्क 1|मार्क 1]] कंप्यूटर के लिए विकसित किया गया था।<ref>{{Cite journal |last1=Knuth|first1=Donald E.|last2=Pardo|first2=Luis Trabb|title=प्रोग्रामिंग भाषाओं का प्रारंभिक विकास|journal=Encyclopedia of Computer Science and Technology|volume=7|pages=419–493}}</ref><ref>{{cite book|url=https://books.google.com/books?id=kpYX_lNI0VMC|title=Digitized: The Science of Computers and how it Shapes Our World|first=Peter J.|last=Bentley|year=2012|publisher=Oxford University Press|page=87|isbn=9780199693795|url-status=live|archive-url=https://web.archive.org/web/20160829191955/https://books.google.com/books?id=kpYX_lNI0VMC|archive-date=29 August 2016}}</ref> [[आईबीएम]] में जॉन डब्ल्यू बैकस के नेतृत्व में फोरट्रान समूह ने 1957 में पहला व्यावसायिक रूप से उपलब्ध संकलक प्रस्तावित किया, जिसे बनाने में 18 व्यक्ति-वर्ष लगे थे।<ref>Backus et al. "The FORTRAN automatic coding system", Proc. AFIPS 1957 Western Joint Computer Conf., Spartan Books, Baltimore 188–198</ref>
पहला कार्यान्वित संकलक[[ ग्रेस हूपर ]]द्वारा लिखा गया था, जिसने <nowiki>''संकलक''</nowiki> शब्द भी गढ़ा था, जो उसके [[A-0 प्रणाली]] से संबंधित है जो एक लोडर या लिंकर के रूप में कार्य करता है, न कि एक संकलक की आधुनिक धारणा में कार्य करता है। <ref name="computerhistory.org">[http://www.computerhistory.org/events/lectures/cobol_06121997/index.shtml] The World's First COBOL Compilers  {{webarchive |url=https://web.archive.org/web/20111013021915/http://www.computerhistory.org/events/lectures/cobol_06121997/index.shtml |date=13 October 2011 }}</ref>आधुनिक अर्थ में पहला [[ऑटोकोड|स्वयंकूट]] और संकलक [[एलिक ग्लेनी]] द्वारा 1952 में [[मैनचेस्टर विश्वविद्यालय]] में [[मैनचेस्टर मार्क 1|मार्क 1]] कंप्यूटर के लिए विकसित किया गया था।<ref>{{Cite journal |last1=Knuth|first1=Donald E.|last2=Pardo|first2=Luis Trabb|title=प्रोग्रामिंग भाषाओं का प्रारंभिक विकास|journal=Encyclopedia of Computer Science and Technology|volume=7|pages=419–493}}</ref><ref>{{cite book|url=https://books.google.com/books?id=kpYX_lNI0VMC|title=Digitized: The Science of Computers and how it Shapes Our World|first=Peter J.|last=Bentley|year=2012|publisher=Oxford University Press|page=87|isbn=9780199693795|url-status=live|archive-url=https://web.archive.org/web/20160829191955/https://books.google.com/books?id=kpYX_lNI0VMC|archive-date=29 August 2016}}</ref> [[आईबीएम]] में जॉन डब्ल्यू बैकस के नेतृत्व में फोरट्रान समूह ने 1957 में पहला व्यावसायिक रूप से उपलब्ध संकलक प्रस्तावित किया, जिसे बनाने में 18 व्यक्ति-वर्ष लगे थे।<ref>Backus et al. "The FORTRAN automatic coding system", Proc. AFIPS 1957 Western Joint Computer Conf., Spartan Books, Baltimore 188–198</ref>


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


1960 तक, एक विस्तारित फोरट्रान संकलक, ALTAC, [[ फ़िल्को |फ़िल्को]] 2000 पर उपलब्ध था, इसलिए यह संभव है कि 1960 के मध्य में आईबीएम और फिल्को [[कंप्यूटर आर्किटेक्चर|कंप्यूटर संरचना]] दोनों के लिए एक फोरट्रान क्रमादेश संकलित किया गया था।<ref>[http://portal.acm.org/citation.cfm?id=808498] Rosen, Saul. ''ALTAC, FORTRAN, and compatibility''. Proceedings of the 1961 16th ACM national meeting</ref> पहली ज्ञात प्रदर्शित [[क्रॉस-प्लेटफॉर्म]] उच्च-स्तरीय भाषा [[COBOL]] थी। दिसंबर 1960 में एक प्रदर्शन में, [[UNIVAC II]] और [[RCA]] 501 दोनों पर एक COBOL क्रमादेश संकलित और निष्पादित किया गया था।<ref name="computerhistory.org" /><ref>{{cite web |last1=Norman |first1=Jeremy |title=ग्रेस हॉपर और सहकर्मियों ने COBOL का परिचय दिया|url=https://www.historyofinformation.com/detail.php?id=778 |website=HistoryOfInformation.com |publisher=Jeremy Norman |access-date=2022-12-14}}</ref>
1960 तक, एक विस्तारित फोरट्रान संकलक, ALTAC, [[ फ़िल्को |फ़िल्को]] 2000 पर उपलब्ध था, इसलिए यह संभव है कि 1960 के मध्य में आईबीएम और फिल्को [[कंप्यूटर आर्किटेक्चर|कंप्यूटर संरचना]] दोनों के लिए एक फोरट्रान क्रमादेश संकलित किया गया था।<ref>[http://portal.acm.org/citation.cfm?id=808498] Rosen, Saul. ''ALTAC, FORTRAN, and compatibility''. Proceedings of the 1961 16th ACM national meeting</ref> पहली ज्ञात प्रदर्शित [[क्रॉस-प्लेटफॉर्म]] उच्च-स्तरीय भाषा [[COBOL]] थी। दिसंबर 1960 में एक प्रदर्शन में, [[UNIVAC II]] और [[RCA]] 501 दोनों पर एक COBOL क्रमादेश संकलित और निष्पादित किया गया था।<ref name="computerhistory.org" /><ref>{{cite web |last1=Norman |first1=Jeremy |title=ग्रेस हॉपर और सहकर्मियों ने COBOL का परिचय दिया|url=https://www.historyofinformation.com/detail.php?id=778 |website=HistoryOfInformation.com |publisher=Jeremy Norman |access-date=2022-12-14}}</ref>
Line 46: Line 46:
== संदर्भ-मुक्त व्याकरण और पद व्याख्यायित्र ==
== संदर्भ-मुक्त व्याकरण और पद व्याख्यायित्र ==


एक [[ पदच्छेद |पद व्याख्यायित्र]] एक संकलक का महत्वपूर्ण घटक है। यह आंतरिक प्रतिनिधित्व के कुछ रूप बनाने के लिए कंप्यूटर क्रमादेशन भाषा के स्रोत कोड का पद व्याख्या करता है। क्रमादेशन भाषाओं को एक संदर्भ-मुक्त व्याकरण के संदर्भ में निर्दिष्ट किया जाता है क्योंकि उनके लिए तेज और सक्षम पद व्याख्यायित्र लिखे जा सकते हैं। पद व्याख्यायित्र को हाथ से लिखा जा सकता है या [[पार्सर जनरेटर|पद व्याख्यायित्र जनक]] द्वारा उत्पन्न किया जा सकता है। एक संदर्भ-मुक्त व्याकरण यह वर्णन करने के लिए एक सरल और सटीक तंत्र प्रदान करता है कि छोटे [[ब्लॉक (प्रोग्रामिंग)|ब्लॉक (क्रमादेशन)]] से क्रमादेशन भाषा का निर्माण कैसे किया जाता है। सन्दर्भ-मुक्त व्याकरण की औपचारिकता 1950 के दशक के मध्य में [[नोम चौमस्की]] द्वारा विकसित की गई थी।<ref name="chomsky1956">{{cite journal
एक [[ पदच्छेद |पद व्याख्यायित्र]] एक संकलक का महत्वपूर्ण घटक है। यह आंतरिक प्रतिनिधित्व के कुछ रूप बनाने के लिए कंप्यूटर क्रमादेशन भाषा के स्रोत कोड का पद व्याख्या करता है। क्रमादेशन भाषाओं को एक संदर्भ-मुक्त व्याकरण के संदर्भ में निर्दिष्ट किया जाता है क्योंकि उनके लिए तेज और सक्षम पद व्याख्यायित्र लिखे जा सकते हैं। पद व्याख्यायित्र को हाथ से लिखा जा सकता है या [[पार्सर जनरेटर|पद व्याख्यायित्र जनरेटर]] द्वारा उत्पन्न किया जा सकता है। एक संदर्भ-मुक्त व्याकरण यह वर्णन करने के लिए एक सरल और सटीक तंत्र प्रदान करता है कि छोटे [[ब्लॉक (प्रोग्रामिंग)|ब्लॉक (क्रमादेशन)]] से क्रमादेशन भाषा का निर्माण कैसे किया जाता है। सन्दर्भ-मुक्त व्याकरण की औपचारिकता 1950 के दशक के मध्य में [[नोम चौमस्की]] द्वारा विकसित की गई थी।<ref name="chomsky1956">{{cite journal
  | last = Chomsky | first = Noam | s2cid = 19519474 | title = Three models for the description of language
  | last = Chomsky | first = Noam | s2cid = 19519474 | title = Three models for the description of language
  | journal = IEEE Transactions on Information Theory
  | journal = IEEE Transactions on Information Theory
Line 64: Line 64:
नुथ ने प्रमाणित किया कि LR(''k'') व्याकरण को एक निष्पादन समय के साथ अनिवार्य रूप से क्रमादेश की लंबाई के अनुपात में पार्स किया जा सकता है जो  होता है, और यह ''k'' > 1 कि प्रत्येक LR(''k'') व्याकरण  को यांत्रिक रूप से उसी भाषा के लिए LR(1) व्याकरण में रूपांतरित किया जा सकता है। दूसरे शब्दों में, किसी भी नियतात्मक संदर्भ-मुक्त व्याकरण (DCFG) को पार्स करने के लिए केवल एक प्रतीक का होना आवश्यक है।<ref>{{cite web|last=Knuth|first=Donald|title=बायें से दायें भाषाओं के अनुवाद पर|url=http://www.cs.dartmouth.edu/~mckeeman/cs48/mxcom/doc/knuth65.pdf|access-date=29 May 2011|archive-url=https://web.archive.org/web/20120315152151/http://www.cs.dartmouth.edu/~mckeeman/cs48/mxcom/doc/knuth65.pdf|archive-date=15 March 2012|url-status=dead}}</ref>
नुथ ने प्रमाणित किया कि LR(''k'') व्याकरण को एक निष्पादन समय के साथ अनिवार्य रूप से क्रमादेश की लंबाई के अनुपात में पार्स किया जा सकता है जो  होता है, और यह ''k'' > 1 कि प्रत्येक LR(''k'') व्याकरण  को यांत्रिक रूप से उसी भाषा के लिए LR(1) व्याकरण में रूपांतरित किया जा सकता है। दूसरे शब्दों में, किसी भी नियतात्मक संदर्भ-मुक्त व्याकरण (DCFG) को पार्स करने के लिए केवल एक प्रतीक का होना आवश्यक है।<ref>{{cite web|last=Knuth|first=Donald|title=बायें से दायें भाषाओं के अनुवाद पर|url=http://www.cs.dartmouth.edu/~mckeeman/cs48/mxcom/doc/knuth65.pdf|access-date=29 May 2011|archive-url=https://web.archive.org/web/20120315152151/http://www.cs.dartmouth.edu/~mckeeman/cs48/mxcom/doc/knuth65.pdf|archive-date=15 March 2012|url-status=dead}}</ref>


कोरेन्जक (1969) सबसे पहले क्रमादेशन भाषाओं के लिए पदव्याख्या दिखाने वाले थे जिन्हें इन तकनीकों का उपयोग करके उत्पादित किया जा सकता था।<ref>Korenjak, A. "A Practical Method for Constructing LR(k) Processors", ''[[Communications of the ACM]]'', Vol. 12, No. 11, 1969</ref> फ्रैंक डीरेमर ने अधिक व्यावहारिक [[सरल एलआर पार्सर|सरल LR (SLR)]] और अग्रावलोकन [[LR (LALR)]] तकनीकों को तैयार किया, जो 1969 में एमआईटी में उनके पीएचडी शोध प्रबंध में प्रकाशित हुआ था।<ref>DeRemer, F. Practical Translators for LR(k) Languages. PhD dissertation, MIT, 1969.</ref><ref>DeRemer, F. "Simple LR(k) Grammars", ''[[Communications of the ACM]]'', Vol. 14, No. 7, 1971.</ref> यह एक महत्वपूर्ण सफलता थी, क्योंकि डोनाल्ड नुथ द्वारा परिभाषित LR(k) अनुवादक, 1960 और 1970 के दशक में कंप्यूटर प्रणाली पर कार्यान्वयन के लिए बहुत बड़े थे।
कोरेन्जक (1969) सबसे पहले क्रमादेशन भाषाओं के लिए पदव्याख्या दिखाने वाले थे जिन्हें इन तकनीकों का उपयोग करके उत्पादित किया जा सकता था।<ref>Korenjak, A. "A Practical Method for Constructing LR(k) Processors", ''[[Communications of the ACM]]'', Vol. 12, No. 11, 1969</ref> फ्रैंक डीरेमर ने अधिक व्यावहारिक [[सरल एलआर पार्सर|सरल LR (SLR)]] और अग्रावलोकन [[LR (LALR)]] तकनीकों को उत्पन्न किया, जो 1969 में एमआईटी में उनके पीएचडी शोध प्रबंध में प्रकाशित हुआ था।<ref>DeRemer, F. Practical Translators for LR(k) Languages. PhD dissertation, MIT, 1969.</ref><ref>DeRemer, F. "Simple LR(k) Grammars", ''[[Communications of the ACM]]'', Vol. 14, No. 7, 1971.</ref> यह एक महत्वपूर्ण सफलता थी, क्योंकि डोनाल्ड नुथ द्वारा परिभाषित LR(k) अनुवादक, 1960 और 1970 के दशक में कंप्यूटर प्रणाली पर कार्यान्वयन के लिए बहुत बड़े थे।


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


=== [[अर्ली पार्सर|अर्ली पदव्याख्या]] ===
=== [[अर्ली पार्सर|अर्ले]] [[अर्ली पार्सर|पदव्याख्या]] ===


1970 में, जे अर्ले ने आविष्कार किया [[जे अर्ली]] पदव्याख्या के रूप में जाना जाने लगा। अर्ली पद व्याख्यायित्र आकर्षक हैं क्योंकि वे सभी [[संदर्भ-मुक्त भाषा]]ओं को यथोचित सक्षमता से पार्स कर सकते हैं।<ref>J. Earley, [http://portal.acm.org/citation.cfm?doid=362007.362035 "An efficient context-free parsing algorithm"], ''Communications of the Association for Computing Machinery'', '''13''':2:94-102, 1970.</ref>
1970 में, जे अर्ले ने आविष्कार किया जिसे [[जे अर्ली|अर्ले]] पद व्याख्यायित्र के रूप में जाना जाने लगा। अर्ले पद व्याख्यायित्र आकर्षक हैं क्योंकि वे सभी [[संदर्भ-मुक्त भाषा|संदर्भ-मुक्त भाषाओं]] को यथोचित सक्षमता से पार्स कर सकते हैं।<ref>J. Earley, [http://portal.acm.org/citation.cfm?doid=362007.362035 "An efficient context-free parsing algorithm"], ''Communications of the Association for Computing Machinery'', '''13''':2:94-102, 1970.</ref>
== व्याकरण विवरण भाषाएँ ==
== व्याकरण विवरण भाषाएँ ==


जॉन बैकस ने धातुविज्ञान संबंधी सूत्र प्रस्तावित किए<ref>{{cite journal | last = Backus | first = J. W. | author-link = John W. Backus | year = 1959 | title = ज्यूरिख ACM-GAMM सम्मेलन की प्रस्तावित अंतर्राष्ट्रीय बीजगणितीय भाषा का वाक्य-विन्यास और शब्दार्थ| url = http://www.softwarepreservation.org/projects/ALGOL/paper/Backus-Syntax_and_Semantics_of_Proposed_IAL.pdf/view | journal = Proceedings of the International Conference on Information Processing | pages = 125–132 }}</ref><ref>{{cite web | website = Compiler Basics | last = Farrell | first = James A. | title = विस्तारित बैकस नौर फॉर्म| date = August 1995 | url = http://www.cs.man.ac.uk/~pjj/farrell/comp2.html#EBNF | access-date = 11 May 2011 }}</ref> नई क्रमादेशन भाषा IAL के वाक्य रचना का वर्णन करने के लिए, जिसे आज ALGOL 58 (1959) के रूप में जाना जाता है। बैकस का काम [[एमिल पोस्ट]] द्वारा तैयार की गई पोस्ट कैननिकल प्रणाली पर आधारित था।
जॉन बैकस ने नई क्रमादेशन भाषा IAL,<ref>{{cite journal | last = Backus | first = J. W. | author-link = John W. Backus | year = 1959 | title = ज्यूरिख ACM-GAMM सम्मेलन की प्रस्तावित अंतर्राष्ट्रीय बीजगणितीय भाषा का वाक्य-विन्यास और शब्दार्थ| url = http://www.softwarepreservation.org/projects/ALGOL/paper/Backus-Syntax_and_Semantics_of_Proposed_IAL.pdf/view | journal = Proceedings of the International Conference on Information Processing | pages = 125–132 }}</ref><ref>{{cite web | website = Compiler Basics | last = Farrell | first = James A. | title = विस्तारित बैकस नौर फॉर्म| date = August 1995 | url = http://www.cs.man.ac.uk/~pjj/farrell/comp2.html#EBNF | access-date = 11 May 2011 }}</ref> जिसे आज ALGOL 58 (1959) के रूप में जाना जाता है के वाक्य रचना का वर्णन करने के लिए <nowiki>''अधि भाषाविज्ञान सूत्र''</nowiki> प्रस्तावित किया था। बैकस का काम [[एमिल पोस्ट|एमिल पद]] द्वारा प्रकल्पित की गई पद विहित प्रणाली पर आधारित था।


ALGOL के और विकास के कारण [[ALGOL 60]]; अपनी रिपोर्ट (1963) में, [[पीटर नौर]] ने बैकस के नोटेशन बैकस नॉर्मल फॉर्म (बीएनएफ) का नाम दिया, और उपयोग किए गए वर्ण सेट को कम करने के लिए इसे सरल बनाया। हालांकि, डोनाल्ड नुथ ने तर्क दिया कि बीएनएफ को बैकस-नौर फॉर्म के रूप में पढ़ा जाना चाहिए,<ref>Donald E. Knuth, "Backus Normal Form vs. Backus Naur Form", ''[[Communications of the ACM]]'', 7(12):735–736, 1964.</ref> और यह सामान्यतः स्वीकृत उपयोग बन गया है।
ALGOL के और विकास के कारण [[ALGOL 60]]; अपनी प्रतिवेदन (1963) में, [[पीटर नौर]] ने बैकस के अंकन बैकस सामान्य रूप (बीएनएफ) का नाम दिया, और उपयोग किए गए वर्ण समुच्चय को कम करने के लिए इसे सरल बनाया गया। हालांकि, डोनाल्ड नुथ ने तर्क दिया कि बीएनएफ को बैकस-नौर प्रपत्र के रूप में पढ़ा जाना चाहिए,<ref>Donald E. Knuth, "Backus Normal Form vs. Backus Naur Form", ''[[Communications of the ACM]]'', 7(12):735–736, 1964.</ref> और यह सामान्यतः स्वीकृत उपयोग बन गया है।


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


== पदव्याख्या जेनरेटर ==
== पदव्याख्यायित्र जेनरेटर ==
{{Hatnote|For a more complete list, which also includes LL, SLR, GLR and LR parser generators, see [[Comparison of parser generators]]}}
{{Hatnote|अधिक संपूर्ण सूची के लिए, जिसमें एलएल, एसएलआर, जीएलआर और एलआर पद व्याख्यायित्र जनरेटर भी सम्मलित हैं, देखें [[पद व्याख्यायित्र जनरेटर की तुलना]]}}


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


उस नाम का उपयोग करने वाला पहला संकलक-संकलक 1960 में [[टोनी ब्रूकर]] द्वारा लिखा गया था और [[एटलस ऑटोकोड]] संकलक सहित मैनचेस्टर विश्वविद्यालय में [[एटलस कंप्यूटर (मैनचेस्टर)]] कंप्यूटर के लिए संकलक बनाने के लिए उपयोग किया गया था। हालाँकि यह आधुनिक संकलक-संकलक से अलग था, और आज शायद इसे एक उच्च अनुकूलन योग्य जेनेरिक संकलक और विस्तरणीय क्रमादेशन | विस्तरणीय-वाक्य रचना भाषा के बीच कहीं होने के रूप में वर्णित किया जाएगा। संकलक-संकलक नाम अधिकांश आधुनिक संकलक-संकलक की तुलना में ब्रूकर की प्रणाली के लिए कहीं अधिक उपयुक्त था, जिन्हें पदव्याख्या जनक के रूप में अधिक सटीक रूप से वर्णित किया गया है। यह लगभग तय है कि ब्रोकर के काम को याद किए जाने के बजाय Yacc के कारण संकलक-संकलक नाम आम उपयोग में आ गया है।{{Citation needed|date=February 2007}}
उस नाम का उपयोग करने वाला पहला संकलक-संकलक 1960 में [[टोनी ब्रूकर]] द्वारा लिखा गया था और [[एटलस ऑटोकोड]] संकलक सहित मैनचेस्टर विश्वविद्यालय में [[एटलस कंप्यूटर (मैनचेस्टर)|एटलस कंप्यूटर]] के लिए संकलक बनाने के लिए उपयोग किया गया था। हालाँकि यह आधुनिक संकलक-संकलक से अलग था, और आज सम्भवतः इसे एक उच्च अनुकूलन योग्य सामान्य संकलक और विस्तरणीय क्रमादेशन भाषा के मध्य कहीं होने के रूप में वर्णित किया जाएगा। <nowiki>''</nowiki>संकलक-संकलक<nowiki>''</nowiki> नाम अधिकांश आधुनिक संकलक-संकलक की तुलना में ब्रूकर की प्रणाली के लिए कहीं अधिक उपयुक्त था, जिन्हें पदव्याख्या जनरेटर के रूप में अधिक सटीक रूप से वर्णित किया गया है। यह लगभग निश्चित है कि ब्रोकर के काम को याद किए जाने के बदले <nowiki>''</nowiki>संकलक-संकलक<nowiki>''</nowiki> नाम Yacc के कारण सामान्य उपयोग में आ गया है।{{Citation needed|date=February 2007}}


1960 के दशक की शुरुआत में, [[ टेक्सस उपकरण ]]्स में रॉबर्ट मैकक्लेर ने TMG (भाषा) नामक एक संकलक-संकलक का आविष्कार किया, जिसका नाम ट्रांसमोग्रिफिकेशन से लिया गया।<ref>{{cite web|url=http://www.reocities.com/ResearchTriangle/2363/tmg011.html|title=टीएमजी मेटा कंपाइलर|work=reocities.com|access-date=30 June 2011|archive-url=https://web.archive.org/web/20160304054659/http://www.reocities.com/ResearchTriangle/2363/tmg011.html|archive-date=4 March 2016|url-status=dead}}</ref><ref>{{cite web |url=http://hopl.murdoch.edu.au/showlanguage.prx?exp=242 |title=कंप्यूटर भाषाओं का विश्वकोश|access-date=2011-06-30 |url-status=dead |archive-url=https://web.archive.org/web/20070921161049/http://hopl.murdoch.edu.au/showlanguage.prx?exp=242 |archive-date=21 September 2007 }}</ref><ref>{{cite book|url=http://portal.acm.org/citation.cfm?id=806050&dl=ACM&coll=DL&CFID=29658196&CFTOKEN=62044584|title=Programming languages for non-numeric processing—1|work=acm.org|year=1965 |doi=10.1145/800197.806050 |last1=McClure |first1=R. M. |pages=262–274 |isbn=9781450374958 |s2cid=44606611 }}</ref><ref>R. M. McClure, ''TMG—A Syntax Directed Compiler'' Proc. 20th ACM National Conf. (1965), pp. 262–274.</ref> बाद के वर्षों में TMG कई [[UNIVAC]] और IBM मेनफ्रेम कंप्यूटरों को [[में porting]] कर रहा था।
1960 के दशक की आरंभ में, [[ टेक्सस उपकरण |टेक्सस उपकरण]] में रॉबर्ट मैकक्लेर ने TMG (भाषा) नामक एक संकलक-संकलक का आविष्कार किया, जिसका नाम <nowiki>''</nowiki>ट्रांसमोग्रिफिकेशन<nowiki>''</nowiki> से लिया गया।<ref>{{cite web|url=http://www.reocities.com/ResearchTriangle/2363/tmg011.html|title=टीएमजी मेटा कंपाइलर|work=reocities.com|access-date=30 June 2011|archive-url=https://web.archive.org/web/20160304054659/http://www.reocities.com/ResearchTriangle/2363/tmg011.html|archive-date=4 March 2016|url-status=dead}}</ref><ref>{{cite web |url=http://hopl.murdoch.edu.au/showlanguage.prx?exp=242 |title=कंप्यूटर भाषाओं का विश्वकोश|access-date=2011-06-30 |url-status=dead |archive-url=https://web.archive.org/web/20070921161049/http://hopl.murdoch.edu.au/showlanguage.prx?exp=242 |archive-date=21 September 2007 }}</ref><ref>{{cite book|url=http://portal.acm.org/citation.cfm?id=806050&dl=ACM&coll=DL&CFID=29658196&CFTOKEN=62044584|title=Programming languages for non-numeric processing—1|work=acm.org|year=1965 |doi=10.1145/800197.806050 |last1=McClure |first1=R. M. |pages=262–274 |isbn=9781450374958 |s2cid=44606611 }}</ref><ref>R. M. McClure, ''TMG—A Syntax Directed Compiler'' Proc. 20th ACM National Conf. (1965), pp. 262–274.</ref> बाद के वर्षों में TMG को कई [[UNIVAC]] और IBM मेनफ्रेम कंप्यूटरों [[में porting|में पोर्ट]] किया गया।


[[ मॉलटिक्स ]] परियोजना, एमआईटी और [[बेल लैब्स]] के बीच एक संयुक्त उद्यम, एक उच्च-स्तरीय भाषा में एक [[ऑपरेटिंग सिस्टम|ऑपरेटिंग प्रणाली]] विकसित करने वाले पहले में से एक था। पीएल/आई को भाषा के रूप में चुना गया था, लेकिन एक बाहरी आपूर्तिकर्ता काम करने वाले संकलक की आपूर्ति नहीं कर सका।<ref>{{cite web|url=http://multicians.org/pl1.html|title=Multics PL/I|work=multicians.org}}</ref> मल्टिक्स टीम ने 1964 में अपनी कार्यान्वयन भाषा के रूप में प्रारंभिक PL/I (EPL) के रूप में जानी जाने वाली PL/I की अपनी स्वयं की सबसेट बोली विकसित की। TMG को GE-600 श्रृंखला में पोर्ट किया गया और [[डगलस मैक्लॉयय]], [[रॉबर्ट मॉरिस (क्रिप्टोग्राफर)]] द्वारा EPL विकसित करने के लिए उपयोग किया गया। , और दूसरे।
[[ मॉलटिक्स |मॉलटिक्स]] परियोजना, एमआईटी और [[बेल लैब्स]] के मध्य एक संयुक्त उद्यम, एक उच्च-स्तरीय भाषा में एक [[ऑपरेटिंग सिस्टम|संचालन प्रणाली]] विकसित करने वाले पहले में से एक था। पीएल/आई को भाषा के रूप में चयन किया गया था, लेकिन एक बाहरी आपूर्तिकर्ता काम करने वाले संकलक की आपूर्ति नहीं कर सकता है।<ref>{{cite web|url=http://multicians.org/pl1.html|title=Multics PL/I|work=multicians.org}}</ref> मल्टिक्स समूह ने 1964 में अपनी कार्यान्वयन भाषा के रूप में प्रारंभिक PL/I (EPL) के रूप में जानी जाने वाली PL/I की अपनी स्वयं की सबसमुच्चय बोली विकसित की थी। TMG को GE-600 श्रृंखला में पोर्ट किया गया था और [[डगलस मैक्लॉयय]], [[रॉबर्ट मॉरिस (क्रिप्टोग्राफर)]] और अन्य द्वारा EPL को विकसित करने के लिए उपयोग किया गया था।


1969 में [[केन थॉम्पसन]] द्वारा [[PDP-7]] के लिए [[यूनिक्स]] का पहला संस्करण लिखे जाने के कुछ ही समय बाद, डगलस मैक्लरॉय ने नई प्रणाली की पहली उच्च-स्तरीय भाषा बनाई: McClure के TMG का कार्यान्वयन।<ref>{{cite web|url=http://cm.bell-labs.com/who/dmr/chist.html |title=शुद्ध|access-date=2011-08-03 |url-status=dead |archive-url=https://archive.today/20150110214721/http://cm.bell-labs.com/who/dmr/chist.html |archive-date=10 January 2015 }} Dennis M. Ritchie. ''The Development of the C Language''</ref> TMG 1970 में अपने PDP-7 पर [[सी प्रोग्रामिंग भाषा|सी क्रमादेशन भाषा]] के लिए संकलक लिखने के लिए केन थॉम्पसन द्वारा उपयोग किया गया संकलक डेफिनिशन टूल भी था। B[[बी प्रोग्रामिंग भाषा|बी क्रमादेशन भाषा]] भाषा का तत्काल पूर्वज था।
1969 में [[केन थॉम्पसन]] द्वारा [[PDP-7]] के लिए [[यूनिक्स]] का पहला संस्करण लिखे जाने के कुछ ही समय बाद, डगलस मैक्लरॉय ने नई प्रणाली की पहली उच्च-स्तरीय भाषा बनाई: McClure के TMG का कार्यान्वयन।<ref>{{cite web|url=http://cm.bell-labs.com/who/dmr/chist.html |title=शुद्ध|access-date=2011-08-03 |url-status=dead |archive-url=https://archive.today/20150110214721/http://cm.bell-labs.com/who/dmr/chist.html |archive-date=10 January 2015 }} Dennis M. Ritchie. ''The Development of the C Language''</ref> TMG 1970 में अपने PDP-7 पर [[बी प्रोग्रामिंग भाषा|B क्रमादेशन भाषा]] के लिए संकलक लिखने के लिए उपयोग किया गया संकलक डेफिनिशन टूल भी था, जो [[सी प्रोग्रामिंग भाषा|C]] का तत्काल पूर्वज था।


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


=== [[एक्सपीएल]] ===
=== एक्सपीएल ===


XPL PL/I क्रमादेशन भाषा की एक बोली है, जिसका उपयोग कंप्यूटर भाषाओं के लिए संकलक के विकास के लिए किया जाता है। इसे 1967 में विलियम एम. मैककिमैन, जिम हॉर्निंग | जेम्स जे. हॉर्निंग, और डेविड वोर्टमैन | डेविड बी. वोर्टमैन के साथ एक टीम द्वारा [[स्टैनफोर्ड विश्वविद्यालय]] और कैलिफोर्निया विश्वविद्यालय, सांता क्रूज़ में डिजाइन और कार्यान्वित किया गया था। इसकी घोषणा पहली बार 1968 में सैन फ्रांसिस्को में [[ पतन संयुक्त कंप्यूटर सम्मेलन ]] में की गई थी।<ref>McKeeman, William Marshall; Horning, James J.; and Wortman, David B., ''A Compiler Generator'' (1971),  {{ISBN|978-0-13-155077-3}}.</ref><ref>Computer Science Department, [[University of Toronto]], [http://www.cs.toronto.edu/XPL/ "The XPL Programming Language"]</ref>
XPL PL/I क्रमादेशन भाषा की एक बोली है, जिसका उपयोग कंप्यूटर भाषाओं के लिए संकलक के विकास के लिए किया जाता है। इसे 1967 में [[स्टैनफोर्ड विश्वविद्यालय]] और कैलिफोर्निया विश्वविद्यालय, सांताक्रूज में विलियम एम. मैककिमैन, जेम्स जे. हॉर्निंग और डेविड बी. वोर्टमैन के साथ एक समूह द्वारा, अभिकल्प और कार्यान्वित किया गया था। इसकी घोषणा पहली बार 1968 में सैन फ्रांसिस्को में[[ पतन संयुक्त कंप्यूटर सम्मेलन | सैन फ्रांसिस्को]] में संयुक्त कम्प्यूटर सम्मेलन पतन में की गई थी।<ref>McKeeman, William Marshall; Horning, James J.; and Wortman, David B., ''A Compiler Generator'' (1971),  {{ISBN|978-0-13-155077-3}}.</ref><ref>Computer Science Department, [[University of Toronto]], [http://www.cs.toronto.edu/XPL/ "The XPL Programming Language"]</ref>
XPL में अपेक्षाकृत सरल [[ संकलक-संकलक ]] डब किया गया XPL#ANALYZER, [[नीचे-ऊपर पार्सिंग|नीचे-ऊपर पदव्याख्या]]|बॉटम-अप संकलक प्रिडेंस पदव्याख्या तकनीक जिसे Shift-reduce parser#MSP (मिश्रित रणनीति वरीयता) कहा जाता है, पर आधारित है। XPL को IBM प्रणाली/360 कंप्यूटर पर बरोज़ एल्गोल के माध्यम से बूटस्ट्रैप किया गया था। (टोरंटो विश्वविद्यालय की आंतरिक परियोजनाओं में उपयोग किए गए XPL के कुछ बाद के संस्करणों ने एक SLR(1) पदव्याख्या का उपयोग किया, लेकिन उन कार्यान्वयनों को कभी वितरित नहीं किया गया)।
 
XPL में अपेक्षाकृत सरलअनुवादक लेखन प्रणाली है जिसे एनालाइज़र कहा जाता है, MSP (मिश्रित रणनीति प्राथमिकता) नामक एक समानयन संकलक प्राथमिकता पदव्याख्या तकनीक पर आधारित है। XPL को IBM प्रणाली/360 कंप्यूटर पर बरोज़ एल्गोल के माध्यम से बूटस्ट्रैप किया गया था। (टोरंटो विश्वविद्यालय की आंतरिक परियोजनाओं में उपयोग किए गए XPL के कुछ बाद के संस्करणों ने एक SLR(1) पदव्याख्या का उपयोग किया, लेकिन उन कार्यान्वयनों को कभी वितरित नहीं किया गया)।


=== वाईएसीसी ===
=== वाईएसीसी ===


Yacc एक पदव्याख्या जनक (शिथिल, संकलक-संकलक) है, जिसे [[लेक्स प्रोग्रामिंग टूल|लेक्स क्रमादेशन टूल]] के साथ भ्रमित नहीं होना चाहिए, जो कि Yacc द्वारा पहले चरण के रूप में प्रायः उपयोग किया जाने वाला एक [[शाब्दिक विश्लेषण]] है। Yacc को स्टीफन सी. जॉनसन द्वारा AT&T में यूनिक्स ऑपरेटिंग प्रणाली के लिए विकसित किया गया था।<ref>Johnson, S.C., "Yacc – Yet Another Compiler-Compiler", ''Computing Science Technical Report'' 32, AT&T Bell Labs, 1975</ref> नाम [[अभी तक एक और]] [[संकलक संकलक]] के लिए एक संक्षिप्त नाम है। यह बैकस-नौर फॉर्म के समान एक नोटेशन में लिखे गए व्याकरण के आधार पर एक एलएएलआर (1) संकलक उत्पन्न करता है।
Yacc एक पदव्याख्या जनरेटर (शिथिल, संकलक-संकलक) है, जिसे [[लेक्स प्रोग्रामिंग टूल|लेक्स]] के साथ भ्रमित नहीं होना चाहिए, जो कि एक [[शाब्दिक विश्लेषण]] है जिसे प्रायः Yacc द्वारा पहले चरण के रूप में उपयोग किया जाता है। Yacc को स्टीफन सी. जॉनसन द्वारा AT&T में यूनिक्स संचालन प्रणाली के लिए विकसित किया गया था।<ref>Johnson, S.C., "Yacc – Yet Another Compiler-Compiler", ''Computing Science Technical Report'' 32, AT&T Bell Labs, 1975</ref> यह नाम [[अभी तक एक और|<nowiki>''</nowiki>अभी तक एक और]] [[संकलक संकलक|संकलक संकलक<nowiki>''</nowiki>]] का संक्षिप्त रूप है। यह बैकस-नौर प्रपत्र के समान एक अंकन में लिखे गए व्याकरण के आधार पर एक एलएएलआर (1) संकलक उत्पन्न करता है।


जॉनसन ने 1970 के दशक की शुरुआत में बेल लैब्स में Yacc पर काम किया।<ref>{{cite web|url=http://www.techworld.com.au/article/252319/a-z_programming_languages_yacc/|title=The A-Z of Programming Languages: YACC|first=Naomi|last=Hamilton|work=TechWorld}}</ref> वह TMG से परिचित थे और इसका प्रभाव Yacc और C क्रमादेशन भाषा के डिजाइन में देखा जा सकता है। क्योंकि अधिकांश यूनिक्स प्रणालियों पर Yacc डिफ़ॉल्ट संकलक जनक था, इसे व्यापक रूप से वितरित और उपयोग किया गया था। [[जीएनयू बाइसन]] जैसे संजात अभी भी उपयोग में हैं।
जॉनसन ने 1970 के दशक के आरंभ में बेल लैब्स में Yacc पर काम किया।<ref>{{cite web|url=http://www.techworld.com.au/article/252319/a-z_programming_languages_yacc/|title=The A-Z of Programming Languages: YACC|first=Naomi|last=Hamilton|work=TechWorld}}</ref> वह TMG से परिचित थे और इसका प्रभाव Yacc और C क्रमादेशन भाषा के प्रारुप में देखा जा सकता है। अधिकांश यूनिक्स प्रणालियों पर Yacc व्यतिक्रम संकलक जनरेटर था, इसे व्यापक रूप से वितरित और उपयोग किया गया था। [[जीएनयू बाइसन]] जैसे संजात अभी भी उपयोग में हैं।


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


=== कोको/आर ===
=== कोको/आर ===


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


=== एएनटीएलआर ===
=== एएनटीएलआर ===


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


== मेटाकंपलर ==
== अधि संकलक ==
{{Main|metacompiler}}
{{Main|अधि संकलक}}


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


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


कई मेटासंकलक मेटाकंपलर#श्योरे धातुभाषाओं के काम पर निर्मित होते हैं। उनका META II संकलक, जो पहली बार 1964 में रिलीज़ हुआ था, पहला प्रलेखित मेटासंकलक था। अपनी स्वयं की भाषा और अन्य को परिभाषित करने में सक्षम, META II ने औपचारिक व्याकरण # विश्लेषणात्मक व्याकरणों को स्वीकार किया है जिसमें [[कोड जनरेशन (संकलक)]] | आउटपुट (कोड उत्पादन) सम्मलित हैं। यह [[ आभासी मशीन ]] के आरम्भिक उदाहरणों में से एक में भी अनुवादित है। निर्मित टोकन पहचानने वाले कार्यों द्वारा लेक्सिकल विश्लेषण किया गया था: .ID, .STRING और .NUMBER। वाक्य-विन्यास सूत्र में उद्धरित स्ट्रिंग्स उन शब्दों को पहचानते हैं जिन्हें नहीं रखा जाता है।<ref>{{cite book|chapter-url=http://portal.acm.org/citation.cfm?id=808896&dl=ACM&coll=&CFID=15151515&CFTOKEN=6184618|chapter=META II a syntax-oriented compiler writing language|work=acm.org|year=1964 |doi=10.1145/800257.808896 |last1=Schorre |first1=D. V. |title=Proceedings of the 1964 19th ACM national conference |pages=41.301–41.3011 |isbn=9781450379182 |s2cid=43144779 }}</ref>
कई अधि संकलक डेवी वैल शोरे के काम पर निर्मित होते हैं। उनका META II संकलक, जो पहली बार 1964 में स्रावित हुआ था, पहला प्रलेखित अधि संकलक था। अपनी स्वयं की भाषा और अन्य को परिभाषित करने में सक्षम, META II ने वाक्य रचना सूत्र को सन्निहित आउटपुट (कोड उत्पादन) के साथ स्वीकार किया हैं। यह[[ आभासी मशीन ]]के आरम्भिक उदाहरणों में से एक में भी अनुवादित है। निर्मित टोकन पहचानने वाले फलन द्वारा लेक्सिकल विश्लेषण किया गया था: .ID, .STRING और .NUMBER वाक्य-विन्यास सूत्र में उद्धरित स्ट्रिंग्स उन शब्दों को पहचानते हैं जिन्हें नहीं रखा जाता है।<ref>{{cite book|chapter-url=http://portal.acm.org/citation.cfm?id=808896&dl=ACM&coll=&CFID=15151515&CFTOKEN=6184618|chapter=META II a syntax-oriented compiler writing language|work=acm.org|year=1964 |doi=10.1145/800257.808896 |last1=Schorre |first1=D. V. |title=Proceedings of the 1964 19th ACM national conference |pages=41.301–41.3011 |isbn=9781450379182 |s2cid=43144779 }}</ref>
[[ट्री-मेटा]], एक दूसरी पीढ़ी का शोर्रे मेटासंकलक, 1968 के आसपास दिखाई दिया। इसने व्याकरण विश्लेषण से कोड उत्पादन को अलग करने वाले अनपार्स नियमों को जोड़ते हुए मेटा II की क्षमताओं को बढ़ाया। वाक्य रचना सूत्र में ट्री ट्रांसफ़ॉर्म ऑपरेशंस अमूर्त वाक्य रचना ट्री उत्पन्न करते हैं जो कि अनपार्स नियम संचालित होते हैं। अनपार्स ट्री पैटर्न मिलान ने [[पीपहोल अनुकूलन]] क्षमता प्रदान की।
 
[[ट्री-मेटा]], एक दूसरी पीढ़ी का शोर्रे अधि संकलक, 1968 के आसपास दिखाई दिया था। इसने व्याकरण विश्लेषण से कोड उत्पादन को अलग करने वाले अनपार्स नियमों को जोड़कर मेटा II की क्षमताओं को बढ़ाया था। वाक्य रचना सूत्र में ट्री परिवर्तन संचालन अमूर्त वाक्य रचना ट्री उत्पन्न करते हैं जो कि अनपार्स नियम संचालित होते हैं। अनपार्स ट्री पैटर्न सुमेलन ने [[पीपहोल अनुकूलन|अवलोकन छिद्र अनुकूलन]] क्षमता प्रदान की थी।


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


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


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


== [[क्रॉस संकलन]] ==
== क्रॉस संकलन ==


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


क्रॉस संकलन का एक प्रारंभिक उदाहरण एआईएमआईसीओ था, जहां [[आईबीएम 705]] के लिए असेंबली भाषा उत्पन्न करने के लिए यूनीवैक II पर एक फ्लो-मैटिक क्रमादेश का उपयोग किया गया था, जिसे आईबीएम कंप्यूटर पर इकट्ठा किया गया था।<ref name="computerhistory.org" />
क्रॉस संकलन का एक प्रारंभिक उदाहरण एआईएमआईसीओ था, जहां [[आईबीएम 705]] के लिए कोडांतरण भाषा उत्पन्न करने के लिए यूनीवैक II पर एक प्रवाह-मैटिक क्रमादेश का उपयोग किया गया था, जिसे आईबीएम कंप्यूटर पर संकलित किया गया था।<ref name="computerhistory.org" />


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


== ऑप्टिमाइज़िंग संकलक ==
== संकलक का अनुकूलन ==


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


पहले [[फोरट्रान]] संकलक के डेवलपर्स का उद्देश्य कोड उत्पन्न करना था जो औसत हाथ-कोडित कोडांतरक से बेहतर था, ताकि ग्राहक वास्तव में अपने उत्पाद का उपयोग कर सकें। पहले वास्तविक संकलक में से एक में, वे प्रायः सफल हुए।<ref>{{cite web|url=http://compilers.iecc.com/comparch/article/97-10-017|title=Comp.compilers: Re: History and evolution of compilers|work=iecc.com}}</ref>
पहले [[फोरट्रान]] संकलक के डेवलपर्स का उद्देश्य कोड उत्पन्न करना था जो सामान्य हाथ-कोडित कोडांतरक से बेहतर था, जिसके वजह से ग्राहक वास्तव में अपने उत्पाद का उपयोग कर सकें। पहले वास्तविक संकलक में से एक में, वे प्रायः सफल हुए थे।<ref>{{cite web|url=http://compilers.iecc.com/comparch/article/97-10-017|title=Comp.compilers: Re: History and evolution of compilers|work=iecc.com}}</ref>
बाद के संकलक, जैसे आईबीएम के फोरट्रान # फोरट्रान IV संकलक, अच्छे डायग्नोस्टिक्स पर अधिक प्राथमिकता देते हैं और अभिलक्ष्य कोड ऑप्टिमाइज़ेशन की कीमत पर अधिक तेज़ी से निष्पादित करते हैं। आईबीएम प्रणाली/360 आर्किटेक्चर | आईबीएम प्रणाली/360 श्रृंखला तक आईबीएम ने दो अलग-अलग संकलक प्रदान नहीं किए थे - एक तेज़-निष्पादन कोड चेकर, और एक धीमा, एक का अनुकूलन।
 
बाद के संकलक IV संकलक जैसे बाद के संकलक के अच्छे निदानिकी पर अधिक प्राथमिकता देते हैं और अभिलक्ष्य कोड इष्टतमीकरण की कीमत पर अधिक तेज़ी से निष्पादित करते हैं। यह आईबीएम प्रणाली/360 श्रृंखला तक नहीं था कि आईबीएम ने दो अलग-अलग संकलक प्रदान नहीं किए - एक तेजी से निष्पादन कोड जाँचकर्ता, और एक धीमा, एक का अनुकूलन था।


फ्रांसिस ई. एलन ने [[जॉन कॉके (कंप्यूटर वैज्ञानिक)]] के साथ अकेले और संयुक्त रूप से काम करते हुए अनुकूलन के लिए कई अवधारणाएं प्रस्तावित कीं। एलन का 1966 का दस्तावेज़, क्रमादेश ऑप्टिमाइजेशन,<ref>[[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.</ref> ऑप्टिमाइज़ेशन के लिए क्रमादेश सामग्री को एन्कोड करने के लिए ग्राफ़ (डेटा संरचना) का उपयोग शुरू किया।<ref>{{cite book |first1=Frances E. |last1=Allen |first2=John |last2=Cocke |title=Graph-Theoretic Constructs for Program Control Flow Analysis (RC 3923) |date=11 July 1972 |publisher=IBM Thomas J. Watson Research Center |location=Yorktown Heights, NY |url=https://dominoweb.draco.res.ibm.com/reports/rc3923.pdf |access-date=6 May 2021}}</ref> उनके 1970 के दस्तावेज़, कंट्रोल फ्लो एनालिसिस<ref>Frances E. Allen. "Control flow analysis". ''ACM SIGPLAN Notices'', 5(7):1–19, July 1970.</ref> और कार्यक्रम अनुकूलन के लिए एक आधार<ref>Frances E. Allen. "A basis for program optimization".
फ्रांसिस ई. एलन ने [[जॉन कॉके (कंप्यूटर वैज्ञानिक)]] के साथ अकेले और संयुक्त रूप से काम करते हुए अनुकूलन के लिए कई अवधारणाएं प्रस्तावित किया। एलन का 1966 का दस्तावेज़, क्रमादेश इष्टतमीकरण,<ref>[[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.</ref> ने अनुकूलन के लिए क्रमादेश विषय सूची को कोडित करने के लिए आलेख डेटा संरचनाओं के उपयोग का आरंभ किया था।<ref>{{cite book |first1=Frances E. |last1=Allen |first2=John |last2=Cocke |title=Graph-Theoretic Constructs for Program Control Flow Analysis (RC 3923) |date=11 July 1972 |publisher=IBM Thomas J. Watson Research Center |location=Yorktown Heights, NY |url=https://dominoweb.draco.res.ibm.com/reports/rc3923.pdf |access-date=6 May 2021}}</ref> उनके 1970 के दस्तावेज़, नियंत्रण प्रवाह विश्लेषण<ref>Frances E. Allen. "Control flow analysis". ''ACM SIGPLAN Notices'', 5(7):1–19, July 1970.</ref> और क्रमादेश अनुकूलन के लिए एक आधार<ref>Frances E. Allen. "A basis for program optimization".
In ''Proc. IFIP Congress 71'', pages 385–390. North-Holland, 1972.</ref> सक्षम और प्रभावी डेटा प्रवाह विश्लेषण और अनुकूलन के संदर्भ के रूप में स्थापित अंतराल। कॉके के साथ उनका 1971 का दस्तावेज़, ए कैटलॉग ऑफ़ ऑप्टिमाइज़िंग ट्रांसफ़ॉर्मेशन,<ref>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.</ref> अनुकूलन परिवर्तनों का पहला विवरण और व्यवस्थितकरण प्रदान किया। उसके 1973 और 1974 के अंतर-प्रक्रियात्मक डेटा-प्रवाह विश्लेषण के पत्रों ने विश्लेषण को पूरे क्रमादेश तक विस्तारित किया।<ref>Frances E. Allen. "Interprocedural data flow analysis". In Proc. IFIP Congress 74, pages 398–402. North-Holland, 1974.</ref><ref>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.</ref> कॉके के साथ उनका 1976 का दस्तावेज़ आज संकलक को अनुकूलित करने में उपयोग की जाने वाली दो मुख्य विश्लेषण रणनीतियों में से एक का वर्णन करता है।<ref>Frances E. Allen and John Cocke. "A program data flow analysis procedure", ''Communications of the ACM'', 19(3):137–147, March 1976.</ref>
In ''Proc. IFIP Congress 71'', pages 385–390. North-Holland, 1972.</ref> ने सक्षम और प्रभावी डेटा प्रवाह विश्लेषण और अनुकूलन के संदर्भ के रूप में अंतराल की स्थापना की थी। कॉके के साथ उनका 1971 का दस्तावेज़, परिवर्तनों के अनुकूलन की एक सूची,<ref>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.</ref> अनुकूलन परिवर्तनों का पहला विवरण और व्यवस्थितकरण प्रदान करता है। उसके 1973 और 1974 के अंतर-प्रक्रियात्मक डेटा-प्रवाह विश्लेषण के पत्रों ने विश्लेषण को पूरे क्रमादेश तक विस्तारित किया था।<ref>Frances E. Allen. "Interprocedural data flow analysis". In Proc. IFIP Congress 74, pages 398–402. North-Holland, 1974.</ref><ref>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.</ref> कॉके के साथ उनका 1976 का दस्तावेज़ आज संकलक को अनुकूलित करने में उपयोग की जाने वाली दो मुख्य विश्लेषण रणनीतियों में से एक का वर्णन करता है।<ref>Frances E. Allen and John Cocke. "A program data flow analysis procedure", ''Communications of the ACM'', 19(3):137–147, March 1976.</ref>
एलन ने [[आईबीएम 7030 स्ट्रेच]]-[[आईबीएम 7950 हार्वेस्ट]] और प्रायोगिक [[एसीएस-1]] के लिए संकलक के हिस्से के रूप में अपने तरीकों को विकसित और कार्यान्वित किया। इस कार्य ने आधुनिक मशीन- और भाषा-स्वतंत्र ऑप्टिमाइज़र की व्यवहार्यता और संरचना स्थापित की। वह फोरट्रान क्रमादेश के स्वत: समानांतर निष्पादन पर पीटीआरएएन परियोजना की स्थापना और नेतृत्व करने के लिए आगे बढ़ीं।<ref>{{cite book |last1=Sarkar |first1=Vivek |title=समानांतर कार्यात्मक भाषाएं और संकलक|date=1991 |publisher=Association for Computing Machinery |location=New York, NY |isbn=0201522438 |pages=309–391 |url=https://dl.acm.org/doi/10.1145/107214.129260 |access-date=6 May 2021 |chapter=PTRAN—the IBM Parallel Translation System|doi=10.1145/107214.129260 }}</ref> उनकी पीटीआरएएन टीम ने नई समांतरता का पता लगाने वाली योजनाएं विकसित कीं और कार्यक्रम निर्भरता ग्राफ की अवधारणा बनाई, प्राथमिक संरचना विधि जो कि अधिकांश समांतर संकलकों द्वारा उपयोग की जाती है।


जॉन कॉके और जैकब टी. श्वार्ट्ज द्वारा क्रमादेशन भाषा और उनके संकलक, 1970 की शुरुआत में प्रकाशित, 200 से अधिक पृष्ठों को अनुकूलन एल्गोरिदम के लिए समर्पित किया। इसमें [[आंशिक अतिरेक उन्मूलन]] और [[शक्ति में कमी]] जैसी कई परिचित तकनीकें सम्मलित थीं।<ref>John Cocke and Jacob T. Schwartz, ''Programming Languages and their Compilers''. Courant Institute of Mathematical Sciences, New York University, April 1970.</ref>
एलन ने आईबीएम 7030 विस्तार-प्राप्ति और प्रायोगिक उन्नत कंप्यूटिंग प्रणाली के लिए संकलक के खंड के रूप में अपने पद्धति को विकसित और कार्यान्वित किया था। इस कार्य ने आधुनिक मशीन- और भाषा-स्वतंत्र अनुकूलक की व्यवहार्यता और संरचना स्थापित की थी। वह फोरट्रान क्रमादेश के स्वत: समानांतर निष्पादन पर पीटीआरएएन परियोजना की स्थापना और नेतृत्व करने के लिए आगे बढ़ीं थी।<ref>{{cite book |last1=Sarkar |first1=Vivek |title=समानांतर कार्यात्मक भाषाएं और संकलक|date=1991 |publisher=Association for Computing Machinery |location=New York, NY |isbn=0201522438 |pages=309–391 |url=https://dl.acm.org/doi/10.1145/107214.129260 |access-date=6 May 2021 |chapter=PTRAN—the IBM Parallel Translation System|doi=10.1145/107214.129260 }}</ref> उनकी पीटीआरएएन समूह ने नई समांतरता का पता लगाने वाली योजनाएं विकसित कीं और क्रमादेश निर्भरता आलेख की अवधारणा बनाई, प्राथमिक संरचना विधि जो कि अधिकांश समांतर संकलकों द्वारा उपयोग की जाती है।
=== [[पीपहोल अनुकूलन]] ===


पीपहोल ऑप्टिमाइज़ेशन एक सरल लेकिन प्रभावी ऑप्टिमाइज़ेशन तकनीक है। इसका आविष्कार विलियम एम. मैककिमैन ने किया था और 1965 में सीएसीएम में प्रकाशित हुआ था।<ref>[[William M. McKeeman|McKeeman, W.M.]] "Peephole optimization". ''Communications of the ACM'' 8, 7 (July 1965), 443–444</ref> इसका उपयोग XPL संकलक में किया गया था जिसे McKeeman ने विकसित करने में मदद की थी।
जॉन कॉके और जैकब टी. श्वार्ट्ज द्वारा क्रमादेशन भाषा और उनके संकलक, 1970 के आरंभ में प्रकाशित, 200 से अधिक पृष्ठों को अनुकूलन एल्गोरिदम के लिए समर्पित किया था। इसमें [[आंशिक अतिरेक उन्मूलन|अनावश्यक कोड उन्मूलन]] और [[शक्ति में कमी|क्षमता में लघूकरण]] जैसी कई परिचित तकनीकें सम्मलित थीं।<ref>John Cocke and Jacob T. Schwartz, ''Programming Languages and their Compilers''. Courant Institute of Mathematical Sciences, New York University, April 1970.</ref>
=== पीपहोल अनुकूलन ===


=== कैपेक्स कोबोल ऑप्टिमाइज़र ===
पीपहोल अनुकूलन एक सरल लेकिन प्रभावी अनुकूलन तकनीक है। इसका आविष्कार विलियम एम. मैककिमैन ने किया था और 1965 में सीएसीएम में प्रकाशित हुआ था।<ref>[[William M. McKeeman|McKeeman, W.M.]] "Peephole optimization". ''Communications of the ACM'' 8, 7 (July 1965), 443–444</ref> इसका उपयोग XPL संकलक में किया गया था जिसे McKeeman ने विकसित करने में सहायता की थी।


[[Capex Corporation]] ने COBOL के लिए 1970 के दशक के मध्य में COBOL ऑप्टिमाइज़र विकसित किया। इस प्रकार का ऑप्टिमाइज़र, इस मामले में, मानक IBM COBOL संकलक में कमजोरियों के ज्ञान पर निर्भर करता है, और वास्तव में अधिक सक्षम कोड के साथ अभिलक्ष्य कोड के खंड (या [[पैच (कंप्यूटिंग)]]) को प्रतिस्थापित करता है। प्रतिस्थापन कोड एक रेखीय लुकअप तालिका को उदाहरण के लिए एक [[द्विआधारी खोज]] के साथ बदल सकता है या कभी-कभी एक अपेक्षाकृत धीमी निर्देश को एक ज्ञात तेज़ के साथ बदल सकता है जो अन्यथा इसके संदर्भ में कार्यात्मक रूप से समकक्ष था। इस तकनीक को अब स्ट्रेंथ रिडक्शन के रूप में जाना जाता है। उदाहरण के लिए, आईबीएम प्रणाली/360 आर्किटेक्चर | आईबीएम प्रणाली/360 हार्डवेयर पर सीएलआई निर्देश, विशेष मॉडल के आधार पर, सिंगल बाइट तुलना के लिए सीएलसी निर्देश के रूप में दो बार और 5 गुना तेज था।<ref>{{cite journal |title=System/360 Instruction Timing Information |journal=IBM Systems Reference Library |date=May 1964 |url=http://www.bitsavers.org/pdf/ibm/360/A22_6825-1_360instrTiming.pdf |access-date=6 May 2021}}</ref><ref>{{cite journal|url=http://portal.acm.org/citation.cfm?id=358732&dl=GUIDE&dl=ACM|title=कोबोल पर्यावरण के लिए सॉफ्टवेयर इंजीनियरिंग|journal=Communications of the ACM|year=1982 |doi=10.1145/358728.358732 |last1=Evans |first1=Michael |volume=25 |issue=12 |pages=874–882 |s2cid=17268690 }}</ref>
=== कैपेक्स कोबोल अनुकूलक ===
आधुनिक संकलक सामान्यतः अनुकूलन विकल्प प्रदान करते हैं ताकि क्रमादेशक यह चुन सकें कि अनुकूलन पास को निष्पादित करना है या नहीं।


== डायग्नोस्टिक्स ==
[[Capex Corporation|कैपेक्स निगम]] ने कोबोल के लिए 1970 के दशक के मध्य में <nowiki>''कोबोल अनुकूलक'' विकसित किया। इस प्रकार का अनुकूलक, इस प्रकरण में, मानक IBM COBOL संकलक में ''कमजोरियों''</nowiki> के ज्ञान पर निर्भर करता है, और वास्तव में अधिक सक्षम कोड के साथ अभिलक्ष्य कोड के खंड (या [[पैच (कंप्यूटिंग)]]) को प्रतिस्थापित करता है। उदाहरण के लिए प्रतिस्थापन कोड एक रेखीय टेबल लुकअप को एक [[द्विआधारी खोज]] के साथ बदल सकता है या कभी-कभी एक अपेक्षाकृत "धीमे" निर्देश को एक ज्ञात तेज़ के साथ बदल सकता है जो अन्यथा इसके संदर्भ में कार्यात्मक रूप से समतुल्य था। इस तकनीक को अब क्षमता समानयन के रूप में जाना जाता है। उदाहरण के लिए, आईबीएम प्रणाली/360 हार्डवेयर पर सीएलआई निर्देश, विशेष आदर्श के आधार पर, ऐकल बाइट तुलना के लिए सीएलसी निर्देश के रूप में दो बार और 5 गुना तेज था।<ref>{{cite journal |title=System/360 Instruction Timing Information |journal=IBM Systems Reference Library |date=May 1964 |url=http://www.bitsavers.org/pdf/ibm/360/A22_6825-1_360instrTiming.pdf |access-date=6 May 2021}}</ref><ref>{{cite journal|url=http://portal.acm.org/citation.cfm?id=358732&dl=GUIDE&dl=ACM|title=कोबोल पर्यावरण के लिए सॉफ्टवेयर इंजीनियरिंग|journal=Communications of the ACM|year=1982 |doi=10.1145/358728.358732 |last1=Evans |first1=Michael |volume=25 |issue=12 |pages=874–882 |s2cid=17268690 }}</ref>


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


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


=== पीएल/सी ===
=== पीएल/सी ===
PL/C 1970 के दशक की शुरुआत में कॉर्नेल विश्वविद्यालय में विकसित एक कंप्यूटर क्रमादेशन भाषा थी। जबकि PL/C IBM की PL/I भाषा का एक उपसमुच्चय था, इसे शिक्षण क्रमादेशन के लिए उपयोग किए जाने के विशिष्ट लक्ष्य के साथ डिज़ाइन किया गया था। पीएल/सी को डिजाइन करने वाले दो शोधकर्ता और अकादमिक शिक्षक रिचर्ड डब्ल्यू कॉनवे और थॉमस आर विलकॉक्स थे। उन्होंने मार्च 1973 में ACM के संचार में प्रकाशित PL/I के लिए डायग्नोस्टिक संकलक का प्रसिद्ध लेख डिज़ाइन और कार्यान्वयन प्रस्तुत किया।<ref>CACM March 1973 pp 169–179.</ref>
PL/C 1970 के दशक के आरंभ में कॉर्नेल विश्वविद्यालय में विकसित एक कंप्यूटर क्रमादेशन भाषा थी। जबकि PL/C IBM की PL/I भाषा का एक उपसमुच्चय था, इसे शिक्षण क्रमादेशन के लिए उपयोग किए जाने के विशिष्ट लक्ष्य के साथ अभिकल्प किया गया था। पीएल/सी को अभिकल्प करने वाले दो शोधकर्ता और अकादमिक शिक्षक रिचर्ड डब्ल्यू कॉनवे और थॉमस आर विलकॉक्स थे। उन्होंने मार्च 1973 में ACM के संचार प्रसिद्ध लेख <nowiki>''PL/I के लिए नैदानिक संकलक का अभिकल्प और कार्यान्वयन''</nowiki> प्रस्तुत किया।<ref>CACM March 1973 pp 169–179.</ref>
पीएल/सी ने पीएल/आई की कुछ अधिक जटिल विशेषताओं को समाप्त कर दिया, और व्यापक डिबगिंग और त्रुटि सुधार सुविधाओं को जोड़ा। पीएल/सी संकलक में कई वाक्य रचना त्रुटियों के व्यापक स्वत: सुधार के उपयोग के माध्यम से और किसी भी शेष वाक्य रचना त्रुटियों को आउटपुट स्टेटमेंट में परिवर्तित करके, किसी भी क्रमादेश को संकलित करने में विफल होने की असामान्य क्षमता नहीं थी।
 
पीएल/सी ने पीएल/आई की कुछ अधिक जटिल विशेषताओं को समाप्त कर दिया, और व्यापक दोषमार्जन और त्रुटि सुधार सुविधाओं को जोड़ा था। पीएल/सी संकलक में कई वाक्य रचना त्रुटियों के व्यापक स्वत: सुधार के उपयोग के माध्यम से और किसी भी शेष वाक्य रचना त्रुटियों को आउटपुट कथन में परिवर्तित करके, किसी भी क्रमादेश को संकलित करने में विफल होने की असामान्य क्षमता नहीं थी।
 
== समय-समय पर संकलन ==
{{Main|समय-समय पर संकलन}}


== जस्ट-इन-टाइम संकलन ==
कार्यावधि मापन विज्ञान संकलन या अन्य प्रदर्शन-बढ़ाने वाले विकल्पों का लाभ उठाने के लिए समय-समय पर (JIT) संकलन, निष्पादन योग्य कोड का [[उड़ान पर|ऑन-द-फ्लाई]] या इसके वास्तविक निष्पादन के जितना पास संभव हो, उत्पन्न करना है।
{{Main|Just-in-time compilation}}
जस्ट-इन-टाइम (JIT) संकलन रनटाइम [[सॉफ्टवेयर मीट्रिक]] या अन्य प्रदर्शन-बढ़ाने वाले विकल्पों का लाभ उठाने के लिए निष्पादन योग्य कोड [[उड़ान पर]] | ऑन-द-फ्लाई या इसके वास्तविक निष्पादन के जितना करीब संभव हो, उत्पन्न करना है।


== मध्यवर्ती प्रतिनिधित्व ==
== मध्यवर्ती प्रतिनिधित्व ==
{{Main|Intermediate representation}}
{{Main|मध्यवर्ती प्रतिनिधित्व}}


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


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


[[स्टेटिक सिंगल असाइनमेंट]] (SSA) को 1980 के दशक में [[अंतर्राष्ट्रीय व्यवसाय तंत्र]] के शोधकर्ता [[रॉन साइट्रॉन]], [[जेने फेरेंटे]], बैरी रोसेन (कंप्यूटर वैज्ञानिक) | बैरी के. रोसेन, मार्क एन. वेगमैन और एफ. केनेथ ज़ेडेक द्वारा विकसित किया गया था।<ref name="Cytron_1991">{{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&ndash;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 }</ref> एसएसए में, एक चर को केवल एक बार मान दिया जाता है। किसी उपस्थित चर को संशोधित करने के बजाय एक नया चर बनाया जाता है। एसएसए अनुकूलन और कोड जनरेशन को सरल करता है।
[[स्टेटिक सिंगल असाइनमेंट|स्थैतिक एकल कार्य]] (SSA) को 1980 के दशक में [[अंतर्राष्ट्रीय व्यवसाय तंत्र|IBM]] के शोधकर्ता [[रॉन साइट्रॉन]], [[जेने फेरेंटे]], बैरी के. रोसेन, मार्क एन. वेगमैन और एफ. केनेथ ज़ेडेक द्वारा विकसित किया गया था।<ref name="Cytron_1991">{{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&ndash;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 }</ref> एसएसए में, एक चर को केवल एक बार मान दिया जाता है। किसी उपस्थित चर को संशोधित करने के बदले एक नया चर बनाया जाता है। एसएसए अनुकूलन और कोड जनरेशन को सरल करता है।


== कोड जनन ==
== कोड जनन ==
{{Main|कोड जनन (संकलक)}}
{{Main|कोड जनन (संकलक)}}


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


=== रजिस्टर आवंटन ===
=== रजिस्टर आवंटन ===
Line 230: Line 237:


== अग्रिम पठन ==
== अग्रिम पठन ==
* [[John Backus|Backus, John]], et al., [http://archive.computerhistory.org/resources/text/Fortran/102663113.05.01.acc.pdf "The FORTRAN Automatic Coding System"], Proceedings of the Western Joint Computer Conference, Los Angeles, California, February 1957. Describes the design and implementation of the first FORTRAN compiler by the IBM team.
* [[John Backus|Backus, John]], et al., [http://archive.computerhistory.org/resources/text/Fortran/102663113.05.01.acc.pdf "The FORTRAN Automatic Coding System"], पश्चिमी संयुक्त कंप्यूटर सम्मेलन, लॉस एंजिल्स, कैलिफोर्निया, फरवरी 1957 की कार्यवाही। आईबीएम टीम द्वारा पहले फोरट्रान संकलक के डिजाइन और कार्यान्वयन का वर्णन करता है।
* Knuth, D. E., ''RUNCIBLE-algebraic translation on a limited computer'', Communications of the ACM, Vol. 2, p.&nbsp;18, (Nov. 1959).
* नुथ, डी. ., एक सीमित कंप्यूटर पर रन्सिबल-बीजगणितीय अनुवाद, एसीएम का संचार, खंड 2, पृष्ठ 18, (नवंबर 1959)
* Irons, Edgar T., ''A syntax directed compiler for ALGOL 60'', Communications of the ACM, Vol. 4, p.&nbsp;51. (Jan. 1961)
* आयरन्स, एडगर टी., एएलजीओएल 60 के लिए सिंटैक्स निर्देशित कंपाइलर, एसीएम का संचार, खंड 4, पृष्ठ 51 (जनवरी 1961)
* {{cite techreport|first=Edsger W.|last=Dijkstra|author-link=Edsger Dijkstra|title="ALGOL 60 Translation: An ALGOL 60 Translator for the X1 and Making a Translator for ALGOL 60|year=1961|institution=Mathematisch Centrum|location=Amsterdam|number=35|url=http://www.cs.utexas.edu/users/EWD/MCReps/MR35.PDF}}
* {{cite techreport|first=Edsger W.|last=Dijkstra|author-link=Edsger Dijkstra|title="ALGOL 60 अनुवाद: X1 के लिए एक ALGOL 60 अनुवादक और ALGOL 60 के लिए एक अनुवादक बनाना|year=1961|institution=Mathematisch Centrum|location=Amsterdam|number=35|url=http://www.cs.utexas.edu/users/EWD/MCReps/MR35.PDF}}
* [[Melvin Conway|Conway, Melvin E.]], ''Design of a separable transition-diagram compiler'', Communications of the ACM, Volume 6, Issue 7 (July 1963)
* कॉनवे, मेल्विन ई., डिज़ाइन ऑफ़ अ सेपरेबल ट्रांज़िशन-डायग्राम कंपाइलर, कम्युनिकेशंस ऑफ़ द एसीएम, वॉल्यूम 6, अंक 7 (जुलाई 1963)
* [[Robert W. Floyd|Floyd, R. W.]], ''Syntactic analysis and operator precedence'', Journal of the ACM, Vol. 10, p.&nbsp;316. (July 1963).
* फ़्लॉइड, आर. डब्ल्यू., सिंटैक्टिक विश्लेषण और ऑपरेटर प्राथमिकता, जर्नल ऑफ़ द एसीएम, वॉल्यूम 10, पी 316 (जुलाई 1963)
*Cheatham, T. E., and Sattley, K., ''Syntax directed compilation'', SJCC p.&nbsp;31. (1964).
*चीथम, टी. ., और सैटली, के., सिंटेक्स निर्देशित संकलन, एसजेसीसी पृष्ठ 31 (1964)
* [[Brian Randell|Randell, Brian]]; Russell, Lawford John, ''ALGOL 60 Implementation: The Translation and Use of ALGOL 60 Programs on a Computer'', Academic Press, 1964
* रान्डेल, ब्रायन; रसेल, लॉफोर्ड जॉन, ALGOL 60 इम्प्लीमेंटेशन: द ट्रांसलेशन एंड यूज़ ऑफ़ ALGOL 60 प्रोग्राम्स ऑन अ कंप्यूटर, अकादमिक प्रेस, 1964
* {{cite journal | last1 = Knuth | first1 = D. E. | author-link = Donald Knuth | title = On the translation of languages from left to right | doi = 10.1016/S0019-9958(65)90426-2 | journal = Information and Control | volume = 8 | issue = 6 | pages = 607–639 | date = July 1965 | doi-access = free }}
* {{cite journal | last1 = Knuth | first1 = D. E. | author-link = Donald Knuth | title = भाषाओं के अनुवाद पर बाएँ से दाएँ | doi = 10.1016/S0019-9958(65)90426-2 | journal = Information and Control | volume = 8 | issue = 6 | pages = 607–639 | date = July 1965 | doi-access = free }}
* [[John Cocke (computer scientist)|Cocke, John]]; [[Jack Schwartz|Schwartz, Jacob T.]], ''Programming Languages and their Compilers: Preliminary Notes'', [[Courant Institute of Mathematical Sciences]] technical report, [[New York University]], 1969.
* कॉके, जॉन; श्वार्ट्ज, जैकब टी., प्रोग्रामिंग लैंग्वेजेज एंड देयर कंपाइलर्स: प्रिलिमिनरी नोट्स, कोर्टेंट इंस्टीट्यूट ऑफ मैथेमेटिकल साइंसेज टेक्निकल रिपोर्ट, न्यूयॉर्क यूनिवर्सिटी, 1969।
* [[Friedrich L. Bauer|Bauer, Friedrich L.]]; Eickel, Jürgen (Eds.), ''Compiler Construction, An Advanced Course'', 2nd ed. Lecture Notes in Computer Science 21, Springer 1976, {{ISBN|3-540-07542-9}}
* बाउर, फ्रेडरिक एल.; ईकेल, जुरगेन (एड्स।), कंपाइलर कंस्ट्रक्शन, एन एडवांस्ड कोर्स, सेकेंड एड लेक्चर नोट्स इन कंप्यूटर साइंस 21, स्प्रिंगर 1976,  आईएसबीएन 3-540-07542-9
* [[David Gries|Gries, David]], ''Compiler Construction for Digital Computers'', New York : Wiley, 1971. {{ISBN|0-471-32776-X}}
* ग्रीज़, डेविड, कम्पाइलर कंस्ट्रक्शन फ़ॉर डिजिटल कंप्यूटर्स, न्यूयॉर्क : विली, 1971.  आईएसबीएन 0-471-32776-एक्स





Revision as of 12:17, 25 May 2023


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

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

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]

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

जॉन बैकस ने नई क्रमादेशन भाषा 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, .STRING और .NUMBER वाक्य-विन्यास सूत्र में उद्धरित स्ट्रिंग्स उन शब्दों को पहचानते हैं जिन्हें नहीं रखा जाता है।[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)