डीएमएस सॉफ्टवेयर रीइंजीनियरिंग टूलकिट: Difference between revisions

From Vigyanwiki
(Created page with "{{Infobox software | name = | title = | logo = | screenshot = | caption = | collapsible...")
 
No edit summary
 
(11 intermediate revisions by 3 users not shown)
Line 7: Line 7:
| collapsible            =  
| collapsible            =  
| author                =  
| author                =  
| developer              = Semantic Designs
| developer              = सिमेंटिक डिज़ाइन
| released              = <!-- {{Start date|YYYY|MM|DD|df=yes/no}} -->
| released              = <!-- {{Start date|YYYY|MM|DD|df=yes/no}} -->
| discontinued          =  
| discontinued          =  
Line 21: Line 21:
| status                =  
| status                =  
| genre                  =  
| genre                  =  
| license                = proprietary
| license                = संपदा
| website                = {{URL|http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html}}
| website                = {{URL|http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html}}
}}
}}


डीएमएस सॉफ्टवेयर रीइंजीनियरिंग टूलकिट बड़े पैमाने के सॉफ्टवेयर सिस्टम के लिए स्रोत भाषाओं के मनमाने मिश्रण के लिए कस्टम सोर्स प्रोग्राम विश्लेषण, संशोधन, अनुवाद या सॉफ्टवेयर सिस्टम की पीढ़ी को स्वचालित करने के लिए उपलब्ध [[ कार्यक्रम परिवर्तन ]] टूल का एक मालिकाना सेट है।<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>[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> इस प्रकार डीएमएस और '''"डिज़ाइन मेंटेनेंस सिस्टम"''' सिमेंटिक डिज़ाइन के पंजीकृत ट्रेडमार्क हैं।


==उपयोग==
=='''उपयोग'''==
डीएमएस का उपयोग [[डोमेन-विशिष्ट भाषा]]ओं (जैसे फ़ैक्टरी नियंत्रण के लिए कोड जनरेशन), परीक्षण कवरेज को लागू करने के लिए किया गया है<ref>[http://www.semanticdesigns.com/Company/Publications/TestCoverage.pdf Branch Coverage for Arbitrary Languages Made Easy]</ref> और प्रोफ़ाइलिंग उपकरण, [[डुप्लिकेट कोड]],<ref>{{Cite journal |url=http://www.computer.org/portal/web/csdl/doi/10.1109/ICSM.1998.738528 |title=''Clone Detection Using Abstract Syntax Trees''. Proceedings International Conference on Software Maintenance 1998 |doi=10.1109/ICSM.1998.738528 |s2cid=12834606 |access-date=2010-11-06 |archive-url=https://web.archive.org/web/20121010231613/http://www.computer.org/portal/web/csdl/doi/10.1109/ICSM.1998.738528 |archive-date=2012-10-10 |url-status=dead }}</ref> भाषा माइग्रेशन उपकरण, C++ घटक पुनर्रचना।<ref>{{cite journal|doi=10.1016/j.infsof.2006.10.012|title=Case study: Re-engineering C++ component models via automatic program transformation|year=2007|last1=Akers|first1=Robert L.|last2=Baxter|first2=Ira D.|last3=Mehlich|first3=Michael|last4=Ellis|first4=Brian J.|last5=Luecke|first5=Kenn R.|journal=Information and Software Technology|volume=49|issue=3|pages=275–291|s2cid=13219993}}</ref> और C++ को विश्वसनीय रूप से रीफैक्टर करने जैसे कठिन विषयों पर शोध के लिए।<ref>[http://www.sbir.gov/sbirsearch/detail/373168 ''Small Business Innovation Research (DoE): Refactor++'']</ref>
डीएमएस का उपयोग [[डोमेन-विशिष्ट भाषा|डोमेन-विशिष्ट लैंग्वेज]]ओं (जैसे फैक्ट्री नियंत्रण के लिए कोड जनरेशन), परीक्षण कवरेज और प्रोफ़ाइलिंग उपकरण, [[डुप्लिकेट कोड|क्लोन डिटेक्शन]],<ref>{{Cite journal |url=http://www.computer.org/portal/web/csdl/doi/10.1109/ICSM.1998.738528 |title=''Clone Detection Using Abstract Syntax Trees''. Proceedings International Conference on Software Maintenance 1998 |doi=10.1109/ICSM.1998.738528 |s2cid=12834606 |access-date=2010-11-06 |archive-url=https://web.archive.org/web/20121010231613/http://www.computer.org/portal/web/csdl/doi/10.1109/ICSM.1998.738528 |archive-date=2012-10-10 |url-status=dead }}</ref> लैंग्वेज माइग्रेशन उपकरण, सी++ घटक रीइंजीनियरिंग<ref>{{cite journal|doi=10.1016/j.infsof.2006.10.012|title=Case study: Re-engineering C++ component models via automatic program transformation|year=2007|last1=Akers|first1=Robert L.|last2=Baxter|first2=Ira D.|last3=Mehlich|first3=Michael|last4=Ellis|first4=Brian J.|last5=Luecke|first5=Kenn R.|journal=Information and Software Technology|volume=49|issue=3|pages=275–291|s2cid=13219993}}</ref> और अनुसंधान के लिए सी++ को विश्वसनीय रूप से रीफैक्टर करने जैसे कठिन विषयों में<ref>[http://www.semanticdesigns.com/Company/Publications/TestCoverage.pdf Branch Coverage for Arbitrary Languages Made Easy]</ref> प्रयुक्त करने के लिए किया गया है।
== '''विशेषताएँ''' ==


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


== विशेषताएँ ==
डीएमएस सिमेंटिक विधेय के साथ [[जीएलआर पार्सर|जीएलआर पार्सिंग]] विधि का उपयोग करता है। यह इसे सभी संदर्भ-मुक्त व्याकरणों के साथ-साथ [[फोरट्रान]] जैसे अधिकांश गैर-संदर्भ-मुक्त लैंग्वेज वाक्यविन्यास को संभालने में सक्षम बनाता है, जिसे पार्स करते समय सही रूप से नेस्टेड लूप के लिए एएसटी उत्पन्न करने के लिए लेबल द्वारा साझा किए गए कंटिन्यू स्टेटमेंट के साथ अनेक डीओ लूप के मिलान की आवश्यकता होती है। इस प्रकार डीएमएस में विभिन्न प्रकार की पूर्वनिर्धारित लैंग्वेजएं होती हैं, जो [[सी (प्रोग्रामिंग भाषा)|सी (प्रोग्रामिंग लैंग्वेज)]] और [[सी++]] की अधिकांश वास्तविक लैंग्वेजेज को कवर करती हैं, जिनमें [[सी++0x|सी++0एक्स]], सी#, [[जावा (प्रोग्रामिंग भाषा)|जावा (प्रोग्रामिंग लैंग्वेज)]], [[पायथन (प्रोग्रामिंग भाषा)|पायथन (प्रोग्रामिंग लैंग्वेज)]], [[पीएचपी]] [[ईजीएल (प्रोग्रामिंग भाषा)|ईजीएल (प्रोग्रामिंग लैंग्वेज)]], फोरट्रान, [[कोबोल|सीओबीओएल]], [[ मूल दृश्य |विजुअल बेसिक]], [[Verilog|वेरिलॉग]], [[वीएचडीएल]] और कुछ 20 या अधिक अन्य लैंग्वेजएँ सम्मिलित होती हैं। इस प्रकार डीएमएस [[ASCII|एएससीआईआई]], [[ISO-8859|आईएसओ-8859]], [[UTF-8|यूटीएफ-8]], [[UTF-16|यूटीएफ-16]], [[EBCDIC|ईबीसीडीआईसी]], [[Shift-JIS|शिफ्ट-जेआईएस]] और विभिन्न प्रकार के माइक्रोसॉफ्ट कैरेक्टर एन्कोडिंग को संभाल सकता है।
 
टूलकिट भाषा व्याकरण को परिभाषित करने के लिए साधन प्रदान करता है और [[पार्सर]] का उत्पादन करेगा जो स्वचालित रूप से अमूर्त वाक्यविन्यास पेड़ (एएसटी) का निर्माण करेगा, और मूल या संशोधित एएसटी को वापस संकलित स्रोत पाठ में परिवर्तित करने के लिए [[सुंदरप्रिंटर]] का निर्माण करेगा। पार्स ट्री कैप्चर करते हैं, और प्रिटीप्रिंटर्स मूल स्रोत प्रोग्राम के बारे में संपूर्ण विवरण, जिसमें स्रोत स्थिति, टिप्पणियाँ, मूलांक और संख्याओं का प्रारूप आदि शामिल हैं, यह सुनिश्चित करने के लिए कि पुनर्जीवित स्रोत पाठ एक प्रोग्रामर के लिए मूल पाठ मॉड्यूलो के समान ही पहचानने योग्य है। कोई भी लागू परिवर्तन।
 
डीएमएस सिमेंटिक विधेय के साथ [[जीएलआर पार्सर]] पार्सिंग तकनीक का उपयोग करता है। यह इसे सभी संदर्भ-मुक्त व्याकरणों के साथ-साथ [[फोरट्रान]] जैसे अधिकांश गैर-संदर्भ-मुक्त भाषा वाक्यविन्यास को संभालने में सक्षम बनाता है, जिसे पार्स करते समय सही ढंग से नेस्टेड लूप के लिए एएसटी उत्पन्न करने के लिए लेबल द्वारा साझा किए गए CONTINUE स्टेटमेंट के साथ कई डीओ लूप के मिलान की आवश्यकता होती है। डीएमएस में विभिन्न प्रकार की पूर्वनिर्धारित भाषाएं हैं, जो [[सी (प्रोग्रामिंग भाषा)]] और [[सी++]] की अधिकांश वास्तविक बोलियों को कवर करती हैं, जिनमें [[सी++0x]], सी शार्प (प्रोग्रामिंग भाषा)|सी#, [[जावा (प्रोग्रामिंग भाषा)]], [[पायथन (प्रोग्रामिंग भाषा)]], [[पीएचपी]] शामिल हैं। , [[ईजीएल (प्रोग्रामिंग भाषा)]], फोरट्रान, [[कोबोल]], [[ मूल दृश्य ]], [[Verilog]], [[वीएचडीएल]] और कुछ 20 या अधिक अन्य भाषाएँ। DMS [[ASCII]], [[ISO-8859]], [[UTF-8]], [[UTF-16]], [[EBCDIC]], [[Shift-JIS]] और विभिन्न प्रकार के Microsoft कैरेक्टर एन्कोडिंग को संभाल सकता है।
 
डीएमएस मेट्रिक्स जैसे एएसटी पर कस्टम विश्लेषण की गणना के लिए [[विशेषता व्याकरण]] मूल्यांकनकर्ता प्रदान करता है, और [[प्रतीक तालिका]] निर्माण के लिए समर्थन भी शामिल करता है। अन्य प्रोग्राम तथ्यों को अंतर्निहित नियंत्रण- और डेटा-[[प्रवाह विश्लेषण]] इंजन, स्थानीय और वैश्विक [[सूचक विश्लेषण]], संपूर्ण-प्रोग्राम [[कॉल ग्राफ़]] निष्कर्षण, और [[अमूर्त व्याख्या]] द्वारा प्रतीकात्मक श्रेणी विश्लेषण द्वारा निकाला जा सकता है।
 
DMS को एक [[समानांतर प्रोग्रामिंग]] भाषा, PARLANSE में लागू किया गया है, जो बड़े विश्लेषण और रूपांतरणों को गति देने के लिए [[सममित मल्टीप्रोसेसिंग]] का उपयोग करने की अनुमति देता है।<ref>{{cite web |title=Semantic Designs: PARLANSE Parallel Programming Language for Windows Pentium/80x86 |url=http://www.semanticdesigns.com/Products/Parlanse/index.html |website=www.semanticdesigns.com}}</ref>


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


डीएमएस को [[समानांतर प्रोग्रामिंग]] लैंग्वेज, पार्लन्स में क्रियान्वित किया गया है, जो बड़े विश्लेषण और रूपांतरणों को गति देने के लिए [[सममित मल्टीप्रोसेसिंग]] का उपयोग करने की अनुमति देता है।<ref>{{cite web |title=Semantic Designs: PARLANSE Parallel Programming Language for Windows Pentium/80x86 |url=http://www.semanticdesigns.com/Products/Parlanse/index.html |website=www.semanticdesigns.com}}</ref>
=== पुनर्लेखन ===
=== पुनर्लेखन ===


एएसटी में परिवर्तन PARLANSE में कोडित दोनों प्रक्रियात्मक तरीकों और डीएमएस के नियम विशिष्टता भाषा (आरएसएल) का उपयोग करके किसी भी निकाले गए प्रोग्राम तथ्यों द्वारा वातानुकूलित सतह-वाक्यविन्यास का उपयोग करके पुनर्लेखन नियमों के रूप में कोडित स्रोत-से-स्रोत वृक्ष परिवर्तनों द्वारा पूरा किया जा सकता है। आरएसएल का समर्थन करने वाला पुनर्लेखन नियम इंजन साहचर्य और क्रमविनिमेय नियमों को संभालता है। C के लिए एक जटिल स्थिति को प्रतिस्थापित करने के लिए एक पुनर्लेखन नियम <code>?:</code> ऑपरेटर को इस प्रकार लिखा जाए:
एएसटी में परिवर्तन पार्लन्स में कोडित दोनों प्रक्रियात्मक तरीकों और डीएमएस के नियम विशिष्टता लैंग्वेज (आरएसएल) का उपयोग करके किसी भी निकाले गए प्रोग्राम तथ्यों द्वारा वातानुकूलित सतह-वाक्यविन्यास का उपयोग करके पुनर्लेखन नियमों के रूप में कोडित सोर्स-से-सोर्स ट्री परिवर्तनों द्वारा पूर्ण किया जा सकता है। इस प्रकार आरएसएल का समर्थन करने वाला पुनर्लेखन नियम इंजन साहचर्य और क्रमविनिमेय नियमों को संभालता है। अतः सी के लिए समष्टि स्थिति को प्रतिस्थापित करने के लिए पुनर्लेखन नियम <code>?:</code> ऑपरेटर को इस प्रकार लिखा जाता है।
<syntaxhighlight lang="text">
<syntaxhighlight lang="text">
   rule simplify_conditional_assignment(v:left_hand_side,e1:expression,e2:expression,e3:expression)
   rule simplify_conditional_assignment(v:left_hand_side,e1:expression,e2:expression,e3:expression)
Line 53: Line 49:
   if no_side_effects(v);
   if no_side_effects(v);
</syntaxhighlight>
</syntaxhighlight>
पुनर्लेखन नियमों के नाम हैं, उदा. सशर्त_असाइनमेंट को सरल बनाएं। प्रत्येक नियम में ''इससे ​​मेल करें'' और ''उससे बदलें'' पैटर्न जोड़ी को -> द्वारा अलग किया गया है, हमारे उदाहरण में, पठनीयता के लिए अलग-अलग लाइनों पर। पैटर्न को भाषा वाक्यविन्यास श्रेणियों के अनुरूप होना चाहिए; इस मामले में, दोनों पैटर्न वाक्यविन्यास श्रेणी के होने चाहिए, साथ ही -> द्वारा पैटर्न के साथ सहानुभूति में अलग किया जाना चाहिए। लक्ष्य भाषा (उदाहरण के लिए, सी) सतह वाक्यविन्यास को लक्ष्य भाषा से पुनर्लेखन-नियम वाक्यविन्यास को अलग करने के लिए मेटा-कोट्स के अंदर कोडित किया जाता है। मेटा-कोट्स के अंदर बैकस्लैश पैटर्न मेटा वेरिएबल्स (उदाहरण के लिए, \v, \e1, \e2) को इंगित करने के लिए डोमेन एस्केप का प्रतिनिधित्व करते हैं, जो हस्ताक्षर पंक्ति में मेटावेरिएबल घोषणा के अनुरूप किसी भी भाषा निर्माण से मेल खाते हैं, उदाहरण के लिए, ई1 वाक्यात्मक श्रेणी का होना चाहिए: ''(कोई भी) अभिव्यक्ति''। यदि ''मैच'' पैटर्न में एक मेटावेरिएबल का कई बार उल्लेख किया गया है, तो इसे समान उपवृक्षों से मेल खाना चाहिए; इस उदाहरण में मिलान पैटर्न में दोनों असाइनमेंट में समान समान आकार का v होना चाहिए। ''रिप्लेस'' पैटर्न में मेटावेरिएबल्स को बाईं ओर से संबंधित मिलानों द्वारा प्रतिस्थापित किया जाता है। एक सशर्त खंड यदि एक अतिरिक्त शर्त प्रदान करता है जिसे नियम लागू करने के लिए पूरा किया जाना चाहिए, उदाहरण के लिए, मिलान किए गए मेटावेरिएबल वी, एक मनमाना बाएं हाथ की ओर होने के कारण, कोई साइड इफेक्ट नहीं होना चाहिए (उदाहरण के लिए, एक [i++] के रूप में नहीं हो सकता है; no_side_effects विधेय को अन्य डीएमएस तंत्र के साथ निर्मित विश्लेषक द्वारा परिभाषित किया गया है)।
पुनर्लेखन '''नियमों''' के नाम होते हैं, उदाहरण के लिए, '''सशर्त_असाइनमेंट को सरल बनाता है'''। इस प्रकार प्रत्येक नियम में "इससे मिलान करते है" और "उससे बदलें" पैटर्न जोड़ी को '''->''' द्वारा भिन्न किया गया है, जिसे हमारे उदाहरण में, पठनीयता के लिए भिन्न-भिन्न पंक्तियों पर '''->''' द्वारा पैटर्न के साथ सहानुभूति में भिन्न किया जाता है। सामान्यतः पैटर्न को लैंग्वेज वाक्यविन्यास श्रेणियों के अनुरूप होता है। इस स्थिति में, दोनों पैटर्न वाक्यविन्यास श्रेणी के होते है, अतः साथ ही '''->''' द्वारा पैटर्न के साथ सहानुभूति में भिन्न किया जाता है। इस प्रकार टारगेट लैंग्वेज (उदाहरण के लिए, सी) सतह सिंटैक्स को मेटा-कोट्स के अंदर कोडित किया जाता है, जिससे कि टारगेट लैंग्वेज से रीराइट-रूल सिंटैक्स को भिन्न करने के लिए पैटर्न मेटा वेरिएबल्स को इंगित करने के लिए, मेटा-कोट्स के अंदर बैकस्लैश डोमेन एस्केप का प्रतिनिधित्व करते हैं (उदाहरण के लिए, \वी, '''\ई1, \ई2''') जो हस्ताक्षर पंक्ति में मेटावेरिएबल घोषणा के अनुरूप किसी भी लैंग्वेज निर्माण से मेल खाता है, उदाहरण के लिए, '''ई1''' वाक्यात्मक श्रेणी का होता है। (कोई भी) अभिव्यक्ति यदि मेटावेरिएबल का मिलान पैटर्न में अनेक बार उल्लेख किया गया होता है, तब इसे मेल खाना चाहिए और समान सबट्रीज के लिए, इस उदाहरण में मिलान पैटर्न में दोनों असाइनमेंट में समान आकार का '''वी''' होता है। रिप्लेस पैटर्न में मेटावेरिएबल्स को बाईं ओर से संबंधित मिलानों द्वारा प्रतिस्थापित किया जाता है। इस प्रकार सशर्त खंड यदि अतिरिक्त शर्त प्रदान करता है जिसे नियम प्रयुक्त करने के लिए पूर्ण किया जाता है, उदाहरण के लिए, मिलान किए गए मेटावेरिएबल वी, इच्छानुसार बाएं हाथ की ओर होने के कारण, कोई साइड इफेक्ट नहीं होता है (उदाहरण के लिए, '''ए[आई++]''' के रूप में नहीं हो सकता है। इस प्रकार '''कोई दुष्प्रभाव नहीं''' विधेय को अन्य डीएमएस तंत्र के साथ निर्मित विश्लेषक द्वारा परिभाषित किया गया है)।


कोड पर एक जटिल परिवर्तन प्राप्त करना कई नियम प्रदान करके पूरा किया जाता है जो वांछित प्रभाव प्राप्त करने में सहयोग करते हैं। नियम-सेट PARLANSE में कोडित मेटाप्रोग्राम द्वारा प्रोग्राम के कुछ हिस्सों पर केंद्रित है।
इस प्रकार कोड पर समष्टि परिवर्तन प्राप्त करना अनेक नियम प्रदान करके पूर्ण किया जाता है जो वांछित प्रभाव प्राप्त करने में सहयोग करते हैं। इस प्रकार नियम-समूह पार्लन्स में कोडित मेटाप्रोग्राम द्वारा प्रोग्राम के कुछ भागों पर केंद्रित करता है।


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


== संदर्भ ==
== '''संदर्भ''' ==
{{Reflist}}
{{Reflist}}
=='''बाहरी संबंध'''==
* [http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html डीएमएस सॉफ्टवेयर रीइंजीनियरिंग टूलकिट मुख्य वेब पेज]


{{DEFAULTSORT:Dms Software Reengineering Toolkit}}


==बाहरी संबंध==
[[Category:CS1 errors]]
* [http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html DMS Software Reengineering Toolkit main web page]
[[Category:Created On 26/07/2023|Dms Software Reengineering Toolkit]]
 
[[Category:Machine Translated Page|Dms Software Reengineering Toolkit]]
{{DEFAULTSORT:Dms Software Reengineering Toolkit}}[[Category: स्थैतिक कार्यक्रम विश्लेषण उपकरण]] [[Category: कार्यक्रम परिवर्तन उपकरण]] [[Category: कंप्यूटर-सहायता प्राप्त सॉफ़्टवेयर इंजीनियरिंग उपकरण]] [[Category: भाषा कार्यक्षेत्र]]  
[[Category:Pages with script errors|Dms Software Reengineering Toolkit]]
 
[[Category:Templates Vigyan Ready|Dms Software Reengineering Toolkit]]
 
[[Category:कंप्यूटर-सहायता प्राप्त सॉफ़्टवेयर इंजीनियरिंग उपकरण|Dms Software Reengineering Toolkit]]
 
[[Category:कार्यक्रम परिवर्तन उपकरण|Dms Software Reengineering Toolkit]]
[[Category: Machine Translated Page]]
[[Category:भाषा कार्यक्षेत्र|Dms Software Reengineering Toolkit]]
[[Category:Created On 26/07/2023]]
[[Category:स्थैतिक कार्यक्रम विश्लेषण उपकरण|Dms Software Reengineering Toolkit]]

Latest revision as of 11:43, 18 August 2023

Developer(s)सिमेंटिक डिज़ाइन
Licenseसंपदा
Websitewww.semanticdesigns.com/Products/DMS/DMSToolkit.html

डीएमएस सॉफ्टवेयर रीइंजीनियरिंग टूलकिट बड़े पैमाने के सॉफ्टवेयर प्रणाली के लिए सोर्स लैंग्वेज़ के इच्छानुसार मिश्रण के लिए कस्टम सोर्स प्रोग्राम विश्लेषण, संशोधन, अनुवाद या सॉफ्टवेयर प्रणाली की पीढ़ी को स्वचालित करने के लिए उपलब्ध प्रोग्राम ट्रांसफॉर्मेशन टूल का मालिकाना समूह होता है।[1] इस प्रकार डीएमएस मूल रूप से डिज़ाइन मेंटेनेंस प्रणाली नामक सॉफ़्टवेयर के डिज़ाइन को बनाए रखने के सिद्धांत से प्रेरित होता था।[2] इस प्रकार डीएमएस और "डिज़ाइन मेंटेनेंस सिस्टम" सिमेंटिक डिज़ाइन के पंजीकृत ट्रेडमार्क हैं।

उपयोग

डीएमएस का उपयोग डोमेन-विशिष्ट लैंग्वेजओं (जैसे फैक्ट्री नियंत्रण के लिए कोड जनरेशन), परीक्षण कवरेज और प्रोफ़ाइलिंग उपकरण, क्लोन डिटेक्शन,[3] लैंग्वेज माइग्रेशन उपकरण, सी++ घटक रीइंजीनियरिंग[4] और अनुसंधान के लिए सी++ को विश्वसनीय रूप से रीफैक्टर करने जैसे कठिन विषयों में[5] प्रयुक्त करने के लिए किया गया है।

विशेषताएँ

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

डीएमएस सिमेंटिक विधेय के साथ जीएलआर पार्सिंग विधि का उपयोग करता है। यह इसे सभी संदर्भ-मुक्त व्याकरणों के साथ-साथ फोरट्रान जैसे अधिकांश गैर-संदर्भ-मुक्त लैंग्वेज वाक्यविन्यास को संभालने में सक्षम बनाता है, जिसे पार्स करते समय सही रूप से नेस्टेड लूप के लिए एएसटी उत्पन्न करने के लिए लेबल द्वारा साझा किए गए कंटिन्यू स्टेटमेंट के साथ अनेक डीओ लूप के मिलान की आवश्यकता होती है। इस प्रकार डीएमएस में विभिन्न प्रकार की पूर्वनिर्धारित लैंग्वेजएं होती हैं, जो सी (प्रोग्रामिंग लैंग्वेज) और सी++ की अधिकांश वास्तविक लैंग्वेजेज को कवर करती हैं, जिनमें सी++0एक्स, सी#, जावा (प्रोग्रामिंग लैंग्वेज), पायथन (प्रोग्रामिंग लैंग्वेज), पीएचपी ईजीएल (प्रोग्रामिंग लैंग्वेज), फोरट्रान, सीओबीओएल, विजुअल बेसिक, वेरिलॉग, वीएचडीएल और कुछ 20 या अधिक अन्य लैंग्वेजएँ सम्मिलित होती हैं। इस प्रकार डीएमएस एएससीआईआई, आईएसओ-8859, यूटीएफ-8, यूटीएफ-16, ईबीसीडीआईसी, शिफ्ट-जेआईएस और विभिन्न प्रकार के माइक्रोसॉफ्ट कैरेक्टर एन्कोडिंग को संभाल सकता है।

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

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

पुनर्लेखन

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

   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);

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

इस प्रकार कोड पर समष्टि परिवर्तन प्राप्त करना अनेक नियम प्रदान करके पूर्ण किया जाता है जो वांछित प्रभाव प्राप्त करने में सहयोग करते हैं। इस प्रकार नियम-समूह पार्लन्स में कोडित मेटाप्रोग्राम द्वारा प्रोग्राम के कुछ भागों पर केंद्रित करता है।

लैंग्वेज की परिलैंग्वेज और सोर्स-से-सोर्स परिवर्तन नियमों को परिभाषित और क्रियान्वित करने का पूर्ण उदाहरण हाई स्कूल बीजगणित और डोमेन-विशिष्ट लैंग्वेज के रूप में थोड़ी सी गणना का उपयोग करके दिखाया गया है।

संदर्भ

  1. DMS: Program Transformations for Practical Scalable Software Evolution. Proceedings International Conference on Software Engineering 2004 Reprint
  2. Design Maintenance Systems. Communications of the ACM 1992Reprint
  3. "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)
  4. 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.
  5. Branch Coverage for Arbitrary Languages Made Easy
  6. "Semantic Designs: PARLANSE Parallel Programming Language for Windows Pentium/80x86". www.semanticdesigns.com.

बाहरी संबंध