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

From Vigyanwiki
No edit summary
No edit summary
Line 29: Line 29:


==उपयोग==
==उपयोग==
डीएमएस का उपयोग [[डोमेन-विशिष्ट भाषा]]ओं (जैसे फ़ैक्टरी नियंत्रण के लिए कोड जनरेशन), परीक्षण कवरेज को लागू करने के लिए किया गया है<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>[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>
== विशेषताएँ ==
== विशेषताएँ ==


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


डीएमएस सिमेंटिक विधेय के साथ [[जीएलआर पार्सर]] पार्सिंग तकनीक का उपयोग करता है। यह इसे सभी संदर्भ-मुक्त व्याकरणों के साथ-साथ [[फोरट्रान]] जैसे अधिकांश गैर-संदर्भ-मुक्त भाषा वाक्यविन्यास को संभालने में सक्षम बनाता है, जिसे पार्स करते समय सही ढंग से नेस्टेड लूप के लिए एएसटी उत्पन्न करने के लिए लेबल द्वारा साझा किए गए CONTINUE स्टेटमेंट के साथ कई डीओ लूप के मिलान की आवश्यकता होती है। डीएमएस में विभिन्न प्रकार की पूर्वनिर्धारित भाषाएं हैं, जो [[सी (प्रोग्रामिंग भाषा)]] और [[सी++]] की अधिकांश वास्तविक बोलियों को कवर करती हैं, जिनमें [[सी++0x]], सी शार्प (प्रोग्रामिंग भाषा)|सी#, [[जावा (प्रोग्रामिंग भाषा)]], [[पायथन (प्रोग्रामिंग भाषा)]], [[पीएचपी]] शामिल हैं। , [[ईजीएल (प्रोग्रामिंग भाषा)]], फोरट्रान, [[कोबोल]], [[ मूल दृश्य |मूल दृश्य]] , [[Verilog]], [[वीएचडीएल]] और कुछ 20 या अधिक अन्य भाषाएँ। DMS [[ASCII]], [[ISO-8859]], [[UTF-8]], [[UTF-16]], [[EBCDIC]], [[Shift-JIS]] और विभिन्न प्रकार के Microsoft कैरेक्टर एन्कोडिंग को संभाल सकता है।
डीएमएस सिमेंटिक विधेय के साथ [[जीएलआर पार्सर]] पार्सिंग विधि  का उपयोग करता है। यह इसे सभी संदर्भ-मुक्त व्याकरणों के साथ-साथ [[फोरट्रान]] जैसे अधिकांश गैर-संदर्भ-मुक्त भाषा वाक्यविन्यास को संभालने में सक्षम बनाता है, जिसे पार्स करते समय सही ढंग से नेस्टेड लूप के लिए एएसटी उत्पन्न करने के लिए लेबल द्वारा साझा किए गए 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>
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>
=== पुनर्लेखन ===
=== पुनर्लेखन ===


एएसटी में परिवर्तन PARLANSE में कोडित दोनों प्रक्रियात्मक तरीकों और डीएमएस के नियम विशिष्टता भाषा (आरएसएल) का उपयोग करके किसी भी निकाले गए प्रोग्राम तथ्यों द्वारा वातानुकूलित सतह-वाक्यविन्यास का उपयोग करके पुनर्लेखन नियमों के रूप में कोडित स्रोत-से-स्रोत वृक्ष परिवर्तनों द्वारा पूरा किया जा सकता है। आरएसएल का समर्थन करने वाला पुनर्लेखन नियम इंजन साहचर्य और क्रमविनिमेय नियमों को संभालता है। C के लिए जटिल स्थिति को प्रतिस्थापित करने के लिए पुनर्लेखन नियम <code>?:</code> ऑपरेटर को इस प्रकार लिखा जाए:
एएसटी में परिवर्तन PARLANSE में कोडित दोनों प्रक्रियात्मक तरीकों और डीएमएस के नियम विशिष्टता भाषा (आरएसएल) का उपयोग करके किसी भी निकाले गए प्रोग्राम तथ्यों द्वारा वातानुकूलित सतह-वाक्यविन्यास का उपयोग करके पुनर्लेखन नियमों के रूप में कोडित स्रोत-से-स्रोत वृक्ष परिवर्तनों द्वारा पूरा किया जा सकता है। आरएसएल का समर्थन करने वाला पुनर्लेखन नियम इंजन साहचर्य और क्रमविनिमेय नियमों को संभालता है। C के लिए समष्टि स्थिति को प्रतिस्थापित करने के लिए पुनर्लेखन नियम <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 होना चाहिए। ''रिप्लेस'' पैटर्न में मेटावेरिएबल्स को बाईं ओर से संबंधित मिलानों द्वारा प्रतिस्थापित किया जाता है। सशर्त खंड यदि अतिरिक्त शर्त प्रदान करता है जिसे नियम लागू करने के लिए पूरा किया जाना चाहिए, उदाहरण के लिए, मिलान किए गए मेटावेरिएबल वी, मनमाना बाएं हाथ की ओर होने के कारण, कोई साइड इफेक्ट नहीं होना चाहिए (उदाहरण के लिए, [i++] के रूप में नहीं हो सकता है; no_side_effects विधेय को अन्य डीएमएस तंत्र के साथ निर्मित विश्लेषक द्वारा परिभाषित किया गया है)।
पुनर्लेखन नियमों के नाम हैं, उदा. सशर्त_असाइनमेंट को सरल बनाएं। प्रत्येक नियम में ''इससे ​​मेल करें'' और ''उससे बदलें'' पैटर्न जोड़ी को -> द्वारा अलग किया गया है, हमारे उदाहरण में, पठनीयता के लिए अलग-अलग लाइनों पर। पैटर्न को भाषा वाक्यविन्यास श्रेणियों के अनुरूप होना चाहिए; इस स्थितियोंमें, दोनों पैटर्न वाक्यविन्यास श्रेणी के होने चाहिए, साथ ही -> द्वारा पैटर्न के साथ सहानुभूति में अलग किया जाना चाहिए। लक्ष्य भाषा (उदाहरण के लिए, सी) सतह वाक्यविन्यास को लक्ष्य भाषा से पुनर्लेखन-नियम वाक्यविन्यास को अलग करने के लिए मेटा-कोट्स के अंदर कोडित किया जाता है। मेटा-कोट्स के अंदर बैकस्लैश पैटर्न मेटा वेरिएबल्स (उदाहरण के लिए, \v, \e1, \e2) को इंगित करने के लिए डोमेन एस्केप का प्रतिनिधित्व करते हैं, जो हस्ताक्षर पंक्ति में मेटावेरिएबल घोषणा के अनुरूप किसी भी भाषा निर्माण से मेल खाते हैं, उदाहरण के लिए, ई1 वाक्यात्मक श्रेणी का होना चाहिए: ''(कोई भी) अभिव्यक्ति''। यदि ''मैच'' पैटर्न में मेटावेरिएबल का कई बार उल्लेख किया गया है, तो इसे समान उपवृक्षों से मेल खाना चाहिए; इस उदाहरण में मिलान पैटर्न में दोनों असाइनमेंट में समान समान आकार का v होना चाहिए। ''रिप्लेस'' पैटर्न में मेटावेरिएबल्स को बाईं ओर से संबंधित मिलानों द्वारा प्रतिस्थापित किया जाता है। सशर्त खंड यदि अतिरिक्त शर्त प्रदान करता है जिसे नियम प्रयुक्त करने के लिए पूरा किया जाना चाहिए, उदाहरण के लिए, मिलान किए गए मेटावेरिएबल वी, इच्छानुसार बाएं हाथ की ओर होने के कारण, कोई साइड इफेक्ट नहीं होना चाहिए (उदाहरण के लिए, [i++] के रूप में नहीं हो सकता है; no_side_effects विधेय को अन्य डीएमएस तंत्र के साथ निर्मित विश्लेषक द्वारा परिभाषित किया गया है)।


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


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


== संदर्भ ==
== संदर्भ ==

Revision as of 17:59, 3 August 2023

Developer(s)Semantic Designs
Licenseproprietary
Websitewww.semanticdesigns.com/Products/DMS/DMSToolkit.html

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

उपयोग

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

विशेषताएँ

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

डीएमएस सिमेंटिक विधेय के साथ जीएलआर पार्सर पार्सिंग विधि का उपयोग करता है। यह इसे सभी संदर्भ-मुक्त व्याकरणों के साथ-साथ फोरट्रान जैसे अधिकांश गैर-संदर्भ-मुक्त भाषा वाक्यविन्यास को संभालने में सक्षम बनाता है, जिसे पार्स करते समय सही ढंग से नेस्टेड लूप के लिए एएसटी उत्पन्न करने के लिए लेबल द्वारा साझा किए गए CONTINUE स्टेटमेंट के साथ कई डीओ लूप के मिलान की आवश्यकता होती है। डीएमएस में विभिन्न प्रकार की पूर्वनिर्धारित भाषाएं हैं, जो सी (प्रोग्रामिंग भाषा) और सी++ की अधिकांश वास्तविक बोलियों को कवर करती हैं, जिनमें सी++0x, सी शार्प (प्रोग्रामिंग भाषा)|सी#, जावा (प्रोग्रामिंग भाषा), पायथन (प्रोग्रामिंग भाषा), पीएचपी सम्मिलित हैं। , ईजीएल (प्रोग्रामिंग भाषा), फोरट्रान, कोबोल, मूल दृश्य , Verilog, वीएचडीएल और कुछ 20 या अधिक अन्य भाषाएँ। DMS ASCII, ISO-8859, UTF-8, UTF-16, EBCDIC, Shift-JIS और विभिन्न प्रकार के Microsoft कैरेक्टर एन्कोडिंग को संभाल सकता है।

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

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

पुनर्लेखन

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

   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++] के रूप में नहीं हो सकता है; no_side_effects विधेय को अन्य डीएमएस तंत्र के साथ निर्मित विश्लेषक द्वारा परिभाषित किया गया है)।

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

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

संदर्भ

  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. Branch Coverage for Arbitrary Languages Made Easy
  4. "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)
  5. 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.
  6. Small Business Innovation Research (DoE): Refactor++
  7. "Semantic Designs: PARLANSE Parallel Programming Language for Windows Pentium/80x86". www.semanticdesigns.com.

बाहरी संबंध