डीएमएस सॉफ्टवेयर रीइंजीनियरिंग टूलकिट: Difference between revisions
No edit summary |
No edit summary |
||
Line 25: | Line 25: | ||
}} | }} | ||
डीएमएस सॉफ्टवेयर रीइंजीनियरिंग टूलकिट बड़े पैमाने के सॉफ्टवेयर | डीएमएस सॉफ्टवेयर रीइंजीनियरिंग टूलकिट बड़े पैमाने के सॉफ्टवेयर प्रणाली के लिए स्रोत भाषाओं के मनमाने मिश्रण के लिए कस्टम सोर्स प्रोग्राम विश्लेषण, संशोधन, अनुवाद या सॉफ्टवेयर प्रणाली की पीढ़ी को स्वचालित करने के लिए उपलब्ध [[ कार्यक्रम परिवर्तन |कार्यक्रम परिवर्तन]] टूल का मालिकाना समूह है।<ref>[http://portal.acm.org/citation.cfm?id=999466&dl=GUIDE&coll=GUIDE&CFID=55567354&CFTOKEN=76359207 ''DMS: Program Transformations for Practical Scalable Software Evolution''. Proceedings International Conference on Software Engineering 2004] [http://www.semanticdesigns.com/Company/Publications/DMS-for-ICSE2004-reprint.pdf Reprint]</ref> डीएमएस मूल रूप से डिज़ाइन मेंटेनेंस प्रणाली नामक सॉफ़्टवेयर के डिज़ाइन को बनाए रखने के सिद्धांत से प्रेरित था।<ref>[http://portal.acm.org/citation.cfm?id=129859 ''Design Maintenance Systems''. Communications of the ACM 1992][http://www.semanticdesigns.com/Company/Publications/DMS-CACM-1992-baxter.pdf Reprint] | ||
</ref> डीएमएस और डिज़ाइन मेंटेनेंस | </ref> डीएमएस और डिज़ाइन मेंटेनेंस प्रणाली सिमेंटिक डिज़ाइन के पंजीकृत ट्रेडमार्क हैं। | ||
==उपयोग== | ==उपयोग== | ||
Line 34: | Line 34: | ||
टूलकिट भाषा व्याकरण को परिभाषित करने के लिए साधन प्रदान करता है और [[पार्सर]] का उत्पादन करेगा जो स्वचालित रूप से अमूर्त वाक्यविन्यास पेड़ (एएसटी) का निर्माण करेगा, और मूल या संशोधित एएसटी को वापस संकलित स्रोत पाठ में परिवर्तित करने के लिए [[सुंदरप्रिंटर]] का निर्माण करेगा। पार्स ट्री कैप्चर करते हैं, और प्रिटीप्रिंटर्स मूल स्रोत प्रोग्राम के बारे में संपूर्ण विवरण, जिसमें स्रोत स्थिति, टिप्पणियाँ, मूलांक और संख्याओं का प्रारूप आदि सम्मिलित हैं, यह सुनिश्चित करने के लिए कि पुनर्जीवित स्रोत पाठ प्रोग्रामर के लिए मूल पाठ मॉड्यूलो के समान ही पहचानने योग्य है। कोई भी प्रयुक्त परिवर्तन। | टूलकिट भाषा व्याकरण को परिभाषित करने के लिए साधन प्रदान करता है और [[पार्सर]] का उत्पादन करेगा जो स्वचालित रूप से अमूर्त वाक्यविन्यास पेड़ (एएसटी) का निर्माण करेगा, और मूल या संशोधित एएसटी को वापस संकलित स्रोत पाठ में परिवर्तित करने के लिए [[सुंदरप्रिंटर]] का निर्माण करेगा। पार्स ट्री कैप्चर करते हैं, और प्रिटीप्रिंटर्स मूल स्रोत प्रोग्राम के बारे में संपूर्ण विवरण, जिसमें स्रोत स्थिति, टिप्पणियाँ, मूलांक और संख्याओं का प्रारूप आदि सम्मिलित हैं, यह सुनिश्चित करने के लिए कि पुनर्जीवित स्रोत पाठ प्रोग्रामर के लिए मूल पाठ मॉड्यूलो के समान ही पहचानने योग्य है। कोई भी प्रयुक्त परिवर्तन। | ||
डीएमएस सिमेंटिक विधेय के साथ [[जीएलआर पार्सर]] पार्सिंग विधि का उपयोग करता है। यह इसे सभी संदर्भ-मुक्त व्याकरणों के साथ-साथ [[फोरट्रान]] जैसे अधिकांश गैर-संदर्भ-मुक्त भाषा वाक्यविन्यास को संभालने में सक्षम बनाता है, जिसे पार्स करते समय सही ढंग से नेस्टेड लूप के लिए एएसटी उत्पन्न करने के लिए लेबल द्वारा साझा किए गए CONTINUE स्टेटमेंट के साथ | डीएमएस सिमेंटिक विधेय के साथ [[जीएलआर पार्सर]] पार्सिंग विधि का उपयोग करता है। यह इसे सभी संदर्भ-मुक्त व्याकरणों के साथ-साथ [[फोरट्रान]] जैसे अधिकांश गैर-संदर्भ-मुक्त भाषा वाक्यविन्यास को संभालने में सक्षम बनाता है, जिसे पार्स करते समय सही ढंग से नेस्टेड लूप के लिए एएसटी उत्पन्न करने के लिए लेबल द्वारा साझा किए गए CONTINUE स्टेटमेंट के साथ अनेक डीओ लूप के मिलान की आवश्यकता होती है। डीएमएस में विभिन्न प्रकार की पूर्वनिर्धारित भाषाएं हैं, जो [[सी (प्रोग्रामिंग भाषा)]] और [[सी++]] की अधिकांश वास्तविक बोलियों को कवर करती हैं, जिनमें [[सी++0x]], सी शार्प (प्रोग्रामिंग भाषा)|सी#, [[जावा (प्रोग्रामिंग भाषा)]], [[पायथन (प्रोग्रामिंग भाषा)]], [[पीएचपी]] सम्मिलित हैं। , [[ईजीएल (प्रोग्रामिंग भाषा)]], फोरट्रान, [[कोबोल]], [[ मूल दृश्य |मूल दृश्य]] , [[Verilog]], [[वीएचडीएल]] और कुछ 20 या अधिक अन्य भाषाएँ। डीएमएस [[ASCII]], [[ISO-8859]], [[UTF-8|यूटीएफ-8]], [[UTF-16|यूटीएफ-16]], [[EBCDIC]], [[Shift-JIS]] और विभिन्न प्रकार के माइक्रोसॉफ्ट कैरेक्टर एन्कोडिंग को संभाल सकता है। | ||
डीएमएस मेट्रिक्स जैसे एएसटी पर कस्टम विश्लेषण की गणना के लिए [[विशेषता व्याकरण]] मूल्यांकनकर्ता प्रदान करता है, और [[प्रतीक तालिका]] निर्माण के लिए समर्थन भी सम्मिलित करता है। अन्य प्रोग्राम तथ्यों को अंतर्निहित नियंत्रण- और डेटा-[[प्रवाह विश्लेषण]] इंजन, स्थानीय और वैश्विक [[सूचक विश्लेषण]], संपूर्ण-प्रोग्राम [[कॉल ग्राफ़]] निष्कर्षण, और [[अमूर्त व्याख्या]] द्वारा प्रतीकात्मक श्रेणी विश्लेषण द्वारा निकाला जा सकता है। | डीएमएस मेट्रिक्स जैसे एएसटी पर कस्टम विश्लेषण की गणना के लिए [[विशेषता व्याकरण]] मूल्यांकनकर्ता प्रदान करता है, और [[प्रतीक तालिका]] निर्माण के लिए समर्थन भी सम्मिलित करता है। अन्य प्रोग्राम तथ्यों को अंतर्निहित नियंत्रण- और डेटा-[[प्रवाह विश्लेषण]] इंजन, स्थानीय और वैश्विक [[सूचक विश्लेषण]], संपूर्ण-प्रोग्राम [[कॉल ग्राफ़]] निष्कर्षण, और [[अमूर्त व्याख्या]] द्वारा प्रतीकात्मक श्रेणी विश्लेषण द्वारा निकाला जा सकता है। | ||
Line 49: | Line 49: | ||
if no_side_effects(v); | if no_side_effects(v); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
पुनर्लेखन नियमों के नाम हैं, उदा. सशर्त_असाइनमेंट को सरल बनाएं। प्रत्येक नियम में ''इससे मेल करें'' और ''उससे बदलें'' पैटर्न जोड़ी को -> द्वारा | पुनर्लेखन नियमों के नाम हैं, उदा. सशर्त_असाइनमेंट को सरल बनाएं। प्रत्येक नियम में ''इससे मेल करें'' और ''उससे बदलें'' पैटर्न जोड़ी को -> द्वारा भिन्न किया गया है, हमारे उदाहरण में, पठनीयता के लिए भिन्न-भिन्न लाइनों पर। पैटर्न को भाषा वाक्यविन्यास श्रेणियों के अनुरूप होना चाहिए; इस स्थितियोंमें, दोनों पैटर्न वाक्यविन्यास श्रेणी के होने चाहिए, साथ ही -> द्वारा पैटर्न के साथ सहानुभूति में भिन्न किया जाना चाहिए। लक्ष्य भाषा (उदाहरण के लिए, सी) सतह वाक्यविन्यास को लक्ष्य भाषा से पुनर्लेखन-नियम वाक्यविन्यास को भिन्न करने के लिए मेटा-कोट्स के अंदर कोडित किया जाता है। मेटा-कोट्स के अंदर बैकस्लैश पैटर्न मेटा वेरिएबल्स (उदाहरण के लिए, \v, \e1, \e2) को इंगित करने के लिए डोमेन एस्केप का प्रतिनिधित्व करते हैं, जो हस्ताक्षर पंक्ति में मेटावेरिएबल घोषणा के अनुरूप किसी भी भाषा निर्माण से मेल खाते हैं, उदाहरण के लिए, ई1 वाक्यात्मक श्रेणी का होना चाहिए: ''(कोई भी) अभिव्यक्ति''। यदि ''मैच'' पैटर्न में मेटावेरिएबल का अनेक बार उल्लेख किया गया है, तब इसे समान उपवृक्षों से मेल खाना चाहिए; इस उदाहरण में मिलान पैटर्न में दोनों असाइनमेंट में समान समान आकार का v होना चाहिए। ''रिप्लेस'' पैटर्न में मेटावेरिएबल्स को बाईं ओर से संबंधित मिलानों द्वारा प्रतिस्थापित किया जाता है। सशर्त खंड यदि अतिरिक्त शर्त प्रदान करता है जिसे नियम प्रयुक्त करने के लिए पूरा किया जाना चाहिए, उदाहरण के लिए, मिलान किए गए मेटावेरिएबल वी, इच्छानुसार बाएं हाथ की ओर होने के कारण, कोई साइड इफेक्ट नहीं होना चाहिए (उदाहरण के लिए, [i++] के रूप में नहीं हो सकता है; कोई दुष्प्रभाव नहीं विधेय को अन्य डीएमएस तंत्र के साथ निर्मित विश्लेषक द्वारा परिभाषित किया गया है)। | ||
कोड पर समष्टि परिवर्तन प्राप्त करना | कोड पर समष्टि परिवर्तन प्राप्त करना अनेक नियम प्रदान करके पूरा किया जाता है जो वांछित प्रभाव प्राप्त करने में सहयोग करते हैं। नियम-सेट PARLANSE में कोडित मेटाप्रोग्राम द्वारा प्रोग्राम के कुछ हिस्सों पर केंद्रित है। | ||
भाषा की परिभाषा और स्रोत-से-स्रोत परिवर्तन नियमों को परिभाषित और प्रयुक्त करने का पूरा उदाहरण हाई स्कूल [[बीजगणित]] और डोमेन-विशिष्ट भाषा के रूप में थोड़ी सी [[गणना]] का उपयोग करके दिखाया गया है। | भाषा की परिभाषा और स्रोत-से-स्रोत परिवर्तन नियमों को परिभाषित और प्रयुक्त करने का पूरा उदाहरण हाई स्कूल [[बीजगणित]] और डोमेन-विशिष्ट भाषा के रूप में थोड़ी सी [[गणना]] का उपयोग करके दिखाया गया है। |
Revision as of 23:10, 3 August 2023
Developer(s) | सिमेंटिक डिज़ाइन |
---|---|
License | संपदा |
Website | www |
डीएमएस सॉफ्टवेयर रीइंजीनियरिंग टूलकिट बड़े पैमाने के सॉफ्टवेयर प्रणाली के लिए स्रोत भाषाओं के मनमाने मिश्रण के लिए कस्टम सोर्स प्रोग्राम विश्लेषण, संशोधन, अनुवाद या सॉफ्टवेयर प्रणाली की पीढ़ी को स्वचालित करने के लिए उपलब्ध कार्यक्रम परिवर्तन टूल का मालिकाना समूह है।[1] डीएमएस मूल रूप से डिज़ाइन मेंटेनेंस प्रणाली नामक सॉफ़्टवेयर के डिज़ाइन को बनाए रखने के सिद्धांत से प्रेरित था।[2] डीएमएस और डिज़ाइन मेंटेनेंस प्रणाली सिमेंटिक डिज़ाइन के पंजीकृत ट्रेडमार्क हैं।
उपयोग
डीएमएस का उपयोग डोमेन-विशिष्ट भाषाओं (जैसे फ़ैक्टरी नियंत्रण के लिए कोड जनरेशन), परीक्षण कवरेज को प्रयुक्त करने के लिए किया गया है[3] और प्रोफ़ाइलिंग उपकरण, डुप्लिकेट कोड,[4] भाषा माइग्रेशन उपकरण, सी++ घटक पुनर्रचना।[5] और सी++ को विश्वसनीय रूप से रीफैक्टर करने जैसे कठिन विषयों पर शोध के लिए।[6]
विशेषताएँ
टूलकिट भाषा व्याकरण को परिभाषित करने के लिए साधन प्रदान करता है और पार्सर का उत्पादन करेगा जो स्वचालित रूप से अमूर्त वाक्यविन्यास पेड़ (एएसटी) का निर्माण करेगा, और मूल या संशोधित एएसटी को वापस संकलित स्रोत पाठ में परिवर्तित करने के लिए सुंदरप्रिंटर का निर्माण करेगा। पार्स ट्री कैप्चर करते हैं, और प्रिटीप्रिंटर्स मूल स्रोत प्रोग्राम के बारे में संपूर्ण विवरण, जिसमें स्रोत स्थिति, टिप्पणियाँ, मूलांक और संख्याओं का प्रारूप आदि सम्मिलित हैं, यह सुनिश्चित करने के लिए कि पुनर्जीवित स्रोत पाठ प्रोग्रामर के लिए मूल पाठ मॉड्यूलो के समान ही पहचानने योग्य है। कोई भी प्रयुक्त परिवर्तन।
डीएमएस सिमेंटिक विधेय के साथ जीएलआर पार्सर पार्सिंग विधि का उपयोग करता है। यह इसे सभी संदर्भ-मुक्त व्याकरणों के साथ-साथ फोरट्रान जैसे अधिकांश गैर-संदर्भ-मुक्त भाषा वाक्यविन्यास को संभालने में सक्षम बनाता है, जिसे पार्स करते समय सही ढंग से नेस्टेड लूप के लिए एएसटी उत्पन्न करने के लिए लेबल द्वारा साझा किए गए CONTINUE स्टेटमेंट के साथ अनेक डीओ लूप के मिलान की आवश्यकता होती है। डीएमएस में विभिन्न प्रकार की पूर्वनिर्धारित भाषाएं हैं, जो सी (प्रोग्रामिंग भाषा) और सी++ की अधिकांश वास्तविक बोलियों को कवर करती हैं, जिनमें सी++0x, सी शार्प (प्रोग्रामिंग भाषा)|सी#, जावा (प्रोग्रामिंग भाषा), पायथन (प्रोग्रामिंग भाषा), पीएचपी सम्मिलित हैं। , ईजीएल (प्रोग्रामिंग भाषा), फोरट्रान, कोबोल, मूल दृश्य , Verilog, वीएचडीएल और कुछ 20 या अधिक अन्य भाषाएँ। डीएमएस ASCII, ISO-8859, यूटीएफ-8, यूटीएफ-16, EBCDIC, Shift-JIS और विभिन्न प्रकार के माइक्रोसॉफ्ट कैरेक्टर एन्कोडिंग को संभाल सकता है।
डीएमएस मेट्रिक्स जैसे एएसटी पर कस्टम विश्लेषण की गणना के लिए विशेषता व्याकरण मूल्यांकनकर्ता प्रदान करता है, और प्रतीक तालिका निर्माण के लिए समर्थन भी सम्मिलित करता है। अन्य प्रोग्राम तथ्यों को अंतर्निहित नियंत्रण- और डेटा-प्रवाह विश्लेषण इंजन, स्थानीय और वैश्विक सूचक विश्लेषण, संपूर्ण-प्रोग्राम कॉल ग्राफ़ निष्कर्षण, और अमूर्त व्याख्या द्वारा प्रतीकात्मक श्रेणी विश्लेषण द्वारा निकाला जा सकता है।
डीएमएस को समानांतर प्रोग्रामिंग भाषा, पार्लन्स में प्रयुक्त किया गया है, जो बड़े विश्लेषण और रूपांतरणों को गति देने के लिए सममित मल्टीप्रोसेसिंग का उपयोग करने की अनुमति देता है।[7]
पुनर्लेखन
एएसटी में परिवर्तन PARLANSE में कोडित दोनों प्रक्रियात्मक तरीकों और डीएमएस के नियम विशिष्टता भाषा (आरएसएल) का उपयोग करके किसी भी निकाले गए प्रोग्राम तथ्यों द्वारा वातानुकूलित सतह-वाक्यविन्यास का उपयोग करके पुनर्लेखन नियमों के रूप में कोडित स्रोत-से-स्रोत वृक्ष परिवर्तनों द्वारा पूरा किया जा सकता है। आरएसएल का समर्थन करने वाला पुनर्लेखन नियम इंजन साहचर्य और क्रमविनिमेय नियमों को संभालता है। सी के लिए समष्टि स्थिति को प्रतिस्थापित करने के लिए पुनर्लेखन नियम ?:
ऑपरेटर को इस प्रकार लिखा जाए:
rule simplify_conditional_assignment(v:left_hand_side,e1:expression,e2:expression,e3:expression)
:statement->statement
= " if (\e1) \v=\e2; else \v=e3; "
-> " \v=\e1?\e2:\e3; "
if no_side_effects(v);
पुनर्लेखन नियमों के नाम हैं, उदा. सशर्त_असाइनमेंट को सरल बनाएं। प्रत्येक नियम में इससे मेल करें और उससे बदलें पैटर्न जोड़ी को -> द्वारा भिन्न किया गया है, हमारे उदाहरण में, पठनीयता के लिए भिन्न-भिन्न लाइनों पर। पैटर्न को भाषा वाक्यविन्यास श्रेणियों के अनुरूप होना चाहिए; इस स्थितियोंमें, दोनों पैटर्न वाक्यविन्यास श्रेणी के होने चाहिए, साथ ही -> द्वारा पैटर्न के साथ सहानुभूति में भिन्न किया जाना चाहिए। लक्ष्य भाषा (उदाहरण के लिए, सी) सतह वाक्यविन्यास को लक्ष्य भाषा से पुनर्लेखन-नियम वाक्यविन्यास को भिन्न करने के लिए मेटा-कोट्स के अंदर कोडित किया जाता है। मेटा-कोट्स के अंदर बैकस्लैश पैटर्न मेटा वेरिएबल्स (उदाहरण के लिए, \v, \e1, \e2) को इंगित करने के लिए डोमेन एस्केप का प्रतिनिधित्व करते हैं, जो हस्ताक्षर पंक्ति में मेटावेरिएबल घोषणा के अनुरूप किसी भी भाषा निर्माण से मेल खाते हैं, उदाहरण के लिए, ई1 वाक्यात्मक श्रेणी का होना चाहिए: (कोई भी) अभिव्यक्ति। यदि मैच पैटर्न में मेटावेरिएबल का अनेक बार उल्लेख किया गया है, तब इसे समान उपवृक्षों से मेल खाना चाहिए; इस उदाहरण में मिलान पैटर्न में दोनों असाइनमेंट में समान समान आकार का v होना चाहिए। रिप्लेस पैटर्न में मेटावेरिएबल्स को बाईं ओर से संबंधित मिलानों द्वारा प्रतिस्थापित किया जाता है। सशर्त खंड यदि अतिरिक्त शर्त प्रदान करता है जिसे नियम प्रयुक्त करने के लिए पूरा किया जाना चाहिए, उदाहरण के लिए, मिलान किए गए मेटावेरिएबल वी, इच्छानुसार बाएं हाथ की ओर होने के कारण, कोई साइड इफेक्ट नहीं होना चाहिए (उदाहरण के लिए, [i++] के रूप में नहीं हो सकता है; कोई दुष्प्रभाव नहीं विधेय को अन्य डीएमएस तंत्र के साथ निर्मित विश्लेषक द्वारा परिभाषित किया गया है)।
कोड पर समष्टि परिवर्तन प्राप्त करना अनेक नियम प्रदान करके पूरा किया जाता है जो वांछित प्रभाव प्राप्त करने में सहयोग करते हैं। नियम-सेट PARLANSE में कोडित मेटाप्रोग्राम द्वारा प्रोग्राम के कुछ हिस्सों पर केंद्रित है।
भाषा की परिभाषा और स्रोत-से-स्रोत परिवर्तन नियमों को परिभाषित और प्रयुक्त करने का पूरा उदाहरण हाई स्कूल बीजगणित और डोमेन-विशिष्ट भाषा के रूप में थोड़ी सी गणना का उपयोग करके दिखाया गया है।
संदर्भ
- ↑ DMS: Program Transformations for Practical Scalable Software Evolution. Proceedings International Conference on Software Engineering 2004 Reprint
- ↑ Design Maintenance Systems. Communications of the ACM 1992Reprint
- ↑ Branch Coverage for Arbitrary Languages Made Easy
- ↑ "Clone Detection Using Abstract Syntax Trees. Proceedings International Conference on Software Maintenance 1998". doi:10.1109/ICSM.1998.738528. S2CID 12834606. Archived from the original on 2012-10-10. Retrieved 2010-11-06.
{{cite journal}}
: Cite journal requires|journal=
(help) - ↑ Akers, Robert L.; Baxter, Ira D.; Mehlich, Michael; Ellis, Brian J.; Luecke, Kenn R. (2007). "Case study: Re-engineering C++ component models via automatic program transformation". Information and Software Technology. 49 (3): 275–291. doi:10.1016/j.infsof.2006.10.012. S2CID 13219993.
- ↑ Small Business Innovation Research (DoE): Refactor++
- ↑ "Semantic Designs: PARLANSE Parallel Programming Language for Windows Pentium/80x86". www.semanticdesigns.com.