टीटीएम (प्रोग्रामिंग लैंग्वेज): Difference between revisions

From Vigyanwiki
No edit summary
 
(12 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Tone|date=December 2012}}
'''टीटीएम''' स्ट्रिंग ओरिएंटेड, सामान्य उद्देश्य मैक्रो प्रोसेसर [[प्रोग्रामिंग भाषा|प्रोग्रामिंग लैंग्वेज]] है जिसे 1968 में [[कैलिफोर्निया प्रौद्योगिकी संस्थान]] में स्टीवन केन और ई. केंट गॉर्डन द्वारा विकसित किया गया था।
 
{{Infobox programming language
| name                  = TTM
| logo                  =
| paradigm              = [[general-purpose macro processor]]
| year                  = 1968
| designer              = Steven M. Caine and E. Kent Gordon
| developer              =
| latest_release_version = 1.0
| latest_release_date    =
| implementations        = Unidata TTM
| typing                =
| influenced_by          = GAP, GPM, [[TRAC programming language|TRAC]]
| operating_system      =
| license                = [[MIT License|MIT]]
| website                =
}}
टीटीएम स्ट्रिंग ओरिएंटेड, [[सामान्य प्रयोजन मैक्रो प्रोसेसर]] [[प्रोग्रामिंग भाषा]] है जिसे 1968 में [[कैलिफोर्निया प्रौद्योगिकी संस्थान]] में स्टीवन केन और ई. केंट गॉर्डन द्वारा विकसित किया गया था।


==विवरण==
==विवरण==


निम्नलिखित विवरण मूल टीटीएम संदर्भ नियमावली <ref name="interactive">{{cite web |last1=Caine |first1=S. H. |last2=Gordon |first2=E.K. |title=TTM: An Experimental Interpretive Language |publisher=California Institute of Technology, Willis H. Booth Computing Center, Programming Report No. 7 |year=1968 |url=https://github.com/Unidata/ttm/raw/master/ttm_interpretive_language_pr_07.pdf}}</ref>और उसके बाद में बैच प्रोसेसिंग एक्सटेंशन से लिया गया है।<ref>{{cite web |last1=Caine |first1=S. H. |last2=Gordon |first2=E. K. |title=TTM: A Macro Language for Batch Processing |publisher=California Institute of Technology, Willis H. Booth Computing Center, Programming Report No. 8 |date=May 1969 |url=https://github.com/Unidata/ttm/raw/master/ttm_batch_processing_pr_08.pdf}}</ref>
निम्नलिखित विवरण मूल टीटीएम संदर्भ नियमावली <ref name="interactive">{{cite web |last1=Caine |first1=S. H. |last2=Gordon |first2=E.K. |title=TTM: An Experimental Interpretive Language |publisher=California Institute of Technology, Willis H. Booth Computing Center, Programming Report No. 7 |year=1968 |url=https://github.com/Unidata/ttm/raw/master/ttm_interpretive_language_pr_07.pdf}}</ref> और उसके बाद में बैच प्रोसेसिंग विस्तार से लिया गया है।<ref>{{cite web |last1=Caine |first1=S. H. |last2=Gordon |first2=E. K. |title=TTM: A Macro Language for Batch Processing |publisher=California Institute of Technology, Willis H. Booth Computing Center, Programming Report No. 8 |date=May 1969 |url=https://github.com/Unidata/ttm/raw/master/ttm_batch_processing_pr_08.pdf}}</ref>


टीटीएम पुनरावर्ती, व्याख्यात्मक भाषा है जिसे मुख्य रूप से स्ट्रिंग हेरफेर, टेक्स्ट संपादन, मैक्रो परिभाषा और विस्तार और सामान्यतः सिस्टम प्रोग्रामिंग के रूप में वर्गीकृत अन्य अनुप्रयोगों के लिए डिज़ाइन किया गया है। यह GAP <ref name="GAP">Farber, D. J., 635 Assembly System - GAP. Bell Telephone Laboratories Computation Center (1964).</ref> और जी.पी.एम. से लिया गया है<ref name="GPM">Strachey, C., A General Purpose Macro Generator. Comput J 8, 3(1965), pp. 225-241.</ref>
टीटीएम पुनरावर्ती, व्याख्यात्मक लैंग्वेज है जिसे मुख्य रूप से स्ट्रिंग प्रकलन, टेक्स्ट संपादन, मैक्रो परिभाषा और विस्तार और सामान्यतः सिस्टम प्रोग्रामिंग के रूप में वर्गीकृत अन्य अनुप्रयोगों के लिए डिज़ाइन किया गया है। यह GAP <ref name="GAP">Farber, D. J., 635 Assembly System - GAP. Bell Telephone Laboratories Computation Center (1964).</ref> और GPM से लिया गया है<ref name="GPM">Strachey, C., A General Purpose Macro Generator. Comput J 8, 3(1965), pp. 225-241.</ref>


प्रारंभ में, टीटीएम को आईबीएम सिस्टम/360 के लिए असेंबलर के मैक्रो प्रोसेसिंग हिस्से के रूप में योजनाबद्ध किया गया था और उस सिस्टम के लिए मानक असेंबलरों में मौजूद प्रतिबंधों और विसंगतियों को दूर करने के लिए डिज़ाइन किया गया था।<ref>IBM, System/360 Assembler Language, C28-6514-4, (1967).</ref><ref>Caine, S.H. et al., Report of the Systems Objectives and Requirements Committee, SHARE, 1965, pp. 29-40.</ref>
प्रारंभ में, टीटीएम को आईबीएम सिस्टम/360 के लिए असेंबलर के मैक्रो प्रोसेसिंग हिस्से के रूप में योजनाबद्ध किया गया था और उस सिस्टम के लिए मानक असेंबलरों में मौजूद प्रतिबंधों और विसंगतियों को दूर करने के लिए डिज़ाइन किया गया था।<ref>IBM, System/360 Assembler Language, C28-6514-4, (1967).</ref><ref>Caine, S.H. et al., Report of the Systems Objectives and Requirements Committee, SHARE, 1965, pp. 29-40.</ref>


इसके अलावा, इसे पहले के सामान्य मैक्रो असेंबलरों के पास मौजूद सभी शक्तियों को रखने के लिए डिज़ाइन किया गया था, लेकिन दुर्भाग्यपूर्ण वाक्यविन्यास और अर्थ संबंधी कठिनाइयों को हटा दिया गया था।<ref>Eastwood, D.E. and [[Douglas McIlroy|McIlroy, M.D.]], Macro Compiler Modification of SAP. Bell Telephone Laboratories omputation Center, 1959.</ref><ref>McClure, R.M., Description of CODAPT Assembler, 1960.</ref><ref>Caine, S.H., Reference Manual for CIT 7090/7040 Experimental Macro Assembly Program (XMAP). California Institute of Technology, Willis H. Booth Computing Center (1964).</ref><ref>[[Douglas McIlroy|McIlroy, M.D.]], Macro Instruction Extensions of Compiler Languages. CACM 3, No. 4 (1960), 214-220.</ref>
इसके अलावा, इसे पहले के सामान्य मैक्रो असेंबलरों के पास मौजूद सभी शक्तियों को रखने के लिए डिज़ाइन किया गया था, परंतु दुर्भाग्यपूर्ण वाक्यविन्यास और अर्थ संबंधी कठिनाइयों को हटा दिया गया था।<ref>Eastwood, D.E. and [[Douglas McIlroy|McIlroy, M.D.]], Macro Compiler Modification of SAP. Bell Telephone Laboratories omputation Center, 1959.</ref><ref>McClure, R.M., Description of CODAPT Assembler, 1960.</ref><ref>Caine, S.H., Reference Manual for CIT 7090/7040 Experimental Macro Assembly Program (XMAP). California Institute of Technology, Willis H. Booth Computing Center (1964).</ref><ref>[[Douglas McIlroy|McIlroy, M.D.]], Macro Instruction Extensions of Compiler Languages. CACM 3, No. 4 (1960), 214-220.</ref>


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


टीटीएम का प्रारंभिक संस्करण आईबीएम सिस्टम/360 मॉडल 50 के लिए कैल्टेक बेसिक टाइम शेयरिंग सिस्टम के तहत संवादात्मक तरीके से चलाने के लिए लागू किया गया था।<ref>Caine, S.H., et al., An Operating Environment for Programming Research. California Institute of Technology, Willis H. Booth Computing Center Programming Report No. 1, 1967.</ref> अन्य संस्करण ओएस/360 के बैच प्रोसेसिंग वातावरण में चलाने और विभिन्न भाषा प्रोसेसर के सामने या उनके साथ मिलकर काम करने के लिए लिखे गए हैं।
टीटीएम का प्रारंभिक संस्करण आईबीएम सिस्टम/360 मॉडल 50 के लिए कैल्टेक बेसिक टाइम शेयरिंग सिस्टम के तहत संवादी तरीके से चलाने के लिए लागू किया गया था।<ref>Caine, S.H., et al., An Operating Environment for Programming Research. California Institute of Technology, Willis H. Booth Computing Center Programming Report No. 1, 1967.</ref> अन्य संस्करण ओएस/360 के बैच प्रोसेसिंग परिवेशों में चलाने और विभिन्न लैंग्वेज प्रोसेसर के सामने या उनके साथ मिलकर काम करने के लिए लिखे गए हैं।


==वाक्यविन्यास और शब्दार्थ==
==वाक्यविन्यास और शब्दार्थ==
संदर्भ कार्यान्वयन मानता है कि टीटीएम को टेक्स्ट फ़ाइल दी जाती है जिसमें सामान्य टेक्स्ट और टीटीएम फ़ंक्शन कॉल (अर्थात् इनवोकेशन) का कुछ संयोजन होता है। पाठ को अक्षर दर अक्षर स्कैन किया जाता है। कोई भी सामान्य टेक्स्ट के आउटपुट में अपरिवर्तित (एस्केप को छोड़कर) पास कर दिया जाता है। यदि कोई टीटीएम फ़ंक्शन सामने आता है, तो इसे एकत्र और निष्पादित किया जाता है।
संदर्भ कार्यान्वयन मानता है कि टीटीएम को टेक्स्ट फ़ाइल दी जाती है जिसमें सामान्य टेक्स्ट और टीटीएम फ़ंक्शन कॉल (अर्थात् इनवोकेशन) का कुछ संयोजन होता है। पाठ को कोड दर कोड स्कैन किया जाता है। किसी भी सामान्य टेक्स्ट के आउटपुट में अपरिवर्तित (एस्केप को छोड़कर) पास कर दिया जाता है। यदि कोई टीटीएम फ़ंक्शन सामने आता है, तो इसे एकत्र और निष्पादित किया जाता है।


टीटीएम फ़ंक्शन कॉल का सामान्य रूप इस तरह दिखता है<syntaxhighlight line="1">
टीटीएम फ़ंक्शन कॉल का सामान्य रूप इस तरह दिखता है<syntaxhighlight line="1">
Line 41: Line 23:
</syntaxhighlight>जहां फ़ंक्शन का नाम और तर्क मनमाना वर्ण स्ट्रिंग हैं जिनमें महत्व के वर्ण नहीं हैं: '#', '<', '>', और ';'। फ़ंक्शन को निर्दिष्ट तर्कों के साथ लागू किया जाता है और परिणामी टेक्स्ट को फ़ंक्शन कॉल के स्थान पर मूल टेक्स्ट में डाला जाता है। यदि फ़ंक्शन कॉल के पहले '#' वर्ण लगाया गया था, तो फ़ंक्शन कॉल से सम्मिलित टेक्स्ट से ठीक पहले स्कैनिंग फिर से शुरू हो जाएगी।
</syntaxhighlight>जहां फ़ंक्शन का नाम और तर्क मनमाना वर्ण स्ट्रिंग हैं जिनमें महत्व के वर्ण नहीं हैं: '#', '<', '>', और ';'। फ़ंक्शन को निर्दिष्ट तर्कों के साथ लागू किया जाता है और परिणामी टेक्स्ट को फ़ंक्शन कॉल के स्थान पर मूल टेक्स्ट में डाला जाता है। यदि फ़ंक्शन कॉल के पहले '#' वर्ण लगाया गया था, तो फ़ंक्शन कॉल से सम्मिलित टेक्स्ट से ठीक पहले स्कैनिंग फिर से शुरू हो जाएगी।


इसे ''सक्रिय'' मंगलाचरण कहा जाता है।
इसे ''सक्रिय'' वंदन कहा जाता है।


यदि फ़ंक्शन कॉल में दो '#' वर्ण उपसर्ग किए गए थे, तो सम्मिलित पाठ के तुरंत बाद स्कैनिंग फिर से शुरू हो जाती है। इसे निष्क्रिय मंगलाचरण कहा जाता है।
यदि फ़ंक्शन कॉल में दो '#' वर्ण उपसर्ग किए गए थे, तो सम्मिलित पाठ के तुरंत बाद स्कैनिंग फिर से शुरू हो जाती है। इसे निष्क्रिय वंदन कहा जाता है।


फ़ंक्शन कॉल के संग्रह के दौरान, अतिरिक्त फ़ंक्शन कॉल का सामना करना पड़ सकता है, उदाहरण के लिए, यह।<syntaxhighlight>
फ़ंक्शन कॉल के संग्रह के दौरान, अतिरिक्त फ़ंक्शन कॉल का सामना करना पड़ सकता है, उदाहरण के लिए, यह।<syntaxhighlight>
#<functionname;arg1;#<f2;arg;...>;...;argn>
#<functionname;arg1;#<f2;arg;...>;...;argn>


</syntaxhighlight>नेस्टेड फ़ंक्शन कॉल का सामना होने पर उसे लागू किया जाएगा और परिणाम को बाहरी फ़ंक्शन कॉल के टेक्स्ट में डाला जाएगा और बाहरी फ़ंक्शन कॉल की स्कैनिंग नेस्टेड कॉल से पहले '#' वर्णों की संख्या द्वारा निर्दिष्ट स्थान पर फिर से शुरू होगी।
</syntaxhighlight>स्थिर फ़ंक्शन कॉल का सामना होने पर उसे लागू किया जाएगा और परिणाम को बाहरी फ़ंक्शन कॉल के टेक्स्ट में डाला जाएगा और बाहरी फ़ंक्शन कॉल की स्कैनिंग स्थिर कॉल से पहले '#' वर्णों की संख्या द्वारा निर्दिष्ट स्थान पर फिर से शुरू होगी।


यदि कोई फ़ंक्शन, उदाहरण के लिए, 2 तर्क लेता है, तो किसी भी अतिरिक्त को अनदेखा कर दिया जाता है। उपयोगकर्ता परिभाषित कार्यों के लिए, यदि बहुत कम तर्क प्रदान किए जाते हैं, तो खाली स्ट्रिंग ("") के मान के साथ अतिरिक्त तर्क जोड़े जाते हैं। फ़ंक्शन में अधिकतम 62 तर्क हो सकते हैं।
यदि कोई फ़ंक्शन, उदाहरण के लिए, 2 तर्क लेता है, तो किसी भी अतिरिक्त को अनदेखा कर दिया जाता है। उपयोगकर्ता परिभाषित कार्यों के लिए, यदि बहुत कम तर्क प्रदान किए जाते हैं, तो खाली स्ट्रिंग ("") के मान के साथ अतिरिक्त तर्क जोड़े जाते हैं। फ़ंक्शन में अधिकतम 62 तर्क हो सकते हैं।


अन्य [[अनुप्रयोगात्मक प्रोग्रामिंग भाषा|अनुप्रयोगात्मक प्रोग्रामिंग भाषाओं]] की तरह, टीटीएम फ़ंक्शन पुनरावर्ती हो सकता है और इसे अन्य फ़ंक्शन कॉल के अनुक्रम के आह्वान के परिणाम के रूप में परिभाषित किया जा सकता है।
अन्य [[अनुप्रयोगात्मक प्रोग्रामिंग भाषा|अनुप्रयोगात्मक प्रोग्रामिंग लैंग्वेजओं]] की तरह, टीटीएम फ़ंक्शन पुनरावर्ती हो सकता है और इसे अन्य फ़ंक्शन कॉल के अनुक्रम के आह्वान के परिणाम के रूप में परिभाषित किया जा सकता है।


फ़ंक्शन या तो अंतर्निहित होते हैं या उपयोगकर्ता द्वारा परिभाषित होते हैं। बड़ी संख्या में अंतर्निहित फ़ंक्शन मौजूद हैं और टीटीएम संदर्भ मैनुअल में परिभाषित हैं<ref name="interactive"/>
फ़ंक्शन या तो ''अंतर्निहित या उपयोगकर्ता द्वारा परिभाषित'' होते हैं। बड़ी संख्या में अंतर्निहित फ़ंक्शन मौजूद हैं और   टीटीएम संदर्भ मैनुअल में परिभाषित हैं<ref name="interactive"/>


=== फ़ंक्शन परिभाषा ===
=== फ़ंक्शन परिभाषा ===
Line 61: Line 43:
* #<ss,name,text1t,ext2...,textn>
* #<ss,name,text1t,ext2...,textn>


पहला फ़ंक्शन, "परिभाषित स्ट्रिंग" के लिए डीएस, टीटीएम शब्दकोश में नामित स्ट्रिंग को परिभाषित करता है। नाम "नाम" है और इसका मान "टेक्स्ट" है। इस नामित स्ट्रिंग का आह्वान करने से इसके आह्वान को मान (यानी "टेक्स्ट") से बदल दिया जाएगा।
पहला फ़ंक्शन, "परिभाषित स्ट्रिंग" के लिए डीएस,   टीटीएम शब्दकोश में नामित स्ट्रिंग को परिभाषित करता है। नाम "नाम" है और इसका मान "टेक्स्ट" है। इस नामित स्ट्रिंग का आह्वान करने से इसके आह्वान को मान (यानी "टेक्स्ट") से बदल दिया जाएगा।


'''दूसरा''' फ़ंक्शन, "सेगमेंट स्ट्रिंग" के लिए एसएस, पहले से परिभाषित स्ट्रिंग के टेक्स्ट को स्कैन करता है और इसके तर्कों की घटनाओं की तलाश करता है: टेक्स्ट1, टेक्स्ट2, ... टेक्स्टएन। जब कोई घटना पाई जाती है, तो उसे खंड चिह्न से बदल दिया जाता है। प्रत्येक तर्क की सभी घटनाओं को एक ही खंड चिह्न द्वारा प्रतिस्थापित किया जाता है।
दूसरा फ़ंक्शन, "सेगमेंट स्ट्रिंग" के लिए एसएस, अपने तर्कों की घटनाओं की तलाश में पहले से परिभाषित स्ट्रिंग के टेक्स्ट को स्कैन करता है टेक्स्ट1, टेक्स्ट2, ... टेक्स्टएन। जब कोई घटना पाई जाती है, तो उसे खंड चिह्न से बदल दिया जाता है। प्रत्येक तर्क की सभी घटनाओं को एक ही खंड चिह्न द्वारा प्रतिस्थापित किया जाता है।


जब एक खंडित स्ट्रिंग लागू की जाती है, तो कॉल के प्रत्येक तर्क को संबंधित खंड चिह्न के लिए प्रतिस्थापित किया जाता है। इस उदाहरण पर विचार करें.
जब खंडित स्ट्रिंग लागू की जाती है, तो कॉल के प्रत्येक तर्क को संबंधित ''खंड चिह्न'' के लिए प्रतिस्थापित किया जाता है। इस उदाहरण पर विचार करें<syntaxhighlight>
<पूर्व>
[01] #<ds;F;abcxxdefyy>
[01] #<ds;F;abcxxdefyy>
[02] #<ss;F;xx;yy>
[02] #<ss;F;xx;yy>
[03] #<एफ;11;22>
[03] #<F;11;22>
</पूर्व>
 
स्ट्रिंग F को परिभाषित किया गया है (पंक्ति 1) और इसका मुख्य भाग abcxxdefyy दो तारों xx और yy (पंक्ति 2) पर खंडित है। जब आह्वान किया जाता है (पंक्ति 3), तो यह मान abc11def22 लौटाएगा। असल में, हमारे पास दो तर्कों के साथ एक उपयोगकर्ता परिभाषित फ़ंक्शन एफ है।
 
</syntaxhighlight>स्ट्रिंग F को परिभाषित किया गया है (पंक्ति 1) और इसका मुख्य भाग "abcxxdefyy" दो तारों "xx" और "yy" (पंक्ति 2) पर खंडित है। जब आह्वान किया जाता है (पंक्ति 3), तो यह "abc11def22" मान लौटाएगा। वास्तविक में, हमारे पास दो तर्कों के साथ उपयोगकर्ता परिभाषित फ़ंक्शन एफ है।


===भागना===
===भागना===
दो में से किसी एक का उपयोग करके एक या अधिक वर्णों से बचना संभव है
दो सम्मेलनों में से किसी एक का उपयोग करके एक या अधिक वर्णों से बचना संभव है।
सम्मेलन.
 
सम्मेलन
# <...> - एकाधिक वर्णों से बचें।
# <...> - एकाधिक वर्णों से बचें।
#@-एकल वर्ण से बचें
#@-एकल वर्ण से बचें


यदि कोई स्ट्रिंग <...> में संलग्न है, तो इसे स्कैन किया जाता है लेकिन टीटीएम द्वारा व्याख्या नहीं की जाती है। स्कैनिंग प्रक्रिया में, बाहरी < और > ब्रैकेट हटा दिए जाते हैं। यदि <...> की नेस्टेड घटनाएँ हैं, तो उन्हें स्कैन किया जाता है लेकिन < और > को हटाया नहीं जाता है। कोष्ठक को संतुलित करना चाहिए: '<' वर्णों की संख्या '>' वर्णों की संख्या के बराबर होनी चाहिए।
यदि कोई स्ट्रिंग <...> में संलग्न है, तो इसे स्कैन किया जाता है परंतु टीटीएम द्वारा व्याख्या नहीं की जाती है। स्कैनिंग प्रक्रिया में, बाहरी < और > ब्रैकेट हटा दिए जाते हैं। यदि <...> की स्थिर घटनाएँ हैं, तो उन्हें स्कैन किया जाता है परंतु < और > को हटाया नहीं जाता है। कोष्ठक को संतुलित करना चाहिए: '<' वर्णों की संख्या '>' वर्णों की संख्या के बराबर होनी चाहिए।


'@' एस्केप कन्वेंशन के कारण दुभाषिया '@' के बाद के चरित्र को पास कर देता है। अग्रणी '@' को छोड़ दिया जाता है यदि यह <...> एस्केप अनुक्रम के भीतर है, अन्यथा इसे हटा दिया जाता है। एक उपयोग है
'@' एस्केप कन्वेंशन के कारण दुभाषिया '@' के बाद के चरित्र को पास कर देता है। प्रमुख '@' को छोड़ दिया जाता है यदि यह <...> एस्केप अनुक्रम के भीतर है, अन्यथा इसे हटा दिया जाता है। एक उपयोग '<' या '>' वर्णों की असंतुलित घटनाओं की अनुमति दें।
'<' या '>' वर्णों की असंतुलित घटनाओं की अनुमति दें।


==उदाहरण==
==उदाहरण==
Line 88: Line 70:
===उदाहरण 1: फ़ंक्शन परिभाषा===
===उदाहरण 1: फ़ंक्शन परिभाषा===


सबसे बुनियादी उदाहरण में परिभाषित करना शामिल है
सबसे बुनियादी उदाहरण में फ़ंक्शन को परिभाषित करना सम्मिलित है जो अतिरिक्त फ़ंक्शन को परिभाषित करने के लिए उपयोगी है। इस "मेटा" फ़ंक्शन को ''def'' कहा जाता है। इसे इस प्रकार लिखा गया है:<syntaxhighlight>
एक फ़ंक्शन जो अतिरिक्त फ़ंक्शन को परिभाषित करने के लिए उपयोगी है।
इस मेटा फ़ंक्शन को def कहा जाता है।
इसे इस प्रकार लिखा गया है:
<पूर्व>
#<ds;def;<##<ds;name;<text>>;##<ss;name;subs>>>
#<ds;def;<##<ds;name;<text>>;##<ss;name;subs>>>
#<ss;def;name;subs;text>
#<ss;def;name;subs;text>
</पूर्व>
</syntaxhighlight>उदाहरण के लिए, हम स्ट्रिंग XX को 12345 के रूप में परिभाषित करने के लिए def का उपयोग कर सकते हैं और फिर इसे लिखकर 34 पर XX खंड लिखकर कर सकते हैं।<syntaxhighlight>
 
उदाहरण के लिए, हम स्ट्रिंग XX को परिभाषित करने के लिए def का उपयोग कर सकते हैं
12345 और फिर 34 पर खंड XX लिखकर।
<पूर्व>
#<def;XX;34;12345>
#<def;XX;34;12345>
</पूर्व>


कॉल
</syntaxhighlight>कॉल<syntaxhighlight>
<पूर्व>
#<XX;0000>
#<XX;0000>
</पूर्व>
फिर स्ट्रिंग 1200005 उत्पन्न करेगा।


डीईएफ़ फ़ंक्शन हमारे उदाहरण में 'टीटीएम' शब्दकोश - एक्सएक्स में फ़ंक्शन नाम और प्रारंभिक पाठ को परिभाषित करने के लिए डीएस को लागू करके संचालित होता है।
</syntaxhighlight>फिर "1200005" स्ट्रिंग उत्पन्न करेगा।
 
डीईएफ़ फ़ंक्शन हमारे उदाहरण में टीटीएम शब्दकोश - XX में फ़ंक्शन नाम और प्रारंभिक पाठ को परिभाषित करने के लिए डीएस को लागू करके संचालित होता है।


फिर XX की शब्दकोश प्रविष्टि का पाठ किसी भी निर्दिष्ट तर्क के संबंध में खंडित किया गया है: इस मामले में 34।
फिर XX की शब्दकोश प्रविष्टि का पाठ किसी भी निर्दिष्ट तर्क के संबंध में खंडित किया गया है: इस मामले में "34"।


जब XX का आह्वान किया जाता है, तो उसके तर्क को खंड चिह्न के स्थान पर प्रतिस्थापित कर दिया जाता है।
जब XX का आह्वान किया जाता है, तो उसके तर्क को खंड चिह्न के स्थान पर प्रतिस्थापित कर दिया जाता है।


===उदाहरण 2: फैक्टोरियल===
===उदाहरण 2: फैक्टोरियल===
फैक्टोरियल फ़ंक्शन को परिभाषित किया जा सकता है (उपरोक्त ##<def> फ़ंक्शन का उपयोग करके)
फैक्टोरियल फ़ंक्शन को परिभाषित किया जा सकता है (उपरोक्त ##<''def''> फ़ंक्शन का उपयोग करके) निम्नलिखित नुसार।<syntaxhighlight>
निम्नलिखित नुसार।
<पूर्व>
#<def;n!;N;<#<lt;N;2;1;<#<mu;N;#<n!;#<su;N;1>>>>>>>
#<def;n!;N;<#<lt;N;2;1;<#<mu;N;#<n!;#<su;N;1>>>>>>>
</पूर्व>
ध्यान दें कि आंतरिक गणना (#<mu...) बच गई है
इसलिए इसका मूल्यांकन केवल #<lt... फ़ंक्शन के बाद ही किया जाएगा
निष्पादित किया जाता है और उस नेस्टेड गणना को उसके परिणाम के रूप में लौटाता है।


एक उदाहरण कॉल इस तरह दिखेगी.
</syntaxhighlight>ध्यान दें कि आंतरिक गणना (#<mu...) बच गई है, इसलिए इसका मूल्यांकन केवल #<lt... फ़ंक्शन निष्पादित होने के बाद ही किया जाएगा और उस स्थिर गणना को उसके परिणाम के रूप में लौटाता है।
<पूर्व>
 
उदाहरण कॉल इस तरह दिखेगी।<syntaxhighlight>
#<n!;3>
#<n!;3>
</पूर्व>
 
और स्ट्रिंग 6 लौटाएगा।
</syntaxhighlight>और स्ट्रिंग 6 लौटाएगा।


==यह भी देखें==
==यह भी देखें==
* [[टीआरएसी प्रोग्रामिंग भाषा]]
* [[टीआरएसी प्रोग्रामिंग भाषा|टीआरएसी प्रोग्रामिंग लैंग्वेज]]


टीटीएम और टीआरएसी के बीच सटीक संबंध अज्ञात है। टीटीएम दस्तावेज़ इंगित करता है कि इसे GAP से प्राप्त किया गया था<ref name="GAP"/>और जी.पी.एम.<ref name="GPM"/>किसी भी स्थिति में, टीआरएसी की विशेषताओं का विवरण टीटीएम पर भी लागू होता है। हालाँकि, अंतर्निहित और उपयोगकर्ता-परिभाषित फ़ंक्शन के बीच वाक्यात्मक अंतर को हटाकर, टीटीएम एक अधिक स्वच्छ भाषा प्रतीत होगी।
टीटीएम और टीआरएसी के बीच सटीक संबंध अज्ञात है। टीटीएम दस्तावेज़ निर्दिष्ट करता है कि इसे GAP<ref name="GAP"/> और GPM से प्राप्त किया गया था।<ref name="GPM"/> किसी भी स्थिति में, टीआरएसी की विशेषताओं का विवरण टीटीएम पर भी लागू होता है। तथापि, अंतर्निहित और उपयोगकर्ता-परिभाषित फ़ंक्शन के बीच वाक्यात्मक अंतर को हटाकर, टीटीएम अधिक स्वच्छ लैंग्वेज प्रतीत होगी।


== टिप्पणियाँ ==
== टिप्पणियाँ ==
Line 148: Line 115:


==बाहरी संबंध==
==बाहरी संबंध==
* [https://github.com/Unidata/ttm Reference implementation for the TTM programming language] on [[GitHub]].
* [https://github.com/Unidata/ttm Reference implementation for the टीटीएम programming language] on [[GitHub]].
[[Category: मैक्रो प्रोग्रामिंग भाषाएँ]]
 
 


[[Category: Machine Translated Page]]
[[Category:Created On 26/07/2023]]
[[Category:Created On 26/07/2023]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Pages with syntax highlighting errors]]
[[Category:Templates Vigyan Ready]]
[[Category:मैक्रो प्रोग्रामिंग भाषाएँ]]

Latest revision as of 12:11, 18 August 2023

टीटीएम स्ट्रिंग ओरिएंटेड, सामान्य उद्देश्य मैक्रो प्रोसेसर प्रोग्रामिंग लैंग्वेज है जिसे 1968 में कैलिफोर्निया प्रौद्योगिकी संस्थान में स्टीवन केन और ई. केंट गॉर्डन द्वारा विकसित किया गया था।

विवरण

निम्नलिखित विवरण मूल टीटीएम संदर्भ नियमावली [1] और उसके बाद में बैच प्रोसेसिंग विस्तार से लिया गया है।[2]

टीटीएम पुनरावर्ती, व्याख्यात्मक लैंग्वेज है जिसे मुख्य रूप से स्ट्रिंग प्रकलन, टेक्स्ट संपादन, मैक्रो परिभाषा और विस्तार और सामान्यतः सिस्टम प्रोग्रामिंग के रूप में वर्गीकृत अन्य अनुप्रयोगों के लिए डिज़ाइन किया गया है। यह GAP [3] और GPM से लिया गया है[4]

प्रारंभ में, टीटीएम को आईबीएम सिस्टम/360 के लिए असेंबलर के मैक्रो प्रोसेसिंग हिस्से के रूप में योजनाबद्ध किया गया था और उस सिस्टम के लिए मानक असेंबलरों में मौजूद प्रतिबंधों और विसंगतियों को दूर करने के लिए डिज़ाइन किया गया था।[5][6]

इसके अलावा, इसे पहले के सामान्य मैक्रो असेंबलरों के पास मौजूद सभी शक्तियों को रखने के लिए डिज़ाइन किया गया था, परंतु दुर्भाग्यपूर्ण वाक्यविन्यास और अर्थ संबंधी कठिनाइयों को हटा दिया गया था।[7][8][9][10]

टीटीएम के विकास के दौरान, यह स्पष्ट हो गया कि असेंबलर मैक्रो प्रोसेसिंग के अलावा अन्य अनुप्रयोग भी संभव थे। इनमें असेंबलरों के अलावा अन्य लैंग्वेज प्रोसेसर के लिए डेटा संपादन, टेक्स्ट प्रकलन, अभिव्यक्ति संकलन और मैक्रो प्रोसेसिंग सम्मिलित हैं।

टीटीएम का प्रारंभिक संस्करण आईबीएम सिस्टम/360 मॉडल 50 के लिए कैल्टेक बेसिक टाइम शेयरिंग सिस्टम के तहत संवादी तरीके से चलाने के लिए लागू किया गया था।[11] अन्य संस्करण ओएस/360 के बैच प्रोसेसिंग परिवेशों में चलाने और विभिन्न लैंग्वेज प्रोसेसर के सामने या उनके साथ मिलकर काम करने के लिए लिखे गए हैं।

वाक्यविन्यास और शब्दार्थ

संदर्भ कार्यान्वयन मानता है कि टीटीएम को टेक्स्ट फ़ाइल दी जाती है जिसमें सामान्य टेक्स्ट और टीटीएम फ़ंक्शन कॉल (अर्थात् इनवोकेशन) का कुछ संयोजन होता है। पाठ को कोड दर कोड स्कैन किया जाता है। किसी भी सामान्य टेक्स्ट के आउटपुट में अपरिवर्तित (एस्केप को छोड़कर) पास कर दिया जाता है। यदि कोई टीटीएम फ़ंक्शन सामने आता है, तो इसे एकत्र और निष्पादित किया जाता है।

टीटीएम फ़ंक्शन कॉल का सामान्य रूप इस तरह दिखता है

#<functionname;arg1;arg2;...;argn>

जहां फ़ंक्शन का नाम और तर्क मनमाना वर्ण स्ट्रिंग हैं जिनमें महत्व के वर्ण नहीं हैं: '#', '<', '>', और ';'। फ़ंक्शन को निर्दिष्ट तर्कों के साथ लागू किया जाता है और परिणामी टेक्स्ट को फ़ंक्शन कॉल के स्थान पर मूल टेक्स्ट में डाला जाता है। यदि फ़ंक्शन कॉल के पहले '#' वर्ण लगाया गया था, तो फ़ंक्शन कॉल से सम्मिलित टेक्स्ट से ठीक पहले स्कैनिंग फिर से शुरू हो जाएगी।

इसे सक्रिय वंदन कहा जाता है।

यदि फ़ंक्शन कॉल में दो '#' वर्ण उपसर्ग किए गए थे, तो सम्मिलित पाठ के तुरंत बाद स्कैनिंग फिर से शुरू हो जाती है। इसे निष्क्रिय वंदन कहा जाता है।

फ़ंक्शन कॉल के संग्रह के दौरान, अतिरिक्त फ़ंक्शन कॉल का सामना करना पड़ सकता है, उदाहरण के लिए, यह।

#<functionname;arg1;#<f2;arg;...>;...;argn>

स्थिर फ़ंक्शन कॉल का सामना होने पर उसे लागू किया जाएगा और परिणाम को बाहरी फ़ंक्शन कॉल के टेक्स्ट में डाला जाएगा और बाहरी फ़ंक्शन कॉल की स्कैनिंग स्थिर कॉल से पहले '#' वर्णों की संख्या द्वारा निर्दिष्ट स्थान पर फिर से शुरू होगी।

यदि कोई फ़ंक्शन, उदाहरण के लिए, 2 तर्क लेता है, तो किसी भी अतिरिक्त को अनदेखा कर दिया जाता है। उपयोगकर्ता परिभाषित कार्यों के लिए, यदि बहुत कम तर्क प्रदान किए जाते हैं, तो खाली स्ट्रिंग ("") के मान के साथ अतिरिक्त तर्क जोड़े जाते हैं। फ़ंक्शन में अधिकतम 62 तर्क हो सकते हैं।

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

फ़ंक्शन या तो अंतर्निहित या उपयोगकर्ता द्वारा परिभाषित होते हैं। बड़ी संख्या में अंतर्निहित फ़ंक्शन मौजूद हैं और टीटीएम संदर्भ मैनुअल में परिभाषित हैं[1]

फ़ंक्शन परिभाषा

उपयोगकर्ता परिभाषित फ़ंक्शन निम्नलिखित दो अंतर्निहित फ़ंक्शन का उपयोग करके बनाए जाते हैं।

  • #<ds,नाम,पाठ>
  • #<ss,name,text1t,ext2...,textn>

पहला फ़ंक्शन, "परिभाषित स्ट्रिंग" के लिए डीएस, टीटीएम शब्दकोश में नामित स्ट्रिंग को परिभाषित करता है। नाम "नाम" है और इसका मान "टेक्स्ट" है। इस नामित स्ट्रिंग का आह्वान करने से इसके आह्वान को मान (यानी "टेक्स्ट") से बदल दिया जाएगा।

दूसरा फ़ंक्शन, "सेगमेंट स्ट्रिंग" के लिए एसएस, अपने तर्कों की घटनाओं की तलाश में पहले से परिभाषित स्ट्रिंग के टेक्स्ट को स्कैन करता है टेक्स्ट1, टेक्स्ट2, ... टेक्स्टएन। जब कोई घटना पाई जाती है, तो उसे खंड चिह्न से बदल दिया जाता है। प्रत्येक तर्क की सभी घटनाओं को एक ही खंड चिह्न द्वारा प्रतिस्थापित किया जाता है।

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

[01] #<ds;F;abcxxdefyy>
[02] #<ss;F;xx;yy>
[03] #<F;11;22>

स्ट्रिंग F को परिभाषित किया गया है (पंक्ति 1) और इसका मुख्य भाग "abcxxdefyy" दो तारों "xx" और "yy" (पंक्ति 2) पर खंडित है। जब आह्वान किया जाता है (पंक्ति 3), तो यह "abc11def22" मान लौटाएगा। वास्तविक में, हमारे पास दो तर्कों के साथ उपयोगकर्ता परिभाषित फ़ंक्शन एफ है।

भागना

दो सम्मेलनों में से किसी एक का उपयोग करके एक या अधिक वर्णों से बचना संभव है।

सम्मेलन

  1. <...> - एकाधिक वर्णों से बचें।
  2. @-एकल वर्ण से बचें

यदि कोई स्ट्रिंग <...> में संलग्न है, तो इसे स्कैन किया जाता है परंतु टीटीएम द्वारा व्याख्या नहीं की जाती है। स्कैनिंग प्रक्रिया में, बाहरी < और > ब्रैकेट हटा दिए जाते हैं। यदि <...> की स्थिर घटनाएँ हैं, तो उन्हें स्कैन किया जाता है परंतु < और > को हटाया नहीं जाता है। कोष्ठक को संतुलित करना चाहिए: '<' वर्णों की संख्या '>' वर्णों की संख्या के बराबर होनी चाहिए।

'@' एस्केप कन्वेंशन के कारण दुभाषिया '@' के बाद के चरित्र को पास कर देता है। प्रमुख '@' को छोड़ दिया जाता है यदि यह <...> एस्केप अनुक्रम के भीतर है, अन्यथा इसे हटा दिया जाता है। एक उपयोग '<' या '>' वर्णों की असंतुलित घटनाओं की अनुमति दें।

उदाहरण

उदाहरण 1: फ़ंक्शन परिभाषा

सबसे बुनियादी उदाहरण में फ़ंक्शन को परिभाषित करना सम्मिलित है जो अतिरिक्त फ़ंक्शन को परिभाषित करने के लिए उपयोगी है। इस "मेटा" फ़ंक्शन को def कहा जाता है। इसे इस प्रकार लिखा गया है:

#<ds;def;<##<ds;name;<text>>;##<ss;name;subs>>>
#<ss;def;name;subs;text>

उदाहरण के लिए, हम स्ट्रिंग XX को 12345 के रूप में परिभाषित करने के लिए def का उपयोग कर सकते हैं और फिर इसे लिखकर 34 पर XX खंड लिखकर कर सकते हैं।

#<def;XX;34;12345>

कॉल

#<XX;0000>

फिर "1200005" स्ट्रिंग उत्पन्न करेगा।

डीईएफ़ फ़ंक्शन हमारे उदाहरण में टीटीएम शब्दकोश - XX में फ़ंक्शन नाम और प्रारंभिक पाठ को परिभाषित करने के लिए डीएस को लागू करके संचालित होता है।

फिर XX की शब्दकोश प्रविष्टि का पाठ किसी भी निर्दिष्ट तर्क के संबंध में खंडित किया गया है: इस मामले में "34"।

जब XX का आह्वान किया जाता है, तो उसके तर्क को खंड चिह्न के स्थान पर प्रतिस्थापित कर दिया जाता है।

उदाहरण 2: फैक्टोरियल

फैक्टोरियल फ़ंक्शन को परिभाषित किया जा सकता है (उपरोक्त ##<def> फ़ंक्शन का उपयोग करके) निम्नलिखित नुसार।

#<def;n!;N;<#<lt;N;2;1;<#<mu;N;#<n!;#<su;N;1>>>>>>>

ध्यान दें कि आंतरिक गणना (#<mu...) बच गई है, इसलिए इसका मूल्यांकन केवल #<lt... फ़ंक्शन निष्पादित होने के बाद ही किया जाएगा और उस स्थिर गणना को उसके परिणाम के रूप में लौटाता है। उदाहरण कॉल इस तरह दिखेगी।

#<n!;3>

और स्ट्रिंग 6 लौटाएगा।

यह भी देखें

टीटीएम और टीआरएसी के बीच सटीक संबंध अज्ञात है। टीटीएम दस्तावेज़ निर्दिष्ट करता है कि इसे GAP[3] और GPM से प्राप्त किया गया था।[4] किसी भी स्थिति में, टीआरएसी की विशेषताओं का विवरण टीटीएम पर भी लागू होता है। तथापि, अंतर्निहित और उपयोगकर्ता-परिभाषित फ़ंक्शन के बीच वाक्यात्मक अंतर को हटाकर, टीटीएम अधिक स्वच्छ लैंग्वेज प्रतीत होगी।

टिप्पणियाँ

  1. 1.0 1.1 Caine, S. H.; Gordon, E.K. (1968). "TTM: An Experimental Interpretive Language" (PDF). California Institute of Technology, Willis H. Booth Computing Center, Programming Report No. 7.
  2. Caine, S. H.; Gordon, E. K. (May 1969). "TTM: A Macro Language for Batch Processing" (PDF). California Institute of Technology, Willis H. Booth Computing Center, Programming Report No. 8.
  3. 3.0 3.1 Farber, D. J., 635 Assembly System - GAP. Bell Telephone Laboratories Computation Center (1964).
  4. 4.0 4.1 Strachey, C., A General Purpose Macro Generator. Comput J 8, 3(1965), pp. 225-241.
  5. IBM, System/360 Assembler Language, C28-6514-4, (1967).
  6. Caine, S.H. et al., Report of the Systems Objectives and Requirements Committee, SHARE, 1965, pp. 29-40.
  7. Eastwood, D.E. and McIlroy, M.D., Macro Compiler Modification of SAP. Bell Telephone Laboratories omputation Center, 1959.
  8. McClure, R.M., Description of CODAPT Assembler, 1960.
  9. Caine, S.H., Reference Manual for CIT 7090/7040 Experimental Macro Assembly Program (XMAP). California Institute of Technology, Willis H. Booth Computing Center (1964).
  10. McIlroy, M.D., Macro Instruction Extensions of Compiler Languages. CACM 3, No. 4 (1960), 214-220.
  11. Caine, S.H., et al., An Operating Environment for Programming Research. California Institute of Technology, Willis H. Booth Computing Center Programming Report No. 1, 1967.


संदर्भ

  • Greenwald, I.D. and Kane, M, The Share 709 System: Programming and Modification. JACM 6 No. 2 (1959). pp. 128–133.
  • Greenwald, I.D., Handling Macro Instructions. CACM 2, No. 11 (1959), 21-22.
  • Remington Rand UNIVAC Division, UNIVAC Generalized Programming. Philadelphia, 1957.
  • McIlroy, M.D., Using SAP Macro Instructions to Manipulate Symbolic Expressions. Bell Telephone Laboratories Computation Center (1960).


बाहरी संबंध