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

From Vigyanwiki
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.

बाहरी संबंध