नियंत्रण तालिका
नियंत्रण तालिकाएँ वे तालिकाएँ होती हैं जो नियंत्रण प्रवाह को नियंत्रित करती हैं या कार्यक्रम नियंत्रण में एक प्रमुख भूमिका निभाती हैं। नियंत्रण तालिका की संरचना या सामग्री के बारे में कोई कठोर नियम नहीं हैं - इसकी योग्यता विशेषता केंद्रीय प्रसंस्करण इकाई या दुभाषिया (संगणन) द्वारा निष्पादन के माध्यम से किसी तरह से प्रवाह को नियंत्रित करने की क्षमता है। ऐसी तालिकाओं के अभिकल्पना को कभी-कभी तालिका-संचालित अभिकल्पना कहा जाता है[1][2] (हालांकि यह आमतौर पर सीधे कार्यावधि तालिका के बजाय बाहरी तालिका से स्वचालित रूप से कूट उत्पन्न करने को संदर्भित करता है)। कुछ मामलों में, नियंत्रण तालिकाएँ परिमित-अवस्था मशीन | परिमित-अवस्था-मशीन-आधारित स्वचालित-आधारित क्रमादेशन के विशिष्ट कार्यान्वयन हो सकती हैं। यदि नियंत्रण तालिका के कई पदानुक्रमित स्तर हैं तो वे पदानुक्रमित अवस्था मशीन के समतुल्य तरीके से व्यवहार कर सकते हैं[3]
नियंत्रण तालिकाओं में अक्सर सशर्त (क्रमादेशन) या उपनेमिका संदर्भ (संगणक विज्ञान) के समतुल्य होते हैं, जो आमतौर पर संघ सूची में उनके सापेक्ष स्तंभ स्थिति से निहित होते हैं। नियंत्रण तालिकाएँ समान आँकड़ा संरचनाओं या क्रमादेश प्रकथन को बार-बार क्रमादेशन करने की आवश्यकता को कम करती हैं। अधिकांश तालिकाओं की द्वि-आयामी प्रकृति क्रमादेश कूट की एक-आयामी प्रकृति की तुलना में उन्हें देखने और अद्यतन करने में आसान बनाती है।
कुछ मामलों में, नियंत्रण तालिकाओं की सामग्री को बनाए रखने के लिए गैर-क्रमादेशक को सौंपा जा सकता है। उदाहरण के लिए, यदि उपयोगकर्ता द्वारा दर्ज किए गए खोज वाक्यांश में एक निश्चित वाक्यांश शामिल है, तो एक तालिका में एक यूआरएल (वेब पता) निर्दिष्ट किया जा सकता है जो यह नियंत्रित करता है कि खोज उपयोगकर्ता को कहाँ ले जाया जाता है। यदि वाक्यांश में स्कर्ट(किनारा) है, तो तालिका उपयोगकर्ता को www.shopping.example/catalogs/skirts पर ले जा सकती है, जो कि स्कर्ट उत्पाद सूची पृष्ठ है। (उदाहरण यूआरएल पद्धति में काम नहीं करता है)। क्रमादेशक के बजाय विपणन कर्मी ऐसी तालिका का प्रबंधन कर सकते हैं।
विशिष्ट उपयोग
- इनपुट मानों का परिवर्तन:
- बाद में शाखन या सूचक (संगणक क्रमादेशन) तालिका देखने के लिए एक सहयोगी सरणी
- नियंत्रण प्रवाह को बदलने के लिए क्रमादेश का नाम, संबंधित उपनेमिका संख्या, सूचक (क्रमादेशन भाषा) या क्रमादेश अतर्लव (संगणक विज्ञान)
- अवस्था संक्रमण फलन के लिए नियंत्रण चर (क्रमादेशन) का उपयोग करके घटना-संचालित क्रमादेशन में एक मुख्य प्रस्पंद को नियंत्रित करना
- ऑनलाइन लेनदेन प्रसंस्करण अनुप्रयोगों के लिए कार्यक्रम चक्र को नियंत्रित करना
अधिक उन्नत उपयोग
- एक दुभाषिया (संगणन) द्वारा संसाधित आभासी मशीन के लिए आभासी निर्देशों के रूप में कार्य करना।
- बाईट कूट के समान - लेकिन आमतौर पर तालिका संरचना द्वारा निहित संचालन के साथ।
तालिका संरचना
तालिकाओं में निश्चित या चर लंबाई कूट के कई आयाम हो सकते हैं और आमतौर पर संगणक मंच के बीच सॉफ्टवेयर सुवाह्य होती है, जिसके लिए केवल दुभाषिया में बदलाव की आवश्यकता होती है, न कि स्वयं कलन विधि - जिसका तर्क तालिका संरचना और सामग्री के भीतर अनिवार्य रूप से सन्निहित है। तालिका की संरचना एक बहुघाती (आँकड़ा संरचना) साहचर्य सरणी के समान हो सकती है, जहां एक आँकड़ा मान (या आँकड़ा मानों का संयोजन) को एक या एक से अधिक कार्यों के लिए योजना बद्ध किया जा सकता है।
एक आयामी तालिका
शायद इसके सबसे सरल कार्यान्वयन में, एक नियंत्रण तालिका कभी-कभी असंसाधित्र आँकड़ा मान को संबंधित उपनेमिका अंतर्लब (संगणक विज्ञान), सरणी आँकड़ा संरचना या संकेतक (संगणक क्रमादेशन) में कच्चे आँकड़ा मान का सीधे उपयोग करने के लिए सीधे अनुवाद करने के लिए एक आयामी तालिका हो सकती है। सरणी के सूचकांक के रूप में, या पहले से आँकड़ा पर कुछ बुनियादी अंकगणितीय प्रदर्शन करके। यह निरंतर समय में प्राप्त किया जा सकता है (बिना रैखिक खोज या द्विआधारी खोज के एक साहचर्य सरणी पर एक विशिष्ट लुकअप तालिका का उपयोग करके)। अधिकांश संगणक संरचना में, इसे दो या तीन मशीन निर्देशों में पूरा किया जा सकता है - बिना किसी तुलना या प्रस्पंद के। तकनीक को तुच्छ हैश फ़ंक्शन के रूप में जाना जाता है या, जब विशेष रूप से शाखा तालिकाओं के लिए उपयोग किया जाता है, दोहरा प्रेषण। इसके व्यवहार्य होने के लिए, आँकड़ा के सभी संभावित मानों की सीमा छोटी होनी चाहिए (उदाहरण के लिए एक ASCII या EBCDIC वर्ण मान जिसमें हेक्साडेसिमल '00' - 'FF' की सीमा होती है। यदि वास्तविक सीमा कम होने की गारंटी है इसके अलावा, सरणी को 256 बाइट्स से कम तक छोटा किया जा सकता है)।
'एक-आयामी सरणी का उपयोग करके निरंतर समय में कच्चे ASCII मानों (ए, डी, एम, एस) को नए उपनेमिका सूचकांक (1,4,3,2) में अनुवाद करने की तालिका'
(इस उदाहरण के लिए श्रेणी में अंतराल '..' के रूप में दिखाए गए हैं, जिसका अर्थ है 'अगली पंक्ति तक सभी हेक्स मान'। पहले दो पंक्ति सरणी का हिस्सा नहीं हैं)
ASCII | Hex | Array |
---|---|---|
null | 00 | 00 |
.. | .. | 00 |
@ | 40 | 00 |
A | 41 | 01 |
.. | .. | 00 |
D | 44 | 04 |
.. | .. | 00 |
M | 4D | 03 |
.. | .. | 00 |
S | 53 | 02 |
ऑटोमेटा-आधारित क्रमादेशन और छद्म संवादात्मक लेनदेन प्रसंस्करण में, यदि अलग-अलग क्रमादेश स्टेट्स की संख्या कम है, तो मुख्य क्रमादेश प्रस्पंद के पूरे प्रवाह को कुशलतापूर्वक निर्देशित करने के लिए एक घने अनुक्रम नियंत्रण चर का उपयोग किया जा सकता है।
सभी इनपुट संभावनाओं को संभालने के लिए - केवल 256 विभिन्न आउटपुट मानों की अनुमति देते हुए एक दो बाइट कच्चे आँकड़ा मान के लिए 65,536 बाइट्स के न्यूनतम तालिका आकार की आवश्यकता होगी। हालाँकि, यह प्रत्यक्ष अनुवाद तकनीक एक (रिश्तेदार) उपनेमिका पॉइंटर के लिए एक अत्यंत तेज़ आँकड़ा सत्यापन और रूपांतरण प्रदान करती है, यदि अनुमानी, पर्याप्त तेज़ एक्सेस मेमोरी के साथ मिलकर इसके उपयोग की अनुमति देता है।
शाखा तालिका
एक शाखा तालिका सन्निहित मशीन कूटशाखा (संगणक विज्ञान) की एक-आयामी 'सरणी' है। शाखा/कूद निर्देश एक मल्टीवे शाखा को क्रमादेश लेबल पर प्रभावित करने के लिए जब तुरंत पूर्ववर्ती और अनुक्रमित शाखा द्वारा शाखाबद्ध किया जाता है। यह कभी-कभी एक स्विच प्रकथन को निष्पादित करने के लिए एक अनुकूलन संकलक द्वारा उत्पन्न होता है - बशर्ते कि इनपुट रेंज छोटी और सघन हो, कुछ अंतराल के साथ (जैसा कि पिछले सरणी उदाहरण द्वारा बनाया गया है) [1]।
हालांकि काफी कॉम्पैक्ट - कई समकक्षों की तुलना में If
कथन - शाखा निर्देश में अभी भी कुछ अतिरेक है, क्योंकि शाखा opcode और स्थिति कूटमास्क शाखा अंतर्लब के साथ दोहराए जाते हैं। इस अतिरेक (कम से कम असेंबली भाषाओं में) को दूर करने के लिए क्रमादेश लेबल्स के लिए केवल अंतर्लब वाली कंट्रोल तालिका का निर्माण किया जा सकता है और फिर भी एक पारंपरिक शाखा तालिका की तुलना में केवल मामूली निष्पादन समय कम्प्यूटेशनल ओवरहेड की आवश्यकता होती है।
बहु-आयामी तालिका
अधिक सामान्यतः, एक नियंत्रण तालिका को एक सत्य तालिका के रूप में या एक मुद्रित निर्णय तालिका (या कई स्तरों पर निर्णय तालिकाओं के एक पेड़ (आँकड़ा संरचना)) के निष्पादन योग्य (बाइनरी) कार्यान्वयन के रूप में सोचा जा सकता है। उनमें (अक्सर निहित) प्रस्तावात्मक सूत्र होते हैं, साथ में एक या एक से अधिक संबद्ध 'कार्य' होते हैं। ये क्रियाएं आमतौर पर जेनेरिक या कस्टम-निर्मित उपनेमिका्स द्वारा की जाती हैं जिन्हें इंटरप्रेटर (कंप्यूटिंग) क्रमादेश द्वारा कॉल किया जाता है। इस उदाहरण में दुभाषिया प्रभावी रूप से एक आभासी मशीन के रूप में कार्य करता है, जो नियंत्रण तालिका प्रविष्टियों को 'निष्पादित' करता है और इस प्रकार दुभाषिया के अंतर्निहित कूटकी तुलना में उच्च स्तर का अमूर्तता (संगणक विज्ञान) प्रदान करता है।
भाषा पर निर्भर स्विच प्रकथन के समान पंक्तियों के साथ एक नियंत्रण तालिका का निर्माण किया जा सकता है, लेकिन इनपुट मानों के संयोजन के लिए परीक्षण की अतिरिक्त संभावना के साथ (बूलियन बीजगणित (तर्क) शैली तार्किक संयोजन/तार्किक संयोजन स्थितियों का उपयोग करके) और संभावित रूप से एकाधिक उपनेमिका्स को कॉल करना (इसके बजाय) मूल्यों का सिर्फ एक सेट और 'ब्रांच टू' क्रमादेश लेबल)। (स्विच प्रकथन निर्माण किसी भी मामले में उपलब्ध नहीं हो सकता है, या उच्च स्तरीय भाषाओं (उच्च स्तरीय क्रमादेशन भाषा) में भ्रमित रूप से भिन्न कार्यान्वयन है। नियंत्रण तालिका अवधारणा, तुलनात्मक रूप से, कोई आंतरिक भाषा निर्भरता नहीं है, लेकिन फिर भी इसे अलग तरह से लागू किया जा सकता है। चयनित क्रमादेशन भाषा की उपलब्ध आँकड़ा परिभाषा सुविधाओं के अनुसार।)
तालिका सामग्री
एक नियंत्रण तालिका अनिवार्य रूप से एक पारंपरिक कार्यक्रम के 'सार' का प्रतीक है, इसकी क्रमादेशन भाषा सिंटैक्स और प्लेटफॉर्म पर निर्भर घटकों (जैसे IF/THEN DO.., FOR.., DO WHILE.., SWITCH, GOTO, CALL) और ' संघनित' इसके चर (जैसे इनपुट 1), मान (जैसे 'ए', 'एस', 'एम' और 'डी'), और उपनेमिका पहचान (जैसे 'जोड़ें', 'घटाना,..' या #1, # 2,...). तालिका की संरचना में आमतौर पर शामिल (डिफ़ॉल्ट) लॉजिकल ऑपरेशंस शामिल होते हैं - जैसे 'समानता के लिए परीक्षण', एक उपनेमिका और 'अगला ऑपरेशन' करना या डिफ़ॉल्ट अनुक्रम का पालन करना (इन्हें क्रमादेश प्रकथन के भीतर स्पष्ट रूप से बताए जाने के बजाय - आवश्यकतानुसार अन्य क्रमादेशन प्रतिमानों में)।
एक बहु-आयामी नियंत्रण तालिका में सामान्य रूप से, न्यूनतम के रूप में, मूल्य / क्रिया जोड़े होते हैं और इसमें अतिरिक्त रूप से ऑपरेटर और टाइप सिस्टम जानकारी हो सकती है, जैसे स्थान, आकार और इनपुट या आउटपुट आँकड़ा का प्रारूप, चाहे आँकड़ा रूपांतरण (या अन्य रन टाइम) (कार्यक्रम जीवनचक्र चरण) | रन-टाइम प्रोसेसिंग बारीकियाँ) प्रसंस्करण से पहले या बाद में आवश्यक है (यदि पहले से ही फ़ंक्शन में निहित नहीं है)। तालिका में पंक्ति में अन्य मूल्यों के आधार पर निष्पादित होने वाली सामान्य या अनुकूलित भाषा आदिम या उपनेमिका्स के लिए सरणी अनुक्रमणिका या रिश्तेदार या पूर्ण सूचक (संगणक क्रमादेशन) शामिल हो सकते हैं या नहीं हो सकते हैं।
नीचे दी गई तालिका केवल 'इनपुट1' पर लागू होती है क्योंकि तालिका में कोई विशिष्ट इनपुट निर्दिष्ट नहीं किया गया है।
'संरचना द्वारा निहित शर्तें और क्रियाएं'
(implied) IF = (implied) perform value action value action
(मूल्य और क्रिया की इस साइड-बाय-साइड जोड़ी में इवेंट-संचालित क्रमादेशन, अर्थात् 'ईवेंट-डिटेक्शन' और 'इवेंट-हैंडलिंग' में समानताएं हैं, लेकिन बिना (आवश्यक रूप से) ईवेंट की अतुल्यकालिक प्रणाली प्रकृति)
नियंत्रण तालिका के भीतर इनकोडिंग किए जा सकने वाले मानों की विविधता काफी हद तक उपयोग की जाने वाली संगणक भाषा पर निर्भर करती है। सभा की भाषा आँकड़ा प्रकारों के लिए सबसे व्यापक गुंजाइश प्रदान करती है, जिसमें (कार्यों के लिए), सीधे निष्पादन योग्य मशीन कूटका विकल्प शामिल है। आम तौर पर एक नियंत्रण तालिका में इनपुट के प्रत्येक संभावित मिलान वर्ग के लिए एक संबंधित सूचक के साथ एक क्रिया उपनेमिका के लिए मान होंगे। कुछ भाषाएँ पॉइंटर (संगणक क्रमादेशन) (सीधे) का समर्थन नहीं करने का दावा करती हैं, लेकिन इसके बजाय एक ऐरे आँकड़ा संरचना का समर्थन कर सकती हैं, जिसका उपयोग सशर्त निष्पादन करने के लिए 'रिलेटिव उपनेमिका संख्या' का प्रतिनिधित्व करने के लिए किया जा सकता है, जिसे तालिका प्रविष्टि में मान द्वारा नियंत्रित किया जाता है ( उदाहरण के लिए एक अनुकूलित स्विच प्रकथन प्रकथन में उपयोग के लिए - शून्य अंतराल (यानी एक मल्टीवे शाखा) के साथ अभिकल्पना किया गया)।
प्रत्येक कॉलम (या यहां तक कि एम्बेडेड टेक्स्टुअल डॉक्यूमेंटेशन) के ऊपर स्थित टिप्पणियां एक निर्णय तालिका को 'मानव पठनीय' प्रस्तुत कर सकती हैं, यहां तक कि 'कंडेन्सिंग डाउन' (एन्कोडिंग) के बाद भी इसकी अनिवार्यता (और अभी भी मोटे तौर पर मूल कार्यक्रम विनिर्देश के साथ - विशेष रूप से अगर एक मुद्रित निर्णय तालिका, प्रत्येक अद्वितीय क्रिया की गणना, कोडिंग शुरू होने से पहले बनाई जाती है)। तालिका प्रविष्टियों में 'इन-फ्लाइट' या बाद के अनुकूलन के लिए रन-टाइम आँकड़े एकत्र करने के लिए वैकल्पिक रूप से काउंटर भी हो सकते हैं
तालिका स्थान
कंट्रोल तालिका स्थैतिक चर स्टोरेज में, सहायक भंडारण पर, जैसे कि एक सरल फ़ाइल या आँकड़ाबेस पर या वैकल्पिक रूप से आंशिक रूप से या पूरी तरह से पैरामीटर से क्रमादेश बूटिंग समय पर गतिशील रूप से निर्मित हो सकते हैं (जो स्वयं एक तालिका में रह सकते हैं)। इष्टतम दक्षता के लिए, जब दुभाषिया इसका उपयोग करना शुरू करता है तो तालिका स्मृति निवासी होनी चाहिए।
दुभाषिया और उपनेमिका्स
दुभाषिया को उच्च स्तरीय भाषा सहित किसी भी उपयुक्त क्रमादेशन भाषा में लिखा जा सकता है। एक उपयुक्त रूप से अभिकल्पना किया गया सामान्य क्रमादेशन दुभाषिया, जेनेरिक उपनेमिका्स के एक अच्छी तरह से चुने गए सेट के साथ (सबसे अधिक होने वाली भाषा आदिम को संसाधित करने में सक्षम), केवल नए कस्टम उपनेमिका्स के लिए अतिरिक्त पारंपरिक कोडिंग की आवश्यकता होगी (नियंत्रण तालिका को ही निर्दिष्ट करने के अलावा)। दुभाषिया, वैकल्पिक रूप से, केवल एक पूर्ण एप्लिकेशन क्रमादेश (जैसे मेन प्रस्पंद) के कुछ अच्छी तरह से परिभाषित वर्गों पर लागू हो सकता है और अन्य, 'कम सशर्त', अनुभागों (जैसे क्रमादेश आरंभीकरण, समाप्ति और इसी तरह) पर नहीं।
दुभाषिया को अनावश्यक रूप से जटिल होने की आवश्यकता नहीं है, या एक संकलक लेखक के उन्नत ज्ञान के साथ एक क्रमादेशक द्वारा निर्मित किया जा सकता है, और इसे किसी भी अन्य एप्लिकेशन क्रमादेश के रूप में लिखा जा सकता है - सिवाय इसके कि यह आमतौर पर दक्षता को ध्यान में रखकर बनाया गया है। इसका प्राथमिक कार्य तालिका प्रविष्टियों को निर्देशों के एक सेट के रूप में निष्पादित करना है। नियंत्रण तालिका प्रविष्टियों को पार्स करने की कोई आवश्यकता नहीं है और इसलिए इन्हें, जहां तक संभव हो, 'निष्पादन के लिए तैयार' होने के लिए अभिकल्पना किया जाना चाहिए, जिसके लिए उपयुक्त कॉलम से इंटरप्रेटर के पहले से ही संकलित जेनेरिक कूटमें केवल चरों को जोड़ने की आवश्यकता होती है। . निर्देश (संगणक विज्ञान), सिद्धांत रूप में, असीम रूप से एक्सटेंसिबल हैं और तालिका के भीतर (संभवतः मनमाने) मूल्यों का गठन करते हैं जो केवल दुभाषिया के लिए सार्थक हैं। दुभाषिया का नियंत्रण प्रवाह सामान्य रूप से प्रत्येक तालिका पंक्ति के अनुक्रमिक प्रसंस्करण द्वारा होता है लेकिन तालिका प्रविष्टियों में विशिष्ट क्रियाओं द्वारा संशोधित किया जा सकता है।
इस प्रकार इन स्वैच्छिक मूल्यों को एल्गोरिथम दक्षता को ध्यान में रखते हुए अभिकल्पना किया जा सकता है - उन मानों का चयन करके जिन्हें आँकड़ा या फ़ंक्शन पॉइंटर्स के लिए प्रत्यक्ष अनुक्रमणिका के रूप में उपयोग किया जा सकता है। विशेष प्लेटफॉर्म/संगणक भाषा के लिए, उन्हें विशेष रूप से शाखा तालिका मानों का उपयोग करके निर्देश पथ की लंबाई को कम करने के लिए अभिकल्पना किया जा सकता है या कुछ मामलों में जैसे कि समय-समय पर संकलन कंपाइलर में सीधे निष्पादन योग्य मशीन कूटस्निपेट (क्रमादेशन) (या उनके लिए संकेत)।
उपनेमकाओं को या तो उसी भाषा में कोडित किया जा सकता है जिसमें दुभाषिया स्वयं या किसी अन्य समर्थित क्रमादेश भाषा में (बशर्ते कि उपयुक्त अंतर-भाषा 'कॉल' लिंकेज तंत्र मौजूद हो)। इंटरप्रेटर और/या उपनेमिका्स के लिए भाषा का चुनाव आमतौर पर इस बात पर निर्भर करेगा कि इसे विभिन्न प्लेटफार्म (कंप्यूटिंग) में कितना पोर्तालिका होना चाहिए। नियंत्रण तालिका के में porting को बढ़ाने के लिए दुभाषिया के कई संस्करण हो सकते हैं। एक अधीनस्थ नियंत्रण तालिका सूचक वैकल्पिक रूप से 'एक्शन' कॉलम में एक उपनेमिका पॉइंटर के लिए स्थानापन्न कर सकता है यदि दुभाषिया इस निर्माण का समर्थन करता है, एक पारंपरिक संरचित क्रमादेशन संरचना की नकल करते हुए एक निचले तार्किक स्तर पर एक सशर्त 'ड्रॉप' का प्रतिनिधित्व करता है।
प्रदर्शन विचार
पहली नजर में, नियंत्रण तालिकाओं का उपयोग एक कार्यक्रम के कम्प्यूटेशनल ओवरहेड में काफी कुछ जोड़ने के लिए प्रतीत होता है, जिसके लिए 'देशी' क्रमादेशन भाषा के बयानों को निष्पादित करने से पहले एक दुभाषिया प्रक्रिया की आवश्यकता होती है। हालांकि हमेशा ऐसा नहीं होता है। तर्क से निष्पादन योग्य कोडिंग को अलग (या 'एनकैप्सुलेट') करके, जैसा कि तालिका में व्यक्त किया गया है, इसे अपने कार्य को सबसे अधिक कुशलता से करने के लिए अधिक आसानी से लक्षित किया जा सकता है। यह एक स्प्रेडशीट एप्लिकेशन में सबसे स्पष्ट रूप से अनुभव किया जा सकता है - जहां अंतर्निहित स्प्रेडशीट सॉफ़्टवेयर अपने परिणामों को प्रदर्शित करने के लिए पारदर्शी रूप से जटिल तार्किक 'सूत्रों' को सबसे कुशल तरीके से परिवर्तित करता है।
नीचे दिए गए उदाहरणों को संभावित प्रदर्शन लाभों को स्पष्ट करने के लिए आंशिक रूप से चुना गया है जो न केवल अमूर्तता के अतिरिक्त स्तर के लिए महत्वपूर्ण रूप से क्षतिपूर्ति कर सकते हैं, बल्कि सुधार भी कर सकते हैं - अन्यथा क्या हो सकता था - कम कुशल, कम रखरखाव योग्य और लंबा कोड। यद्यपि दिए गए उदाहरण एक 'निम्न स्तर' असेंबली भाषा और सी (भाषा) के लिए हैं, यह देखा जा सकता है, दोनों ही मामलों में, नियंत्रण तालिका दृष्टिकोण को लागू करने के लिए कूटकी बहुत कम पंक्तियों की आवश्यकता होती है और फिर भी बहुत महत्वपूर्ण हासिल कर सकते हैं वाचाल पारंपरिक क्रमादेश भाषा निर्माण की तुलना में निरंतर समय प्रदर्शन में सुधार, दोहराव वाले स्रोत कोडिंग को कम करना और सहायता स्पष्टता। इस लेख में तालिकाओं और मल्टीवे ब्रांचिंग की दक्षता से संबंधित डोनाल्ड नुथ द्वारा नियंत्रण तालिका#कोटेशन भी देखें।
नियंत्रण तालिकाओं के उदाहरण
निम्नलिखित उदाहरण मनमाने हैं (और सादगी के लिए केवल एक इनपुट पर आधारित हैं), हालांकि इरादा केवल यह प्रदर्शित करना है कि नियमित क्रमादेश प्रकथन के बजाय तालिकाओं के उपयोग के माध्यम से नियंत्रण प्रवाह को कैसे प्रभावित किया जा सकता है। यह स्पष्ट होना चाहिए कि इस तकनीक को कई इनपुट से निपटने के लिए आसानी से विस्तारित किया जा सकता है, या तो कॉलम की संख्या बढ़ाकर या एकाधिक तालिका प्रविष्टियों (वैकल्पिक और/या ऑपरेटर के साथ) का उपयोग करके। इसी तरह, (पदानुक्रमित) 'लिंक्ड' नियंत्रण तालिकाओं का उपयोग करके, संरचित क्रमादेशन को पूरा किया जा सकता है (वैकल्पिक रूप से अधीनस्थ नियंत्रण तालिकाओं को उजागर करने में मदद करने के लिए इंडेंटेशन का उपयोग करना)।
CT1 नियंत्रण तालिका का एक उदाहरण है जो एक साधारण लुकअप तालिका है। पहला कॉलम परीक्षण किए जाने वाले इनपुट मान का प्रतिनिधित्व करता है (अंतर्निहित 'IF input1 = x' द्वारा) और, यदि TRUE है, तो संबंधित दूसरा कॉलम ('कार्रवाई') में सिस्टम कॉल (या के लिए जाओ) द्वारा निष्पादित करने के लिए एक उपनेमिका पता होता है - स्विच प्रकथन प्रकथन के समान)। वास्तव में, यह वापसी के साथ एक मल्टीवे शाखा है (गतिशील प्रेषण का एक रूप)। अंतिम प्रविष्टि डिफ़ॉल्ट मामला है जहां कोई मेल नहीं मिला।
सीटी1
input 1 pointer A -->Add S -->Subtract M -->Multiply D -->Divide ? -->Default
अन्य आँकड़ा मानों के साथ आँकड़ा संरचनाओं के भीतर पॉइंटर्स का समर्थन करने वाली क्रमादेशन भाषाओं के लिए, उपरोक्त तालिका (CT1) का उपयोग नियंत्रण प्रवाह को तालिका से मिलान मूल्य के अनुसार एक उपयुक्त उपनेमिका्स के लिए निर्देशित करने के लिए किया जा सकता है (अन्यथा इंगित करने के लिए कॉलम के बिना, समानता मान ली गई है) यह साधारण मामला)।
IBM/360 (अधिकतम 16Mb एड्रेस रेंज) या Z/संरचना के लिए असेंबली भाषा का उदाहरण
इस पहले उदाहरण के लिए कोडिंग में लुकअप को अनुकूलित करने का कोई प्रयास नहीं किया गया है, और इसके बजाय यह एक सरल रेखीय खोज तकनीक का उपयोग करता है - विशुद्ध रूप से अवधारणा को स्पष्ट करने और कम स्रोत पंक्तियों को प्रदर्शित करने के लिए। सभी 256 विभिन्न इनपुट मानों को संभालने के लिए, स्रोत कूटकी लगभग 265 पंक्तियों की आवश्यकता होगी (मुख्य रूप से एकल पंक्ति तालिका प्रविष्टियाँ) जबकि कई 'तुलना और शाखा' के लिए सामान्य रूप से लगभग 512 स्रोत लाइनों की आवश्यकता होगी (बाइनरी फ़ाइल का आकार भी लगभग आधा है) , प्रत्येक तालिका प्रविष्टि को 'तत्काल तुलना करें'/शाखा निर्देशों की एक श्रृंखला के लिए लगभग 8 बाइट्स के बजाय केवल 4 बाइट्स की आवश्यकता होती है (बड़े इनपुट चर के लिए, बचत और भी अधिक होती है)।
* ------------------ दुभाषिया ------------------------------ --------------* LM R14,R0,=A(4,CT1,N) सेट करें R14=4, R15 --> तालिका, और R0 = संख्या। तालिका में प्रविष्टियों की संख्या (एन) CLC INPUT1,0(R15) का प्रयास करें ********* तालिका प्रविष्टि में मूल्य मिला? कार्रवाई हो * पाश * हाँ, तालिका से उप-दिनचर्या में लोड रजिस्टर सूचक AR R15,R14 * * नहीं, R14 (=4) जोड़कर CT1 में अगली प्रविष्टि की ओर इशारा करें बीसीटी आर0, कोशिश करें ********* गिनती समाप्त होने तक वापस जाएं, फिर छोड़ें . डिफ़ॉल्ट क्रिया ... तालिका में कोई भी मान मेल नहीं खाता, कुछ और करें LA R15,4(R15) बिंदु से डिफ़ॉल्ट प्रविष्टि (तालिका के अंत से परे) कार्रवाई एल R15,0(R15) R15 में सूचक मिलता है, जहां से R15 अंक BALR R14, R15 उप-दिनचर्या (कॉल और वापसी) करें B END जाओ इस कार्यक्रम को समाप्त करो * ------------------ कंट्रोल तालिका -------------------------------------------- ------------* * | स्वीकार्य EBCDIC या ASCII मानों के इस कॉलम का परीक्षण '=' चर 'input1' के विरुद्ध किया जाता है * | | यह कॉलम उपयुक्त उपनेमिका का 3-बाइट पता है * वि वि CT1 DC C'A', AL3(ADD) कंट्रोल तालिका का स्टार्ट (4 बाइट एंट्री लेंथ) DC C'S', AL3 (घटाना) DC C'M', AL3 (गुणा करें) DC C'D', AL3 (डिवाइड) N EQU (*-CT1)/4 तालिका में मान्य प्रविष्टियों की संख्या (कुल लंबाई / प्रविष्टि लंबाई) DC C'?',AL3(डिफ़ॉल्ट) डिफ़ॉल्ट प्रविष्टि - सभी को पकड़ने के लिए ड्रॉप थ्रू पर उपयोग की जाती है INPUT1 DS C इनपुट वेरिएबल इस वेरिएबल में है * ------------------ उप-दिनचर्या ---------------------------- --------------* जोड़ें CSECT उप-दिनचर्या #1 (यहाँ अलग CSECT के रूप में दिखाया गया है लेकिन हो सकता है . वैकल्पिक रूप से इन-लाइन कूटहो) . जोड़ने के लिए निर्देश बीआर आर14 वापसी घटाएँ CSECT उप-दिनचर्या #2 . घटाने के लिए निर्देश (ओं)। बीआर आर14 वापसी . वगैरह..
उपरोक्त उदाहरण में दुभाषिया के प्रदर्शन में सुधार
- उपरोक्त उदाहरण में चयन करने के लिए, औसत निर्देश पथ की लंबाई (उपनेमिका कूटको छोड़कर) '4n/2 +3' है, लेकिन इसे आसानी से कम किया जा सकता है, जहां n = 1 से 64, एक रैखिक समय के लिए शून्य तुलना के साथ '5' की पथ लंबाई के साथ, यदि कच्चे EBCDIC आँकड़ा से CT1 के लिए एक सीधा सूचकांक बनाने के लिए पहली बार 256 बाइट अनुवाद तालिका का उपयोग किया जाता है। जहाँ n = 6, यह तब केवल 3 अनुक्रमिक तुलना और शाखा निर्देशों के बराबर होगा। हालाँकि, जहाँ n <= 64, औसतन इसे कई तुलनाओं का उपयोग करने की तुलना में लगभग 13 गुना कम निर्देशों की आवश्यकता होगी। जहां n = 1 से 256, औसतन यह लगभग 42 गुना कम निर्देशों का उपयोग करेगा - चूंकि, इस मामले में, एक अतिरिक्त निर्देश की आवश्यकता होगी (सूचकांक को 4 से गुणा करने के लिए)।
'बेहतर दुभाषिया' (ऊपर दिए गए उदाहरण की तुलना में औसतन '26 गुना कम निष्पादित निर्देश' तक, जहां n = 1 से 64 और कई तुलनाओं का उपयोग करके 13 गुना कम की आवश्यकता होगी)।
64 विभिन्न इनपुट मानों को संभालने के लिए, स्रोत कूट(या कम) की लगभग 85 पंक्तियों की आवश्यकता होती है (मुख्य रूप से एकल पंक्ति तालिका प्रविष्टियाँ) जबकि एकाधिक 'तुलना और शाखा' के लिए लगभग 128 पंक्तियों की आवश्यकता होगी (बाइनरी फ़ाइल का आकार भी लगभग आधा है - दूसरी अनुक्रमणिका निकालने के लिए आवश्यक अतिरिक्त 256 बाइट तालिका के बावजूद)।
* ------------------ दुभाषिया ------------------------------ --------------* SR R14,R14 ********* सेट R14=0 CALC IC R14, INPUT1 * calc * EBCDIC बाइट को R14 के लो ऑर्डर बिट्स (24–31) में डालें IC R14, CT1X (R14) * * EBCDIC वैल्यू को तालिका 'CT1X' पर इंडेक्स के रूप में उपयोग करके नया इंडेक्स प्राप्त करें FOUND L R15, CT1(R14) ********* इंडेक्स (0,4, 8 आदि) का उपयोग करके उपनेमिका के लिए पॉइंटर प्राप्त करें। BALR R14, R15 सब-रूटीन निष्पादित करें (कॉल करें और वापसी या डिफ़ॉल्ट) B END जाओ इस कार्यक्रम को समाप्त करो * --------------- अतिरिक्त ट्रांसलेट तालिका (EBCDIC --> पॉइंटर तालिका INDEX) 256 बाइट्स ----* CT1X DC 12AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00) x'00 के 16 बाइट्स के 12 समान सेट * X'00 - x'BF' का प्रतिनिधित्व DC AL1(00,'04',00,00,'16',00,00,00,00,00,00,00,00,00,00,00) ..x'C0' - X'CF' DC AL1(00,00,00,00,'12',00,00,00,00,00,00,00,00,00,00,00) ..x'D0' - X'DF' DC AL1(00,00,'08',00,00,00,00,00,00,00,00,00,00,00,00,00) ..x'E0' - X'EF' DC AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00) ..x'F0' - X'FF' * कोडांतरक का उपयोग स्वचालित रूप से सूचकांक मूल्यों की गणना करने और मूल्यों को अधिक उपयोगकर्ता के अनुकूल बनाने के लिए किया जा सकता है * (उदाहरण के लिए '04' को उपरोक्त तालिका CT1X में प्रतीकात्मक अभिव्यक्ति 'PADD-CT1' से बदला जा सकता है) * संशोधित CT1 (सूचकांक = 00, एकल आयाम, पूर्ण 31 बिट पता होने पर एक डिफ़ॉल्ट क्रिया जोड़ा गया) 'CT1' DC A(डिफ़ॉल्ट) इंडेक्स =00 कंट्रोल तालिका का स्टार्ट (4 बाइट एड्रेस कॉन्स्टेंट) पीएडीडी डीसी ए (एडीडी) = 04 पीएसयूबी डीसी ए (घटाना) = 08 पीएमयूएल डीसी ए (गुणा) =12 पीडीआईवी डीसी ए (डिवाइड) =16 * शेष कूटपहले उदाहरण के समान ही रहता है
'आगे बेहतर दुभाषिया' (औसत पर पहले उदाहरण की तुलना में '21 गुना कम निष्पादित निर्देश (जहां n> = 64)' और कई तुलनाओं का उपयोग करके 42 गुना कम की आवश्यकता होगी)।
256 विभिन्न इनपुट मानों को संभालने के लिए, स्रोत कूटया उससे कम की लगभग 280 पंक्तियों की आवश्यकता होगी (मुख्य रूप से एकल पंक्ति तालिका प्रविष्टियाँ), जबकि एकाधिक 'तुलना और शाखा' के लिए लगभग 512 पंक्तियों की आवश्यकता होगी (बाइनरी फ़ाइल का आकार भी लगभग आधा है) एक बार और)।
* ------------------ दुभाषिया ------------------------------ --------------* SR R14,R14 ********* सेट R14=0 CALC IC R14, INPUT1 * calc * EBCDIC बाइट को R14 के लो ऑर्डर बिट्स (24–31) में डालें IC R14, CT1X(R14) * * EBCDIC v का उपयोग करेंनई अनुक्रमणिका प्राप्त करने के लिए तालिका 'CT1X' पर अनुक्रमणिका के रूप में alue SLL R14,2 * * 'सूचकांक को 4 से गुणा करें (अतिरिक्त निर्देश)' FOUND L R15, CT1(R14) ********* इंडेक्स (0,4, 8 आदि) का उपयोग करके उपनेमिका के लिए पॉइंटर प्राप्त करें। BALR R14, R15 सब-रूटीन निष्पादित करें (कॉल करें और वापसी या डिफ़ॉल्ट) B END जाओ इस कार्यक्रम को समाप्त करो * --------------- अतिरिक्त ट्रांसलेट तालिका (EBCDIC --> पॉइंटर तालिका INDEX) 256 बाइट्स ----* CT1X DC 12AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00) x'00' के 16 बाइट्स के 12 समान सेट * X'00 - x'BF' का प्रतिनिधित्व DC AL1(00,'01',00,00,'04',00,00,00,00,00,00,00,00,00,00,00) ..x'C0' - X'CF' DC AL1(00,00,00,00,'03',00,00,00,00,00,00,00,00,00,00,00) ..x'D0' - X'DF' DC AL1(00,00,'02',00,00,00,00,00,00,00,00,00,00,00,00,00) ..x'E0' - X'EF' DC AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00) ..x'F0' - X'FF' * कोडांतरक का उपयोग स्वचालित रूप से सूचकांक मूल्यों की गणना करने और मूल्यों को अधिक उपयोगकर्ता के अनुकूल बनाने के लिए किया जा सकता है * (उदाहरण के लिए '01' को उपरोक्त तालिका CT1X में प्रतीकात्मक अभिव्यक्ति 'PADD-CT1/4' से बदला जा सकता है) * संशोधित CT1 (इंडेक्स अब 0,1,2,3,4 नहीं 0,4,8,12,16 पर आधारित है, ताकि सभी 256 विविधताओं को अनुमति दी जा सके) 'CT1' DC A(डिफ़ॉल्ट) इंडेक्स =00 कंट्रोल तालिका का स्टार्ट (4 बाइट एड्रेस कॉन्स्टेंट) पीएडीडी डीसी ए (एडीडी) = 01 पीएसयूबी डीसी ए (घटाना) = 02 पीएमयूएल डीसी ए (गुणा) = 03 पीडीआईवी डीसी ए (डिवाइड) = 04 * शेष कूटदूसरे उदाहरण के समान ही रहता है
'सी (क्रमादेशन भाषा) उदाहरण' C (क्रमादेशन लैंग्वेज) में यह उदाहरण दो तालिकाओं का उपयोग करता है, पहला (CT1) एक सरल रैखिक खोज एक-आयामी लुकअप तालिका है - इनपुट (x), और दूसरा, संबद्ध तालिका (CT1p) का मिलान करके एक सूचकांक प्राप्त करने के लिए। जाने के लिए लेबल के पतों की एक तालिका है। <वाक्यविन्यास प्रकाश लैंग = सी>
स्थिर स्थिरांक चार CT1 [] = {ए, एस, एम, डी}; / * अनुमत इनपुट मान * / स्थिर स्थिरांक शून्य *CT1p[] = {&&जोड़ें, &&घटाना, &&गुणा करें, &&विभाजित करें, &&डिफ़ॉल्ट}; /* गोटो और डिफ़ॉल्ट के लिए लेबल*/ for (int i = 0; i < sizeof(CT1); i++) /* ASCII मानों के माध्यम से प्रस्पंद */ {अगर (x==CT1[i]) गोटो *CT1p[i]; } /* मिला --> उपयुक्त लेबल */ गोटो *CT1p[i+1]; /* नहीं मिला --> डिफ़ॉल्ट लेबल */
</वाक्यविन्यास हाइलाइट> इसे और अधिक कुशल बनाया जा सकता है यदि एक 256 बाइट तालिका का उपयोग कच्चे ASCII मान (x) को सीधे एक सघन अनुक्रमिक सूचकांक मान में अनुवाद करने के लिए किया जाता है, जिसका उपयोग सीधे CT1p से शाखा के पते का पता लगाने के लिए किया जाता है (अर्थात बाइट-वाइड सरणी के साथ सूचकांक मानचित्रण) . इसके बाद यह x के सभी संभावित मानों के लिए निरंतर समय में निष्पादित होगा (यदि CT1p में लेबल के बजाय फ़ंक्शन के नाम शामिल हैं, तो स्विच-जैसी गोटो को समाप्त करते हुए जंप को डायनेमिक फ़ंक्शन कॉल से बदला जा सकता है - लेकिन अतिरिक्त लागत से प्रदर्शन में कमी फंक्शन हाउसकीपिंग (कम्प्यूटिंग))। <वाक्यविन्यास प्रकाश लैंग = सी>
स्थैतिक स्थिरांक शून्य *CT1p[] = {&&डिफ़ॉल्ट, &&जोड़ें, &&घटाना, &&गुणा, &&विभाजित करें}; /* नीचे दी गई 256 बाइट तालिका, संबंधित ASCII स्थितियों (A,S,M,D) में मान (1,2,3,4) रखती है, अन्य सभी 0x00 पर सेट हैं */ स्थिर स्थिरांक चार CT1x [] = { '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00','\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x01', '\x00', '\x00', '\x04', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x03', '\x00', '\x00', '\x00', '\x00', '\x00', '\x02', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x03', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00'}; / * इनपुट वर्ण (x) के मान की परवाह किए बिना, निम्न कूटनिरंतर समय में निष्पादित होगा * / मैं = CT1x (एक्स); /* तालिका CT1x से सही उपनेमका अनुक्रमणिका निकालें इसके ASCII मान का प्रारंभ में एक अनुक्रमणिका के रूप में उपयोग करके */ गोटो *CT1p[i]; /* गोटो (इस पर स्विच करें) इंडेक्स से संबंधित लेबल (0=डिफ़ॉल्ट, 1=जोड़ें, 2=घटाना,।) - CT1p देखें */
</वाक्यविन्यास हाइलाइट>
नीचे दिया गया अगला उदाहरण बताता है कि कैसे एक समान प्रभाव उन भाषाओं में प्राप्त किया जा सकता है जो आँकड़ा संरचनाओं में सूचक परिभाषाओं का समर्थन नहीं करती हैं लेकिन एक उपनेमका के लिए अनुक्रमित शाखाओं का समर्थन करती हैं - एक (शून्य-आधारित संख्यािंग|0-आधारित) के भीतर निहित ) उपनेमिका पॉइंटर्स की सरणी। तालिका (CT2) का उपयोग इंडेक्स (दूसरे कॉलम से) को पॉइंटर ऐरे (CT2P) में निकालने के लिए किया जाता है। यदि सूचक सरणियों का समर्थन नहीं किया जाता है, तो स्विच प्रकथन या समतुल्य का उपयोग क्रमादेश लेबल्स के अनुक्रम में से एक में नियंत्रण प्रवाह को बदलने के लिए किया जा सकता है (उदाहरण: केस0, केस1, केस2, केस3, केस4) जो या तो सीधे इनपुट को प्रोसेस करते हैं, या अन्यथा इससे निपटने के लिए उपयुक्त उपनेमका (डिफ़ॉल्ट, जोड़ें, घटाएं, गुणा या विभाजित करें,..) पर कॉल करें (वापसी के साथ)।
'सीटी2'
input 1 subr # A 1 S 2 M 3 D 4 ? 0
उपरोक्त उदाहरणों की तरह, वास्तव में तालिका लुकअप का उपयोग किए बिना संभावित ASCII इनपुट मानों (ए, एस, एम, डी या अज्ञात) को पॉइंटर सरणी इंडेक्स में अनुवाद करना संभव है, लेकिन यहां स्थिरता के लिए तालिका के रूप में दिखाया गया है पहला उदाहरण।
- CT2P सूचक सरणी
बहु-आयामी नियंत्रण तालिकाओं का निर्माण किया जा सकता है (अर्थात अनुकूलित) जो उपरोक्त उदाहरणों की तुलना में 'अधिक जटिल' हो सकता है जो कई इनपुट पर कई स्थितियों के लिए परीक्षण कर सकता है या कुछ मिलान मानदंडों के आधार पर एक से अधिक 'कार्रवाई' कर सकता है। एक 'कार्रवाई' में एक अन्य अधीनस्थ नियंत्रण तालिका में सूचक शामिल हो सकता है। नीचे दिए गए सरल उदाहरण में एक अतिरिक्त कॉलम (लोअर केस इनपुट को संभालने के लिए) के रूप में निहित 'OR' शर्त शामिल है, हालांकि इस उदाहरण में, इसे निर्दिष्ट करते हुए प्रत्येक लोअर केस वर्णों के लिए एक अतिरिक्त प्रविष्टि होने से समान रूप से नियंत्रित किया जा सकता है। ऊपरी केस वर्णों के समान उपनेमिका पहचानकर्ता)। प्रत्येक इनपुट के लिए वास्तविक रन-टाइम घटनाओं की गणना करने के लिए एक अतिरिक्त कॉलम भी शामिल है।
'सीटी3'
input 1 alternate subr # count A a 1 0 S s 2 0 M m 3 0 D d 4 0 ? ? 0 0
नियंत्रण तालिका प्रविष्टियाँ तब प्रक्रियात्मक भाषाओं में सशर्त बयानों के समान होती हैं, लेकिन महत्वपूर्ण रूप से, बिना वास्तविक (भाषा पर निर्भर) सशर्त बयान (यानी निर्देश) मौजूद होते हैं (सामान्य कूटदुभाषिया में भौतिक रूप से होता है जो तालिका प्रविष्टियों को संसाधित करता है, नहीं तालिका में ही - जो केवल अपनी संरचना और मूल्यों के माध्यम से क्रमादेश लॉजिक का प्रतीक है)।
इस तरह की तालिकाओं में, जहां समान तालिका प्रविष्टियों की एक श्रृंखला संपूर्ण तर्क को परिभाषित करती है, एक तालिका प्रविष्टि संख्या या सूचक प्रभावी रूप से अधिक पारंपरिक कार्यक्रमों में कार्यक्रम गणक की जगह ले सकता है और एक 'कार्रवाई' में रीसेट किया जा सकता है, जिसे इसमें भी निर्दिष्ट किया गया है। तालिका प्रविष्टि। नीचे दिए गए उदाहरण (सीटी4) से पता चलता है कि पिछली तालिका को विस्तारित करने के लिए, 'अगली' प्रविष्टि (और/या 'परिवर्तन प्रवाह' (शाखा (संगणक विज्ञान)) उपनेमका शामिल करने के लिए) एक क्रमादेश प्रस्पंद बना सकता है (यह उदाहरण वास्तव में नहीं है इस तरह की नियंत्रण तालिका बनाने का सबसे कुशल तरीका लेकिन, ऊपर दिए गए पहले उदाहरणों से एक क्रमिक 'विकास' का प्रदर्शन करके, दिखाता है कि व्यवहार को संशोधित करने के लिए अतिरिक्त कॉलम का उपयोग कैसे किया जा सकता है।) पाँचवाँ कॉलम दर्शाता है कि एक से अधिक क्रियाएँ शुरू की जा सकती हैं एकल तालिका प्रविष्टि - इस मामले में प्रत्येक प्रविष्टि के सामान्य प्रसंस्करण के बाद की जाने वाली कार्रवाई ('-' मान का अर्थ है 'कोई शर्त नहीं' या 'कोई कार्रवाई नहीं')।
स्ट्रक्चर्ड क्रमादेशन या स्ट्रक्चर्ड क्रमादेशन | गोटो-लेस कोड, ('प्रस्पंद करते समय करें' या 'प्रस्पंद के लिए' निर्माण के समतुल्य को शामिल करते हुए), उपयुक्त रूप से अभिकल्पना किए गए और 'इंडेंटेड' नियंत्रण तालिका संरचनाओं के साथ भी समायोजित किया जा सकता है।
'सीटी4' (इनपुट1 और प्रक्रिया को पढ़ने के लिए एक पूर्ण 'क्रमादेश', 'ई' मिलने तक दोहराता है)
input 1 alternate subr # count jump - - 5 0 - E e 7 0 - A a 1 0 - S s 2 0 - M m 3 0 - D d 4 0 - ? ? 0 0 - - - 6 0 1
- CT4P सूचक सरणी
तालिका-संचालित रेटिंग
दूरसंचार रेटिंग के विशेषज्ञ क्षेत्र में (किसी विशेष कॉल की लागत निर्धारित करने से संबंधित), तालिका-संचालित रेटिंग तकनीक उन अनुप्रयोगों में नियंत्रण तालिकाओं के उपयोग को दर्शाती है जहां बाजार की शक्तियों के कारण नियम बार-बार बदल सकते हैं। कई मामलों में गैर-क्रमादेशक द्वारा अल्प सूचना पर शुल्क निर्धारित करने वाली तालिकाओं को बदला जा सकता है।[4][5] यदि एल्गोरिदम दुभाषिया में पूर्व-निर्मित नहीं हैं (और इसलिए तालिका में रखी गई अभिव्यक्ति की अतिरिक्त रनटाइम व्याख्या की आवश्यकता होती है), इसे तालिका-संचालित रेटिंग के बजाय नियम-आधारित रेटिंग के रूप में जाना जाता है (और इसके परिणामस्वरूप काफी अधिक ओवरहेड की खपत होती है)।
स्प्रेडशीट
एक स्प्रेडशीट आँकड़ा शीट को दो आयामी नियंत्रण तालिका के रूप में माना जा सकता है, जिसमें गैर-खाली सेल अंतर्निहित स्प्रेडशीट क्रमादेश (दुभाषिया) के आँकड़ा का प्रतिनिधित्व करती हैं। सूत्र वाली कोशिकाओं को आमतौर पर एक समान चिह्न के साथ उपसर्ग किया जाता है और केवल एक विशेष प्रकार के आँकड़ा इनपुट को निर्दिष्ट किया जाता है जो अन्य संदर्भित कोशिकाओं के प्रसंस्करण को निर्धारित करता है - दुभाषिया के भीतर नियंत्रण प्रवाह को बदलकर। यह अंतर्निहित दुभाषिया से सूत्रों का बाहरीकरण है जो स्पष्ट रूप से दोनों स्प्रैडशीट्स की पहचान करता है, और उपरोक्त उद्धृत नियम आधारित रेटिंग उदाहरण गैर क्रमादेशक द्वारा नियंत्रण तालिकाओं के उपयोग के आसानी से पहचाने जाने योग्य उदाहरण हैं।
क्रमादेशन प्रतिमान
यदि नियंत्रण तालिका तकनीक को किसी विशेष क्रमादेशन प्रतिमान से संबंधित कहा जा सकता है, तो निकटतम सादृश्य ऑटोमेटा-आधारित क्रमादेशन या रिफ्लेक्शन (संगणक विज्ञान) हो सकता है। चिंतनशील (मेटाक्रमादेशन का एक रूप - चूंकि तालिका प्रविष्टियों को दुभाषिया के व्यवहार को 'संशोधित' करने के लिए कहा जा सकता है)। हालाँकि दुभाषिया स्वयं, और उपनेमिका्स, किसी भी उपलब्ध प्रतिमानों या यहाँ तक कि मिश्रण का उपयोग करके क्रमादेश किया जा सकता है। तालिका स्वयं अनिवार्य रूप से कच्चे आँकड़ा मानों का संग्रह हो सकती है जिसे संकलित करने की भी आवश्यकता नहीं होती है और बाहरी स्रोत से पढ़ा जा सकता है (विशिष्ट, प्लेटफ़ॉर्म निर्भर, अधिक दक्षता के लिए सीधे मेमोरी पॉइंटर्स का उपयोग करके कार्यान्वयन को छोड़कर)।
== बाइटकोड/वर्चुअल मशीन निर्देश सेट == के अनुरूप एक बहु-आयामी नियंत्रण तालिका में वर्चुअल मशीन पर चलने वाले बाइटकूटके लिए कुछ अवधारणात्मक समानताएं होती हैं, जिसमें एक प्लेटफॉर्म निर्भर इंटरप्रेटर (कंप्यूटिंग)| दुभाषिया कार्यक्रम आमतौर पर वास्तविक निष्पादन करने के लिए आवश्यक होता है (जो मोटे तौर पर तालिका सामग्री द्वारा सशर्त रूप से निर्धारित होता है)। एक सामान्य मध्यवर्ती 'निर्देश सेट' बनाने के उद्देश्य से हाल ही में सामान्य मध्यवर्ती भाषा (CIL) के लिए कुछ वैचारिक समानताएँ भी हैं जो प्लेटफ़ॉर्म से स्वतंत्र हैं (लेकिन CIL के विपरीत, अन्य भाषाओं के लिए एक सामान्य संसाधन के रूप में उपयोग किए जाने का कोई दिखावा नहीं है) . पी-कूटमशीन | पी-कूटको भी एक समान लेकिन पहले के कार्यान्वयन के रूप में माना जा सकता है, जिसकी उत्पत्ति 1966 तक हुई थी।
निर्देश लाने
जब क्रमादेश प्रवाह को निर्धारित करने के लिए एक बहु-आयामी नियंत्रण तालिका का उपयोग किया जाता है, तो सामान्य हार्डवेयर कार्यक्रम गणक फ़ंक्शन को पहले (या अगली) तालिका प्रविष्टि के लिए एक पॉइंटर (संगणक क्रमादेशन) के साथ प्रभावी ढंग से अनुकरण किया जाता है या इसके लिए एक सरणी अनुक्रमणिका। निर्देश प्राप्त करने में उस तालिका प्रविष्टि में आँकड़ा को डीकूटकरना शामिल है - आवश्यक रूप से पहले प्रविष्टि के सभी या कुछ आँकड़ा को कॉपी किए बिना। क्रमादेशन लैंग्वेज जो पॉइंटर (संगणक क्रमादेशन) का उपयोग करने में सक्षम हैं, उनका दोहरा फायदा है कि कम कम्प्यूटेशनल ओवरहेड शामिल है, सामग्री तक पहुँचने और निष्पादन के बाद अगली तालिका प्रविष्टि को इंगित करने के लिए काउंटर को आगे बढ़ाने में। अगले 'निर्देश' पते (यानी तालिका प्रविष्टि) की गणना किसी भी चरण में क्रमादेश प्रस्पंद्स और शाखा (संगणक विज्ञान) निर्देशों की अनुमति देने वाली प्रत्येक व्यक्तिगत तालिका प्रविष्टि की वैकल्पिक अतिरिक्त क्रिया के रूप में भी की जा सकती है।
निगरानी नियंत्रण तालिका निष्पादन
डिबगिंग उद्देश्यों, हॉट स्पॉट (संगणक विज्ञान) का पता लगाने, कूटकवरेज़ विश्लेषण और वास्तविक क्रमादेश प्रवाह के पूर्ण या आंशिक ट्रेस को रिकॉर्ड करने के लिए दुभाषिया कार्यक्रम वैकल्पिक रूप से क्रमादेश काउंटर (और निर्देश प्रकार के आधार पर अन्य प्रासंगिक विवरण) को सहेज सकता है। रूपरेखा (संगणक क्रमादेशन) (ऊपर CT3 और CT4 के उदाहरण देखें)।
लाभ
- स्पष्टता - तालिका (सूचना) सर्वव्यापी कंप्यूटिंग है और आम जनता द्वारा भी स्वाभाविक रूप से समझी जाती है (विशेषकर उपयोगकर्ता गाइड में दोष निदान तालिकाएँ)
- सुवाह्य - 100% भाषा स्वतंत्र (और प्लेटफ़ॉर्म स्वतंत्र - दुभाषिया को छोड़कर) के लिए अभिकल्पना किया जा सकता है
- लचीलापन - या तो भाषा आदिम या उपनेमिका्स को पारदर्शी रूप से निष्पादित करने की क्षमता और समस्या के अनुरूप कस्टम अभिकल्पना किया जाना
- सघनता - तालिका आमतौर पर साथ-साथ स्थिति/क्रिया जोड़ी दिखाती है (सामान्य प्लेटफ़ॉर्म/भाषा कार्यान्वयन निर्भरताओं के बिना), जिसके परिणामस्वरूप अक्सर
- बाइनरी फाइल - निर्देशों के कम दोहराव के माध्यम से आकार में कमी
- स्रोत कूटफ़ाइल - कई सशर्त बयानों के उन्मूलन के माध्यम से आकार में कमी आई है
- बेहतर क्रमादेश लोड (या डाउनलोड) गति
- रख-रखाव - तालिका अक्सर बनाए रखने के लिए आवश्यक स्रोत लाइनों की संख्या को कम करते हैं v। कई तुलनाएँ
- संदर्भ की लोकैलिटी - कॉम्पैक्ट तालिका स्ट्रक्चर के परिणामस्वरूप कैश में शेष तालिका (कंप्यूटिंग)
- कूटपुन: उपयोग - दुभाषिया आमतौर पर पुन: प्रयोज्य होता है। बार-बार इसे ठीक उसी तकनीक का उपयोग करके नए क्रमादेशन कार्यों के लिए आसानी से अनुकूलित किया जा सकता है और तालिका परिभाषाओं द्वारा नियंत्रित, 'ऑर्गेनिक रूप से' बन सकता है, वास्तव में, आजमाए हुए और परखे हुए उपनेमिका्स की एक मानक लाइब्रेरी।
- एल्गोरिथम दक्षता - प्रणालीगत अनुकूलन संभव। दुभाषिया में कोई भी प्रदर्शन सुधार आमतौर पर इसका उपयोग करने वाले सभी अनुप्रयोगों में सुधार करता है (ऊपर 'CT1' में उदाहरण देखें)।
- एक्स्टेंसिबल - नया 'निर्देश' जोड़ा जा सकता है - केवल दुभाषिया का विस्तार करके
- इंटरप्रेटर को एप्लिकेशन क्रमादेश की तरह लिखा जा सकता है
वैकल्पिक रूप से:-
- दुभाषिया तालिका के भीतर एकत्र किए गए रनटाइम सॉफ्टवेयर मीट्रिक का उपयोग करके आत्मनिरीक्षण और आत्म अनुकूलन (संगणक विज्ञान) हो सकता है (CT3 और CT4 देखें - प्रविष्टियों के साथ जिन्हें समय-समय पर अवरोही गणना द्वारा क्रमबद्ध किया जा सकता है)। दुभाषिया वैकल्पिक रूप से रन-टाइम पर एकत्रित मेट्रिक्स से गतिशील रूप से सबसे कुशल लुकअप तकनीक का चयन कर सकता है (उदाहरण के लिए सरणी का आकार, मानों की श्रेणी, क्रमबद्ध या अवर्गीकृत)
- गतिशील प्रेषण - सामान्य कार्यों को पहले से लोड किया जा सकता है और स्मृति उपयोग को कम करने के लिए केवल पहली मुठभेड़ पर कम सामान्य कार्य प्राप्त किए जा सकते हैं। इसे प्राप्त करने के लिए इन-तालिका memoization को नियोजित किया जा सकता है।
- दुभाषिया में अंतर्निहित डिबगिंग, ट्रेस और मॉनिटर विशेषताएं हो सकती हैं - जिसे फिर परीक्षण या 'लाइव' मोड के अनुसार चालू या बंद किया जा सकता है
- नियंत्रण तालिकाओं को 'ऑन-द-फ्लाई' (कुछ उपयोगकर्ता इनपुट के अनुसार या मापदंडों से) बनाया जा सकता है और फिर दुभाषिया द्वारा निष्पादित किया जा सकता है (शब्दशः कूटके निर्माण के बिना)।
नुकसान
- प्रशिक्षण की आवश्यकता - एप्लिकेशन क्रमादेशक आमतौर पर सामान्य समाधान तैयार करने के लिए प्रशिक्षित नहीं होते हैं
निम्नलिखित मुख्य रूप से बहु-आयामी तालिकाओं में उनके उपयोग पर लागू होते हैं, न कि पहले चर्चा की गई एक-आयामी तालिकाओं पर।
- कम्प्यूटेशनल ओवरहेड - अप्रत्यक्ष (क्रमादेशन) के अतिरिक्त स्तर की वजह से आभासी निर्देशों की 'व्याख्या' के कारण कुछ वृद्धि हुई है (हालांकि यह आमतौर पर एक अच्छी तरह से अभिकल्पना किए गए सामान्य दुभाषिया द्वारा ऑफसेट से अधिक हो सकता है जो कुशल प्रत्यक्ष अनुवाद, खोज और का पूरा लाभ उठाता है। सशर्त परीक्षण तकनीकें जिनका अन्यथा उपयोग नहीं किया जा सकता है)
- कॉम्पलेक्स अभिव्यक्ति (क्रमादेशन) को हमेशा आँकड़ा तालिका प्रविष्टियों में तुलना उद्देश्यों के लिए सीधे उपयोग नहीं किया जा सकता है
- (इन 'मध्यवर्ती मूल्यों' की गणना एक उपनेमिका के भीतर पहले से की जा सकती है और उनके मूल्यों को सशर्त तालिका प्रविष्टियों में संदर्भित किया जाता है। वैकल्पिक रूप से, एक उपनेमिका पूर्ण जटिल सशर्त परीक्षण (बिना शर्त 'कार्रवाई' के रूप में) और, सेटिंग करके कर सकता है इसके परिणाम के रूप में एक सत्य बिट, फिर अगली तालिका प्रविष्टि में इसका परीक्षण किया जा सकता है। संरचित कार्यक्रम प्रमेय देखें)
उद्धरण
Multiway branching is an important programming technique which is all too often replaced by an inefficient sequence of if tests. Peter Naur recently wrote me that he considers the use of tables to control program flow as a basic idea of computer science that has been nearly forgotten; but he expects it will be ripe for rediscovery any day now. It is the key to efficiency in all the best compilers I have studied.
— Donald Knuth, Structured Programming with go to Statements
There is another way to look at a program written in interpretative language. It may be regarded as a series of subroutine calls, one after another. Such a program may in fact be expanded into a long sequence of calls on subroutines, and, conversely, such a sequence can usually be packed into a coded form that is readily interpreted. The advantage of interpretive techniques are the compactness of representation, the machine independence, and the increased diagnostic capability. An interpreter can often be written so that the amount of time spent in interpretation of the code itself and branching to the appropriate routine is negligible
— Donald Knuth, The Art of Computer Programming Volume 1, 1997, page 202
The space required to represent a program can often be decreased by the use of interpreters in which common sequences of operations are represented compactly. A typical example is the use of a finite-state machine to encode a complex protocol or lexical format into a small table
— Jon Bentley, Writing Efficient Programs
Jump tables can be especially efficient if the range tests can be omitted. For example, if the control value is an enumerated type (or a character) then it can only contain a small fixed range of values and a range test is redundant provided the jump table is large enough to handle all possible values
— David.A. SPULER, Compiler Code Generation for Multiway Branch Statements as a Static Search Problem
Programs must be written for people to read, and only incidentally for machines to execute.
— "Structure and Interpretation of Computer Programs", preface to the first edition, Abelson & Sussman
Show me your flowchart and conceal your tables, and I shall continue to be mystified. Show me your tables, and I won't usually need your flowchart; it'll be obvious.
— "The Mythical Man-Month: Essays on Software Engineering", Fred Brooks
यह भी देखें
- ऑटोमेटा-आधारित क्रमादेशन
- आँकड़ाबेस-केंद्रित संरचना
- आँकड़ा-संचालित परीक्षण
- निर्णय तालिका
- परिमित अवस्था मशीन
- कीवर्ड चालित परीक्षण
- सूचक (संगणक क्रमादेशन)
- स्विच प्रकथन - एकल इनपुट चर के आधार पर कई लेबल (क्रमादेशन लैंग्वेज) में से किसी एक के लिए मल्टीवे ब्रांचिंग
- थ्रेडेड कोड
- थ्रेडेड कूट# टोकन थ्रेडिंग
टिप्पणियाँ
- ↑ Programs from decision tables, Humby, E., 2007,Macdonald, 1973 ... Biggerstaff, Ted J. Englewood Cliffs, NJ : Prentice-Hall ISBN 0-444-19569-6
- ↑ "Archived copy" (PDF). Archived from the original (PDF) on 10 June 2016. Retrieved 17 May 2016.
{{cite web}}
: CS1 maint: archived copy as title (link) - ↑ UML state machine#Hierarchically nested states
- ↑ Carl Wright, Service Level Corpo. (2002) Program Code Based vs. Table-driven vs. Rule-Based Rating, Rating Matters issue n. 12, 13 November 2002 ISSN 1532-1886
- ↑ Brian E. Clauser, Melissa J. Margolis, Stephen G. Clyman, Linette P. Ross (1997) Development of Automated Scoring Algorithms for Complex Performance Assessments: A Comparison of Two Approaches Journal of Educational Measurement, Vol. 34, No. 2 (Summer, 1997), pp. 141–161
संदर्भ
- Decision Table Based Methodology
- Structured Programming with go to Statements by Donald Knuth
- Compiler code generation for multiway branch statements as a static search problem 1I994, by David A. Spuler
बाहरी संबंध
- Switch statement in Windows PowerShell describes extensions to standard switch statement (providing some similar features to control tables)
- Control Table example in "C" language using pointers, by Christopher Sawtell c1993, Department of Computer Science, University of Auckland
- Table driven design Archived 10 June 2016 at the Wayback Machine by Wayne Cunneyworth of DataKinetics
- From Requirements to Tables to Code and Tests By George Brooke
- Some comments on the use of ambiguous decision tables and their conversion to computer programs by P. J. H. King and R. G. Johnson, Univ. of London, London, UK
- Ambiguity in limited entry decision tables by P. J. H. King
- Conversion of decision tables to computer programs by rule mask techniques by P. J. H. King
- A Superoptimizer Analysis of Multiway Branch Code Generation section 3.9, page 16 index mapping
- Jump Tables via Function Pointer Arrays in C/C++ Jones, Nigel. "Arrays of Pointers to Functions [2]" Embedded Systems Programming, May 1999.
- Page view statistics for this article for December 2009