डीएमएस सॉफ्टवेयर रीइंजीनियरिंग टूलकिट: Difference between revisions
No edit summary |
No edit summary |
||
Line 26: | Line 26: | ||
'''डीएमएस सॉफ्टवेयर रीइंजीनियरिंग टूलकिट''' बड़े पैमाने के सॉफ्टवेयर प्रणाली के लिए स्रोत भाषाओं के इच्छानुसार मिश्रण के लिए कस्टम सोर्स प्रोग्राम विश्लेषण, संशोधन, अनुवाद या सॉफ्टवेयर प्रणाली की पीढ़ी को स्वचालित करने के लिए उपलब्ध [[ कार्यक्रम परिवर्तन |प्रोग्राम ट्रांसफॉर्मेशन]] टूल का मालिकाना समूह है।<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>{{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>{{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> प्रयुक्त करने के लिए किया गया है। | ||
== विशेषताएँ == | == विशेषताएँ == | ||
टूलकिट भाषा व्याकरण को परिभाषित करने के लिए साधन प्रदान करता है और [[पार्सर]] का उत्पादन करेगा जो स्वचालित रूप से अमूर्त वाक्यविन्यास पेड़ (एएसटी) का निर्माण करेगा, और मूल या संशोधित एएसटी को वापस संकलित स्रोत पाठ में परिवर्तित करने के लिए [[सुंदरप्रिंटर|प्रीटीप्रिंटर]] का निर्माण करेगा। पार्स ट्री कैप्चर करते हैं | टूलकिट भाषा व्याकरण को परिभाषित करने के लिए साधन प्रदान करता है और [[पार्सर]] का उत्पादन करेगा जो स्वचालित रूप से अमूर्त वाक्यविन्यास पेड़ (एएसटी) का निर्माण करेगा, और मूल या संशोधित एएसटी को वापस संकलित स्रोत पाठ में परिवर्तित करने के लिए [[सुंदरप्रिंटर|प्रीटीप्रिंटर]] का निर्माण करेगा। इस प्रकार पार्स ट्री कैप्चर करते हैं और प्रिटीप्रिंटर्स मूल स्रोत प्रोग्राम के बारे में संपूर्ण विवरण, जिसमें स्रोत स्थिति, टिप्पणियाँ, मूलांक और संख्याओं का प्रारूप आदि सम्मिलित हैं, यह सुनिश्चित करने के लिए कि कोई भी प्रयुक्त परिवर्तन पुनर्जीवित स्रोत पाठ प्रोग्रामर के लिए मूल पाठ मॉड्यूलो के समान ही पहचानने योग्य है। | ||
डीएमएस सिमेंटिक विधेय के साथ [[जीएलआर पार्सर|जीएलआर पार्सिंग]] विधि का उपयोग करता है। यह इसे सभी संदर्भ-मुक्त व्याकरणों के साथ-साथ [[फोरट्रान]] जैसे अधिकांश गैर-संदर्भ-मुक्त भाषा वाक्यविन्यास को संभालने में सक्षम बनाता है, जिसे पार्स करते समय सही ढंग से नेस्टेड लूप के लिए एएसटी उत्पन्न करने के लिए लेबल द्वारा साझा किए गए CONTINUE स्टेटमेंट के साथ अनेक डीओ लूप के मिलान की आवश्यकता होती है। डीएमएस में विभिन्न प्रकार की पूर्वनिर्धारित भाषाएं हैं, जो [[सी (प्रोग्रामिंग भाषा)]] और [[सी++]] की अधिकांश वास्तविक बोलियों को कवर करती हैं, जिनमें [[सी++0x|सी++0एक्स]], सी#, [[जावा (प्रोग्रामिंग भाषा)]], [[पायथन (प्रोग्रामिंग भाषा)]], [[पीएचपी]] [[ईजीएल (प्रोग्रामिंग भाषा)]], फोरट्रान, [[कोबोल]], [[ मूल दृश्य |मूल दृश्य]] , [[Verilog]], [[वीएचडीएल]] और कुछ 20 या अधिक अन्य भाषाएँ सम्मिलित हैं। | डीएमएस सिमेंटिक विधेय के साथ [[जीएलआर पार्सर|जीएलआर पार्सिंग]] विधि का उपयोग करता है। यह इसे सभी संदर्भ-मुक्त व्याकरणों के साथ-साथ [[फोरट्रान]] जैसे अधिकांश गैर-संदर्भ-मुक्त भाषा वाक्यविन्यास को संभालने में सक्षम बनाता है, जिसे पार्स करते समय सही ढंग से नेस्टेड लूप के लिए एएसटी उत्पन्न करने के लिए लेबल द्वारा साझा किए गए CONTINUE स्टेटमेंट के साथ अनेक डीओ लूप के मिलान की आवश्यकता होती है। डीएमएस में विभिन्न प्रकार की पूर्वनिर्धारित भाषाएं हैं, जो [[सी (प्रोग्रामिंग भाषा)]] और [[सी++]] की अधिकांश वास्तविक बोलियों को कवर करती हैं, जिनमें [[सी++0x|सी++0एक्स]], सी#, [[जावा (प्रोग्रामिंग भाषा)]], [[पायथन (प्रोग्रामिंग भाषा)]], [[पीएचपी]] [[ईजीएल (प्रोग्रामिंग भाषा)]], फोरट्रान, [[कोबोल]], [[ मूल दृश्य |मूल दृश्य]] , [[Verilog]], [[वीएचडीएल]] और कुछ 20 या अधिक अन्य भाषाएँ सम्मिलित हैं। इस प्रकार डीएमएस [[ASCII]], [[ISO-8859]], [[UTF-8|यूटीएफ-8]], [[UTF-16|यूटीएफ-16]], [[EBCDIC]], [[Shift-JIS]] और विभिन्न प्रकार के माइक्रोसॉफ्ट कैरेक्टर एन्कोडिंग को संभाल सकता है। | ||
डीएमएस मेट्रिक्स जैसे एएसटी पर कस्टम विश्लेषण की गणना के लिए [[विशेषता व्याकरण|विशेषता]] की गणना के लिए विशेषता व्याकरण मूल्यांकनकर्ता प्रदान करता है, और [[प्रतीक तालिका]] निर्माण के लिए समर्थन भी सम्मिलित करता है। अन्य प्रोग्राम तथ्यों को अंतर्निहित नियंत्रण- और डेटा-[[प्रवाह विश्लेषण]] इंजन, स्थानीय और वैश्विक [[सूचक विश्लेषण|सूचक विश्लेषण,]] संपूर्ण-प्रोग्राम कॉल ग्राफ़ निष्कर्षण, और [[अमूर्त व्याख्या]] | डीएमएस मेट्रिक्स जैसे एएसटी पर कस्टम विश्लेषण की गणना के लिए [[विशेषता व्याकरण|विशेषता]] की गणना के लिए विशेषता व्याकरण मूल्यांकनकर्ता प्रदान करता है, और [[प्रतीक तालिका]] निर्माण के लिए समर्थन भी सम्मिलित करता है। अन्य प्रोग्राम तथ्यों को अंतर्निहित नियंत्रण- और डेटा-[[प्रवाह विश्लेषण]] इंजन, स्थानीय और वैश्विक [[सूचक विश्लेषण|सूचक विश्लेषण,]] संपूर्ण-प्रोग्राम कॉल ग्राफ़ निष्कर्षण, और [[अमूर्त व्याख्या]] द्वारा प्रतीकात्मक श्रेणी विश्लेषण द्वारा निकाला जा सकता है। | ||
डीएमएस को [[समानांतर प्रोग्रामिंग]] भाषा, पार्लन्स में प्रयुक्त किया गया है, जो बड़े विश्लेषण और रूपांतरणों को गति देने के लिए [[सममित मल्टीप्रोसेसिंग]] का उपयोग करने की अनुमति देता है।<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 में कोडित दोनों प्रक्रियात्मक तरीकों और डीएमएस के नियम विशिष्टता भाषा (आरएसएल) का उपयोग करके किसी भी निकाले गए प्रोग्राम तथ्यों द्वारा वातानुकूलित सतह-वाक्यविन्यास का उपयोग करके पुनर्लेखन नियमों के रूप में कोडित स्रोत-से-स्रोत वृक्ष परिवर्तनों द्वारा पूरा किया जा सकता है। आरएसएल का समर्थन करने वाला पुनर्लेखन नियम इंजन साहचर्य और क्रमविनिमेय नियमों को संभालता है। सी के लिए समष्टि स्थिति को प्रतिस्थापित करने के लिए पुनर्लेखन नियम <code>?:</code> ऑपरेटर को इस प्रकार लिखा जाए: | एएसटी में परिवर्तन PARLANSE में कोडित दोनों प्रक्रियात्मक तरीकों और डीएमएस के नियम विशिष्टता भाषा (आरएसएल) का उपयोग करके किसी भी निकाले गए प्रोग्राम तथ्यों द्वारा वातानुकूलित सतह-वाक्यविन्यास का उपयोग करके पुनर्लेखन नियमों के रूप में कोडित स्रोत-से-स्रोत वृक्ष परिवर्तनों द्वारा पूरा किया जा सकता है। इस प्रकार आरएसएल का समर्थन करने वाला पुनर्लेखन नियम इंजन साहचर्य और क्रमविनिमेय नियमों को संभालता है। सी के लिए समष्टि स्थिति को प्रतिस्थापित करने के लिए पुनर्लेखन नियम <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 49: | Line 49: | ||
if no_side_effects(v); | if no_side_effects(v); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
पुनर्लेखन '''नियमों''' के नाम हैं, उदा. '''सशर्त_असाइनमेंट को सरल बनाएं'''। प्रत्येक नियम में "इससे मिलान करें" और "उससे बदलें" पैटर्न जोड़ी को '''->''' द्वारा भिन्न किया गया है, जिसे हमारे उदाहरण में, पठनीयता के लिए भिन्न-भिन्न पंक्तियों पर '''->''' द्वारा पैटर्न के साथ सहानुभूति में भिन्न किया जाना चाहिए। पैटर्न को भाषा वाक्यविन्यास श्रेणियों के अनुरूप होना चाहिए; इस स्थिति में, दोनों पैटर्न वाक्यविन्यास श्रेणी के होने चाहिए, साथ ही '''->''' द्वारा पैटर्न के साथ सहानुभूति में भिन्न किया जाना चाहिए। लक्ष्य भाषा (उदाहरण के लिए, सी) सतह सिंटैक्स को मेटा-कोट्स के अंदर कोडित किया जाता है,लक्ष्य भाषा से रीराइट-रूल सिंटैक्स को भिन्न करने के लिए पैटर्न मेटा वेरिएबल्स को इंगित करने के लिए, मेटा-कोट्स के अंदर बैकस्लैश डोमेन एस्केप का प्रतिनिधित्व करते हैं (उदाहरण के लिए, \v, '''\e1, \e2''') जो हस्ताक्षर पंक्ति में मेटावेरिएबल घोषणा के अनुरूप किसी भी भाषा निर्माण से मेल खाता है, उदाहरण के लिए, '''ई1''' वाक्यात्मक श्रेणी का होना चाहिए: ''(कोई भी)'' अभिव्यक्ति। यदि मेटावेरिएबल का मिलान पैटर्न में कई बार उल्लेख किया गया है, तो इसे मेल खाना चाहिए समान उपवृक्षों के लिए; इस उदाहरण में मिलान पैटर्न में दोनों असाइनमेंट में समान समान आकार का '''v''' होना चाहिए। ''रिप्लेस'' पैटर्न में मेटावेरिएबल्स को बाईं ओर से संबंधित मिलानों द्वारा प्रतिस्थापित किया जाता है। सशर्त खंड यदि अतिरिक्त शर्त प्रदान करता है जिसे नियम प्रयुक्त करने के लिए पूरा किया जाना चाहिए, उदाहरण के लिए, मिलान किए गए मेटावेरिएबल वी, इच्छानुसार बाएं हाथ की ओर होने के कारण, कोई साइड इफेक्ट नहीं होना चाहिए (उदाहरण के लिए, '''a[i++]''' के रूप में नहीं हो सकता है; '''कोई दुष्प्रभाव नहीं''' विधेय को अन्य डीएमएस तंत्र के साथ निर्मित विश्लेषक द्वारा परिभाषित किया गया है)। | पुनर्लेखन '''नियमों''' के नाम हैं, उदा. '''सशर्त_असाइनमेंट को सरल बनाएं'''। प्रत्येक नियम में "इससे मिलान करें" और "उससे बदलें" पैटर्न जोड़ी को '''->''' द्वारा भिन्न किया गया है, जिसे हमारे उदाहरण में, पठनीयता के लिए भिन्न-भिन्न पंक्तियों पर '''->''' द्वारा पैटर्न के साथ सहानुभूति में भिन्न किया जाना चाहिए। पैटर्न को भाषा वाक्यविन्यास श्रेणियों के अनुरूप होना चाहिए; इस स्थिति में, दोनों पैटर्न वाक्यविन्यास श्रेणी के होने चाहिए, साथ ही '''->''' द्वारा पैटर्न के साथ सहानुभूति में भिन्न किया जाना चाहिए। इस प्रकार लक्ष्य भाषा (उदाहरण के लिए, सी) सतह सिंटैक्स को मेटा-कोट्स के अंदर कोडित किया जाता है,लक्ष्य भाषा से रीराइट-रूल सिंटैक्स को भिन्न करने के लिए पैटर्न मेटा वेरिएबल्स को इंगित करने के लिए, मेटा-कोट्स के अंदर बैकस्लैश डोमेन एस्केप का प्रतिनिधित्व करते हैं (उदाहरण के लिए, \v, '''\e1, \e2''') जो हस्ताक्षर पंक्ति में मेटावेरिएबल घोषणा के अनुरूप किसी भी भाषा निर्माण से मेल खाता है, उदाहरण के लिए, '''ई1''' वाक्यात्मक श्रेणी का होना चाहिए: ''(कोई भी)'' अभिव्यक्ति। यदि मेटावेरिएबल का मिलान पैटर्न में कई बार उल्लेख किया गया है, तो इसे मेल खाना चाहिए समान उपवृक्षों के लिए; इस उदाहरण में मिलान पैटर्न में दोनों असाइनमेंट में समान समान आकार का '''v''' होना चाहिए। ''रिप्लेस'' पैटर्न में मेटावेरिएबल्स को बाईं ओर से संबंधित मिलानों द्वारा प्रतिस्थापित किया जाता है। इस प्रकार सशर्त खंड यदि अतिरिक्त शर्त प्रदान करता है जिसे नियम प्रयुक्त करने के लिए पूरा किया जाना चाहिए, उदाहरण के लिए, मिलान किए गए मेटावेरिएबल वी, इच्छानुसार बाएं हाथ की ओर होने के कारण, कोई साइड इफेक्ट नहीं होना चाहिए (उदाहरण के लिए, '''a[i++]''' के रूप में नहीं हो सकता है; '''कोई दुष्प्रभाव नहीं''' विधेय को अन्य डीएमएस तंत्र के साथ निर्मित विश्लेषक द्वारा परिभाषित किया गया है)। | ||
कोड पर समष्टि परिवर्तन प्राप्त करना अनेक नियम प्रदान करके पूरा किया जाता है जो वांछित प्रभाव प्राप्त करने में सहयोग करते हैं। नियम-सेट PARLANSE में कोडित मेटाप्रोग्राम द्वारा प्रोग्राम के कुछ भागों पर केंद्रित है। | इस प्रकार कोड पर समष्टि परिवर्तन प्राप्त करना अनेक नियम प्रदान करके पूरा किया जाता है जो वांछित प्रभाव प्राप्त करने में सहयोग करते हैं। नियम-सेट PARLANSE में कोडित मेटाप्रोग्राम द्वारा प्रोग्राम के कुछ भागों पर केंद्रित है। | ||
भाषा की परिभाषा और स्रोत-से-स्रोत परिवर्तन नियमों को परिभाषित और प्रयुक्त करने का पूरा उदाहरण हाई स्कूल [[बीजगणित]] और डोमेन-विशिष्ट भाषा के रूप में थोड़ी सी [[गणना]] का उपयोग करके दिखाया गया है। | भाषा की परिभाषा और स्रोत-से-स्रोत परिवर्तन नियमों को परिभाषित और प्रयुक्त करने का पूरा उदाहरण हाई स्कूल [[बीजगणित]] और डोमेन-विशिष्ट भाषा के रूप में थोड़ी सी [[गणना]] का उपयोग करके दिखाया गया है। |
Revision as of 11:24, 4 August 2023
Developer(s) | सिमेंटिक डिज़ाइन |
---|---|
License | संपदा |
Website | www |
डीएमएस सॉफ्टवेयर रीइंजीनियरिंग टूलकिट बड़े पैमाने के सॉफ्टवेयर प्रणाली के लिए स्रोत भाषाओं के इच्छानुसार मिश्रण के लिए कस्टम सोर्स प्रोग्राम विश्लेषण, संशोधन, अनुवाद या सॉफ्टवेयर प्रणाली की पीढ़ी को स्वचालित करने के लिए उपलब्ध प्रोग्राम ट्रांसफॉर्मेशन टूल का मालिकाना समूह है।[1] डीएमएस मूल रूप से डिज़ाइन मेंटेनेंस प्रणाली नामक सॉफ़्टवेयर के डिज़ाइन को बनाए रखने के सिद्धांत से प्रेरित था।[2] इस प्रकार डीएमएस और "डिज़ाइन मेंटेनेंस सिस्टम" सिमेंटिक डिज़ाइन के पंजीकृत ट्रेडमार्क हैं।
उपयोग
डीएमएस का उपयोग डोमेन-विशिष्ट भाषाओं (जैसे फैक्ट्री नियंत्रण के लिए कोड जनरेशन), परीक्षण कवरेज और प्रोफ़ाइलिंग उपकरण, क्लोन डिटेक्शन,[3] भाषा माइग्रेशन उपकरण, सी++ घटक रीइंजीनियरिंग[4] और अनुसंधान के लिए सी++ को विश्वसनीय रूप से रीफैक्टर करने जैसे कठिन विषयों में[5] प्रयुक्त करने के लिए किया गया है।
विशेषताएँ
टूलकिट भाषा व्याकरण को परिभाषित करने के लिए साधन प्रदान करता है और पार्सर का उत्पादन करेगा जो स्वचालित रूप से अमूर्त वाक्यविन्यास पेड़ (एएसटी) का निर्माण करेगा, और मूल या संशोधित एएसटी को वापस संकलित स्रोत पाठ में परिवर्तित करने के लिए प्रीटीप्रिंटर का निर्माण करेगा। इस प्रकार पार्स ट्री कैप्चर करते हैं और प्रिटीप्रिंटर्स मूल स्रोत प्रोग्राम के बारे में संपूर्ण विवरण, जिसमें स्रोत स्थिति, टिप्पणियाँ, मूलांक और संख्याओं का प्रारूप आदि सम्मिलित हैं, यह सुनिश्चित करने के लिए कि कोई भी प्रयुक्त परिवर्तन पुनर्जीवित स्रोत पाठ प्रोग्रामर के लिए मूल पाठ मॉड्यूलो के समान ही पहचानने योग्य है।
डीएमएस सिमेंटिक विधेय के साथ जीएलआर पार्सिंग विधि का उपयोग करता है। यह इसे सभी संदर्भ-मुक्त व्याकरणों के साथ-साथ फोरट्रान जैसे अधिकांश गैर-संदर्भ-मुक्त भाषा वाक्यविन्यास को संभालने में सक्षम बनाता है, जिसे पार्स करते समय सही ढंग से नेस्टेड लूप के लिए एएसटी उत्पन्न करने के लिए लेबल द्वारा साझा किए गए CONTINUE स्टेटमेंट के साथ अनेक डीओ लूप के मिलान की आवश्यकता होती है। डीएमएस में विभिन्न प्रकार की पूर्वनिर्धारित भाषाएं हैं, जो सी (प्रोग्रामिंग भाषा) और सी++ की अधिकांश वास्तविक बोलियों को कवर करती हैं, जिनमें सी++0एक्स, सी#, जावा (प्रोग्रामिंग भाषा), पायथन (प्रोग्रामिंग भाषा), पीएचपी ईजीएल (प्रोग्रामिंग भाषा), फोरट्रान, कोबोल, मूल दृश्य , Verilog, वीएचडीएल और कुछ 20 या अधिक अन्य भाषाएँ सम्मिलित हैं। इस प्रकार डीएमएस ASCII, ISO-8859, यूटीएफ-8, यूटीएफ-16, EBCDIC, Shift-JIS और विभिन्न प्रकार के माइक्रोसॉफ्ट कैरेक्टर एन्कोडिंग को संभाल सकता है।
डीएमएस मेट्रिक्स जैसे एएसटी पर कस्टम विश्लेषण की गणना के लिए विशेषता की गणना के लिए विशेषता व्याकरण मूल्यांकनकर्ता प्रदान करता है, और प्रतीक तालिका निर्माण के लिए समर्थन भी सम्मिलित करता है। अन्य प्रोग्राम तथ्यों को अंतर्निहित नियंत्रण- और डेटा-प्रवाह विश्लेषण इंजन, स्थानीय और वैश्विक सूचक विश्लेषण, संपूर्ण-प्रोग्राम कॉल ग्राफ़ निष्कर्षण, और अमूर्त व्याख्या द्वारा प्रतीकात्मक श्रेणी विश्लेषण द्वारा निकाला जा सकता है।
डीएमएस को समानांतर प्रोग्रामिंग भाषा, पार्लन्स में प्रयुक्त किया गया है, जो बड़े विश्लेषण और रूपांतरणों को गति देने के लिए सममित मल्टीप्रोसेसिंग का उपयोग करने की अनुमति देता है।[6]
पुनर्लेखन
एएसटी में परिवर्तन 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 होना चाहिए। रिप्लेस पैटर्न में मेटावेरिएबल्स को बाईं ओर से संबंधित मिलानों द्वारा प्रतिस्थापित किया जाता है। इस प्रकार सशर्त खंड यदि अतिरिक्त शर्त प्रदान करता है जिसे नियम प्रयुक्त करने के लिए पूरा किया जाना चाहिए, उदाहरण के लिए, मिलान किए गए मेटावेरिएबल वी, इच्छानुसार बाएं हाथ की ओर होने के कारण, कोई साइड इफेक्ट नहीं होना चाहिए (उदाहरण के लिए, a[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
- ↑ "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.
- ↑ Branch Coverage for Arbitrary Languages Made Easy
- ↑ "Semantic Designs: PARLANSE Parallel Programming Language for Windows Pentium/80x86". www.semanticdesigns.com.