डेटा प्रवाह विश्लेषण: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{Short description|Method of analyzing variables in software}}
{{Short description|Method of analyzing variables in software}}
आंकड़ा-प्रवाह विश्लेषण(डेटा-फ्लो एनालिसिस) '''एक''' [[कंप्यूटर प्रोग्राम|कंप्यूटर कार्यक्रम]] में विभिन्न बिंदुओं पर गणना किए गए मानों के संभावित समुच्चय '''डेटा''' के विषय में जानकारी एकत्र करने की '''एक''' विधि है। '''एक''' कार्यक्रम(प्रोग्राम) के [[नियंत्रण-प्रवाह ग्राफ]] (CFG) का उपयोग कार्यक्रम के उन भागों को निर्धारित करने के लिए किया जाता है, जिनके लिए '''एक''' चर को निर्दिष्ट '''एक''' विशेष मान प्रचारित हो सकता है। एकत्र की गई जानकारी का उपयोग प्रायः [[संकलक]] द्वारा कार्यक्रम को अनुकूलित करते समय किया जाता है। आंकड़ा-प्रवाह विश्लेषण का '''एक''' प्रामाणिक उदाहरण परिभाषाओं तक पहुँच रहा है।
आंकड़ा-प्रवाह विश्लेषण(डेटा-फ्लो एनालिसिस) [[कंप्यूटर प्रोग्राम|कंप्यूटर कार्यक्रम]] में विभिन्न बिंदुओं पर गणना किए गए मानों के संभावित समुच्चय के विषय में जानकारी एकत्र करने की विधि है। कार्यक्रम(प्रोग्राम) के [[नियंत्रण-प्रवाह ग्राफ]] (CFG) का उपयोग कार्यक्रम के उन भागों को निर्धारित करने के लिए किया जाता है, जिनके लिए चर को निर्दिष्ट विशेष मान प्रचारित हो सकता है। एकत्र की गई जानकारी का उपयोग प्रायः [[संकलक]] द्वारा कार्यक्रम को अनुकूलित करते समय किया जाता है। आंकड़ा-प्रवाह विश्लेषण का प्रामाणिक उदाहरण परिभाषाओं तक पहुँच रहा है।


कार्यक्रमों का आंकड़ा-प्रवाह विश्लेषण करने की '''एक''' आसान विधि नियंत्रण प्रवाह ग्राफ के प्रत्येक [[नोड (कंप्यूटर विज्ञान)|नोड '''(कंप्यूटर विज्ञान)''']] के लिए आंकड़ा प्रवाह समीकरण स्थापित करना है और प्रत्येक नोड पर स्थानीय रूप से इनपुट से आउटपुट की बार-बार गणना करके उन्हें हल करना है। प्रणाली स्थिर हो जाती है, अर्थात यह '''एक''' निश्चित बिंदु पर पहुंच जाती है। यह सामान्य दृष्टिकोण, जिसे किल्डाल की विधि भी कहा जाता है, इसे [[गैरी किल्डाल]] द्वारा [[नौसेना स्नातकोत्तर स्कूल]] में पढ़ाने के समय विकसित किया गया था।<ref name="Kildall_1972_Optimization" /><ref name="Kildall_1973_Optimization" /><ref name="Cortesi_1999" /><ref name="Laws_2014_IEEE" />
कार्यक्रमों का आंकड़ा-प्रवाह विश्लेषण करने की आसान विधि नियंत्रण प्रवाह ग्राफ के प्रत्येक [[नोड (कंप्यूटर विज्ञान)|नोड]] के लिए आंकड़ा प्रवाह समीकरण स्थापित करना है और प्रत्येक नोड पर स्थानीय रूप से इनपुट से आउटपुट की बार-बार गणना करके उन्हें हल करना है। प्रणाली स्थिर हो जाती है, अर्थात यह निश्चित बिंदु पर पहुंच जाती है। यह सामान्य दृष्टिकोण, जिसे किल्डाल की विधि भी कहा जाता है, इसे [[गैरी किल्डाल]] द्वारा [[नौसेना स्नातकोत्तर स्कूल]] में पढ़ाने के समय विकसित किया गया था।<ref name="Kildall_1972_Optimization" /><ref name="Kildall_1973_Optimization" /><ref name="Cortesi_1999" /><ref name="Laws_2014_IEEE" />


{{Software development process}}
{{Software development process}}


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


प्रत्येक खण्ड बी के लिए:
प्रत्येक खण्ड बी के लिए:
Line 13: Line 13:
: <math> out_b = trans_b (in_b) </math>
: <math> out_b = trans_b (in_b) </math>
: <math> in_b = join_{p \in pred_b}(out_p) </math>
: <math> in_b = join_{p \in pred_b}(out_p) </math>
इस में, <math> trans_b </math> खण्ड <math>b</math> का स्थानांतरण प्र कार्य है। यह प्रवेश अवस्था <math>in_b</math> पर काम करता है, '''बाहर निकलने की अवस्था''' तथा निकास अवस्था <math>out_b</math> प्रदान करता है। [[शामिल हों (गणित)|जोड़ संचालन(ज्वाइन ऑपरेशन) <math>join</math> '''में सम्मिलित  हों''']] <math>b</math> के पूर्ववर्तियों <math>p \in pred_b</math> के निकास अवस्थाओं को जोड़ती है '''का''', जो <math>b</math> की प्रवेश अवस्था प्रदान करता है।
इस में, <math> trans_b </math> खण्ड <math>b</math> का स्थानांतरण प्र कार्य है। यह प्रवेश अवस्था <math>in_b</math> पर काम करता है, तथा निकास अवस्था <math>out_b</math> प्रदान करता है। [[शामिल हों (गणित)|जोड़ संचालन(ज्वाइन ऑपरेशन) <math>join</math>]] <math>b</math> के पूर्ववर्तियों <math>p \in pred_b</math> के निकास अवस्थाओं को जोड़ती है , जो <math>b</math> की प्रवेश अवस्था प्रदान करता है।


समीकरणों के इस समुच्चय को हल करने के पश्चात, खण्ड सीमाओं पर कार्यक्रम के गुणों को प्राप्त करने के लिए खण्ड के प्रवेश अथवा निकास अवस्थाओं का उपयोग किया जा सकता है। '''एक''' मूलभूत खण्ड के अंदर '''एक''' बिंदु पर जानकारी प्राप्त करने के लिए भिन्न-भिन्न प्रत्येक वर्णन के हस्तांतरण प्रकार्य को अलग से प्रयुक्त किया जा सकता है।
समीकरणों के इस समुच्चय को हल करने के पश्चात, खण्ड सीमाओं पर कार्यक्रम के गुणों को प्राप्त करने के लिए खण्ड के प्रवेश अथवा निकास अवस्थाओं का उपयोग किया जा सकता है। मूलभूत खण्ड के अंदर बिंदु पर जानकारी प्राप्त करने के लिए भिन्न-भिन्न प्रत्येक वर्णन के हस्तांतरण प्रकार्य को अलग से प्रयुक्त किया जा सकता है।


प्रत्येक विशेष प्रकार के आंकड़ा-प्रवाह विश्लेषण का अपना विशिष्ट स्थानांतरण प्रकार्य होता है और संचालन में सम्मिलित होता है। कुछ आंकड़ा-प्रवाह समस्याओं के लिए पश्चगामी प्रवाह विश्लेषण की आवश्यकता होती है। यह एक ही योजना का पालन करता है, अतिरिक्त इसके कि स्थानांतरण प्रकार्य प्रवेश अवस्था को उत्पन्न करने वाली निकास अवस्था पर प्रयुक्त होता है, और जोड़ संचालन पूर्ववर्ति की प्रवेश अवस्थाओं पर बाहर निकलने की अवस्था उत्पन्न करने के लिए काम करता है।
प्रत्येक विशेष प्रकार के आंकड़ा-प्रवाह विश्लेषण का अपना विशिष्ट स्थानांतरण प्रकार्य होता है और संचालन में सम्मिलित होता है। कुछ आंकड़ा-प्रवाह समस्याओं के लिए पश्चगामी प्रवाह विश्लेषण की आवश्यकता होती है। यह एक ही योजना का पालन करता है, अतिरिक्त इसके कि स्थानांतरण प्रकार्य प्रवेश अवस्था को उत्पन्न करने वाली निकास अवस्था पर प्रयुक्त होता है, और जोड़ संचालन पूर्ववर्ति की प्रवेश अवस्थाओं पर बाहर निकलने की अवस्था उत्पन्न करने के लिए काम करता है।


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


== एक पुनरावृत्त कलन विधि ==
== एक पुनरावृत्त कलन विधि ==
आंकड़ा-प्रवाह समीकरणों को हल करने का सबसे सामान्य विधि पुनरावृत्त कलन विधि का उपयोग करना है। यह प्रत्येक खण्ड के आंतरिक-अवस्था (इन-स्टेट) के सन्निकटन से प्रारंभ होता है। इसके पश्चात बाहरी अवस्थाओं की गणना आंतरिक-अवस्थाओं पर स्थानांतरण प्रकार्यों को प्रयुक्त करके की जाती है। इनमें से, आंतरिक-अवस्थाओं को जोड़ संचालनों को प्रयुक्त करके अपडेट किया जाता है। पश्चात के दो चरणों को तब तक पुनरावृति की जाती है जब तक कि हम तथाकथित निश्चित बिंदु तक नहीं पहुंच जाते हैं: ऐसी अवस्था जिसमें आंतरिक-अवस्थाओं (और परिणाम में बाह्य-अवस्थाओं ) को नहीं बदलते हैं।
आंकड़ा-प्रवाह समीकरणों को हल करने का सबसे सामान्य विधि पुनरावृत्त कलन विधि का उपयोग करना है। यह प्रत्येक खण्ड के आंतरिक-अवस्था (इन-स्टेट) के सन्निकटन से प्रारंभ होता है। इसके पश्चात बाहरी अवस्थाओं की गणना आंतरिक-अवस्थाओं पर स्थानांतरण प्रकार्यों को प्रयुक्त करके की जाती है। इनमें से, आंतरिक-अवस्थाओं को जोड़ संचालनों को प्रयुक्त करके अपडेट किया जाता है। पश्चात के दो चरणों को तब तक पुनरावृति की जाती है जब तक कि हम तथाकथित निश्चित बिंदु तक नहीं पहुंच जाते हैं: ऐसी अवस्था जिसमें आंतरिक-अवस्थाओं (और परिणाम में बाह्य-अवस्थाओं ) को नहीं बदलते हैं।
   
   
आंकड़ा-प्रवाह समीकरणों को हल करने के लिए एक मूलभूत कलन विधि राउंड-रॉबिन पुनरावृत्ति कलन विधि है:
आंकड़ा-प्रवाह समीकरणों को हल करने के लिए एक मूलभूत कलन विधि राउंड-रॉबिन पुनरावृत्ति कलन विधि है:
:''i'' के लिए ← 1 से ''N''
:''i'' के लिए ← 1 से ''N''
::''नोड i प्रारंभ करें''
::''नोड i प्रारंभ करें''
: यद्यपि (समुच्चय अभी भी बदल रहे हैं)
: यद्यपि (समुच्चय अभी भी बदल रहे हैं)
::''i'' के लिए ← 1 से ''N''
::''i'' के लिए ← 1 से ''N''
:::'' नोड i पर पुनर्गणना समुच्चयकरता है''
:::'' नोड i पर पुनर्गणना समुच्चयकरता है''
Line 34: Line 34:
प्रयोग करने योग्य होने के लिए, पुनरावृत्त दृष्टिकोण वास्तव में एक निश्चित बिंदु तक पहुंचना चाहिए। इसकी गारंटी दी जा सकती है
प्रयोग करने योग्य होने के लिए, पुनरावृत्त दृष्टिकोण वास्तव में एक निश्चित बिंदु तक पहुंचना चाहिए। इसकी गारंटी दी जा सकती है


अवस्थाओं के मूल्य डोमेन के संयोजन, स्थानांतरण कार्यों और सम्मिलित होने के संचालन पर बाधाओं को प्रयुक्त करके।
अवस्थाओं के मूल्य डोमेन के संयोजन, स्थानांतरण कार्यों और सम्मिलित होने के संचालन पर बाधाओं को प्रयुक्त करके।


मूल्य डोमेन सीमित ऊंचाई के साथ आंशिक क्रम होना चाहिए (अर्थात, कोई अनंत आरोही श्रृंखला नहीं है <math>x_1</math> < <math>x_2</math> <...). इस आंशिक क्रम के संबंध में स्थानांतरण प्रकार्य और जॉइन ऑपरेशन का संयोजन [[मोनोटोनिक|एकर -संबंधी(मोनोटोनिक)]] होना चाहिए। मोनोटोनिकिटी(दिष्टता) यह सुनिश्चित करती है कि प्रत्येक पुनरावृत्ति पर मान या तो समान रहेगा या बड़ा होगा, यद्यपि परिमित ऊंचाई सुनिश्चित करती है कि यह अनिश्चित काल तक नहीं बढ़ सकता है। इस प्रकार हम अंतत: एक ऐसी अवस्था पर पहुंच जाएंगे जहां सभी x के लिए T(x) = x, जो नियत बिंदु है।
मूल्य डोमेन सीमित ऊंचाई के साथ आंशिक क्रम होना चाहिए (अर्थात, कोई अनंत आरोही श्रृंखला नहीं है <math>x_1</math> < <math>x_2</math> <...). इस आंशिक क्रम के संबंध में स्थानांतरण प्रकार्य और जॉइन ऑपरेशन का संयोजन [[मोनोटोनिक|एकर -संबंधी(मोनोटोनिक)]] होना चाहिए। मोनोटोनिकिटी(दिष्टता) यह सुनिश्चित करती है कि प्रत्येक पुनरावृत्ति पर मान या तो समान रहेगा या बड़ा होगा, यद्यपि परिमित ऊंचाई सुनिश्चित करती है कि यह अनिश्चित काल तक नहीं बढ़ सकता है। इस प्रकार हम अंतत: एक ऐसी अवस्था पर पहुंच जाएंगे जहां सभी x के लिए T(x) = x, जो नियत बिंदु है।


=== कार्य सूची दृष्टिकोण ===
=== कार्य सूची दृष्टिकोण ===
ऊपर दिए गए कलन विधि में सुधार करना आसान है, यह देखते हुए कि खण्ड की आंतरिक-अवस्था अवस्था नहीं बदलेगी यदि इसके पूर्ववर्तियों के बाहरी अवस्था नहीं बदलते हैं। इसलिए, हम एक कार्य सूची प्रस्तुत करते हैं: उन [[बुनियादी ब्लॉक|खण्डों]] की सूची जिन्हें अभी भी संसाधित करने की आवश्यकता है। जब भी किसी खण्ड की बाहरी अवस्था बदलती है, हम उसके उत्तराधिकारियों को कार्य सूची में जोड़ देते हैं। प्रत्येक पुनरावृत्ति में, कार्य सूची से एक खण्ड हटा दिया जाता है। इसकी बाह्य-अवस्था गणना की जाती है। यदि बाहरी अवस्था बदल गया है, तो खण्ड के पूर्ववर्ति कार्य सूची में जुड़ जाते हैं। दक्षता के लिए, कार्य सूची में एक खण्ड एक से अधिक बार नहीं होना चाहिए।
ऊपर दिए गए कलन विधि में सुधार करना आसान है, यह देखते हुए कि खण्ड की आंतरिक-अवस्था अवस्था नहीं बदलेगी यदि इसके पूर्ववर्तियों के बाहरी अवस्था नहीं बदलते हैं। इसलिए, हम एक कार्य सूची प्रस्तुत करते हैं: उन [[बुनियादी ब्लॉक|खण्डों]] की सूची जिन्हें अभी भी संसाधित करने की आवश्यकता है। जब भी किसी खण्ड की बाहरी अवस्था बदलती है, हम उसके उत्तराधिकारियों को कार्य सूची में जोड़ देते हैं। प्रत्येक पुनरावृत्ति में, कार्य सूची से एक खण्ड हटा दिया जाता है। इसकी बाह्य-अवस्था गणना की जाती है। यदि बाहरी अवस्था बदल गया है, तो खण्ड के पूर्ववर्ति कार्य सूची में जुड़ जाते हैं। दक्षता के लिए, कार्य सूची में एक खण्ड एक से अधिक बार नहीं होना चाहिए।


एल्गोरिदम को कार्य सूची में सूचना-सृजन करने वाले खण्ड डालकर प्रारंभ किया जाता है। यह समाप्त हो जाता है जब
एल्गोरिदम को कार्य सूची में सूचना-सृजन करने वाले खण्ड डालकर प्रारंभ किया जाता है। यह समाप्त हो जाता है जब
Line 54: Line 54:


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


=== प्रारंभ ===
=== प्रारंभ ===
सही और स्पष्ट परिणाम प्राप्त करने के लिए आंतरिक-अवस्थाओं का प्रारंभिक मूल्य महत्वपूर्ण है।
सही और स्पष्ट परिणाम प्राप्त करने के लिए आंतरिक-अवस्थाओं का प्रारंभिक मूल्य महत्वपूर्ण है।


यदि परिणामों का उपयोग संकलक अनुकूलन के लिए किया जाता है, तो उन्हें रूढ़िवादी जानकारी प्रदान करनी चाहिए, अर्थात सूचना को प्रयुक्त करते समय, कार्यक्रम को शब्दार्थ नहीं बदलना चाहिए।
यदि परिणामों का उपयोग संकलक अनुकूलन के लिए किया जाता है, तो उन्हें रूढ़िवादी जानकारी प्रदान करनी चाहिए, अर्थात सूचना को प्रयुक्त करते समय, कार्यक्रम को शब्दार्थ नहीं बदलना चाहिए।
Line 104: Line 104:
संभावित रूप से उनके अगले लेखन अद्यतन से पहले पश्चातमें पढ़ें। परिणाम सामान्यतः द्वारा उपयोग किया जाता है
संभावित रूप से उनके अगले लेखन अद्यतन से पहले पश्चातमें पढ़ें। परिणाम सामान्यतः द्वारा उपयोग किया जाता है


[[मृत कोड उन्मूलन]] उन वर्णनों   को हटाने के लिए जो एक चर को असाइन करते हैं जिसका मूल्य पश्चात में उपयोग नहीं किया जाता है।
[[मृत कोड उन्मूलन]] उन वर्णनों को हटाने के लिए जो एक चर को असाइन करते हैं जिसका मूल्य पश्चात में उपयोग नहीं किया जाता है।


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


प्रारंभिक कोड:
प्रारंभिक कोड:
Line 146: Line 146:
  // बाहर:{}
  // बाहर:{}
{{col-end}}
{{col-end}}
b3 की आंतरिक-अवस्था में केवल b और d होते हैं, क्योंकि c लिखा गया है। बी 1 का बाह्य-अवस्था बी 2 और बी 3 के आंतरिक-अवस्थाओं का संघ है। b2 में c की परिभाषा को हटाया जा सकता है, क्योंकि c स्टेटमेंट के तुरंत पश्चातप्रत्यक्ष नहीं होता है।
b3 की आंतरिक-अवस्था में केवल b और d होते हैं, क्योंकि c लिखा गया है। बी 1 का बाह्य-अवस्था बी 2 और बी 3 के आंतरिक-अवस्थाओं का संघ है। b2 में c की परिभाषा को हटाया जा सकता है, क्योंकि c स्टेटमेंट के तुरंत पश्चातप्रत्यक्ष नहीं होता है।


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


{| class="wikitable"
{| class="wikitable"
Line 184: Line 184:
ध्यान दें कि b1 को b2 से पहले सूची में अंकित किया गया था, जिसने b1 को दो बार संसाधित करने के लिए बाध्य किया (b1 को b2 के पूर्ववर्ती के रूप में फिर से अंकित किया गया था)। b1 से पहले b2 डालने से पहले पूरा हो जाता।
ध्यान दें कि b1 को b2 से पहले सूची में अंकित किया गया था, जिसने b1 को दो बार संसाधित करने के लिए बाध्य किया (b1 को b2 के पूर्ववर्ती के रूप में फिर से अंकित किया गया था)। b1 से पहले b2 डालने से पहले पूरा हो जाता।


खाली समुच्चयके साथ आरंभ करना एक आशावादी आरंभीकरण है: सभी चर मृत के रूप में प्रारंभ होते हैं। ध्यान दें कि बाह्य-अवस्थाओं एक पुनरावृत्ति से अगले तक सिकुड़ नहीं सकते हैं, चूंकि बाह्य-अवस्था आंतरिक-अवस्था से छोटा हो सकता है। यह इस तथ्य से देखा जा सकता है कि पहले पुनरावृत्ति के पश्चातअवस्था के अंदर के परिवर्तन से ही बाहरी अवस्था बदल सकता है। चूंकि आंतरिक-अवस्था खाली समुच्चयके रूप में प्रारंभ होता है, यह केवल आगे के पुनरावृत्तियों में बढ़ सकता है।
खाली समुच्चयके साथ आरंभ करना एक आशावादी आरंभीकरण है: सभी चर मृत के रूप में प्रारंभ होते हैं। ध्यान दें कि बाह्य-अवस्थाओं एक पुनरावृत्ति से अगले तक सिकुड़ नहीं सकते हैं, चूंकि बाह्य-अवस्था आंतरिक-अवस्था से छोटा हो सकता है। यह इस तथ्य से देखा जा सकता है कि पहले पुनरावृत्ति के पश्चातअवस्था के अंदर के परिवर्तन से ही बाहरी अवस्था बदल सकता है। चूंकि आंतरिक-अवस्था खाली समुच्चयके रूप में प्रारंभ होता है, यह केवल आगे के पुनरावृत्तियों में बढ़ सकता है।


== अन्य दृष्टिकोण ==
== अन्य दृष्टिकोण ==
Line 194: Line 194:


=== बिट वेक्टर समस्याएं ===
=== बिट वेक्टर समस्याएं ===
ऊपर दिए गए उदाहरण ऐसी समस्याएँ हैं जिनमें आंकड़ा-प्रवाह मान एक समुच्चयहै, उदा. पहुँच परिभाषाओं का समुच्चय(कार्यक्रम में परिभाषा अवस्था के लिए बिट का उपयोग करके), या प्रत्यक्ष चरों का समुच्चय। इन समुच्चयों को कुशलतापूर्वक [[बिट सरणी]] के रूप में प्रदर्शित किया जा सकता है, जिसमें प्रत्येक बिट एक विशेष तत्व की समुच्चय सदस्यता का प्रतिनिधित्व करता है। इस प्रतिनिधित्व का उपयोग करते हुए, जोड़ और स्थानांतरण प्रकार्यों को बिटवाइज़ लॉजिकल ऑपरेशंस के रूप में प्रयुक्त किया जा सकता है। जोड़ संचालन सामान्यतः संघ या चौराहा है, जिसे बिटवाइज़ '' लॉजिकल या '' और '' लॉजिकल एंड '' द्वारा प्रयुक्त किया जाता है।
ऊपर दिए गए उदाहरण ऐसी समस्याएँ हैं जिनमें आंकड़ा-प्रवाह मान एक समुच्चयहै, उदा. पहुँच परिभाषाओं का समुच्चय(कार्यक्रम में परिभाषा अवस्था के लिए बिट का उपयोग करके), या प्रत्यक्ष चरों का समुच्चय। इन समुच्चयों को कुशलतापूर्वक [[बिट सरणी]] के रूप में प्रदर्शित किया जा सकता है, जिसमें प्रत्येक बिट एक विशेष तत्व की समुच्चय सदस्यता का प्रतिनिधित्व करता है। इस प्रतिनिधित्व का उपयोग करते हुए, जोड़ और स्थानांतरण प्रकार्यों को बिटवाइज़ लॉजिकल ऑपरेशंस के रूप में प्रयुक्त किया जा सकता है। जोड़ संचालन सामान्यतः संघ या चौराहा है, जिसे बिटवाइज़ ''लॉजिकल या'' और ''लॉजिकल एंड'' द्वारा प्रयुक्त किया जाता है।


प्रत्येक खण्डके लिए स्थानांतरण प्रकार्य को तथाकथित 'जीन' और 'किल' समुच्चयमें विघटित किया जा सकता है।
प्रत्येक खण्डके लिए स्थानांतरण प्रकार्य को तथाकथित 'जीन' और 'किल' समुच्चयमें विघटित किया जा सकता है।


एक उदाहरण के रूप में, लाइव-चर विश्लेषण में, जोड़ संचालन यूनियन है। ''किल'' समुच्चय चरों का समुच्चयहै जो एक खण्ड में लिखे जाते हैं, यद्यपि ''जेन'' समुच्चय चरों का समुच्चय है जो पहले लिखे बिना पढ़े जाते हैं। आंकड़ा प्रवाह समीकरण बन जाते हैं
एक उदाहरण के रूप में, लाइव-चर विश्लेषण में, जोड़ संचालन यूनियन है। ''किल'' समुच्चय चरों का समुच्चयहै जो एक खण्ड में लिखे जाते हैं, यद्यपि ''जेन'' समुच्चय चरों का समुच्चय है जो पहले लिखे बिना पढ़े जाते हैं। आंकड़ा प्रवाह समीकरण बन जाते हैं


:<math> out_b = \bigcup_{s \in succ_b} in_s </math>
:<math> out_b = \bigcup_{s \in succ_b} in_s </math>
Line 206: Line 206:
  बाहर (बी) = 0
  बाहर (बी) = 0
  'फॉर' एस 'इन' सक्सेस (बी)
  'फॉर' एस 'इन' सक्सेस (बी)
    आउट (बी) = आउट (बी) 'या' इन (एस)
  आउट (बी) = आउट (बी) 'या' इन (एस)
  इन (बी) = (बाहर (बी) 'और नहीं' मारना (बी)) 'या' जीन (बी)
  इन (बी) = (बाहर (बी) 'और नहीं' मारना (बी)) 'या' जीन (बी)


Line 216: Line 216:


=== आईएफडीएस समस्याएं ===
=== आईएफडीएस समस्याएं ===
अंतर-प्रक्रियात्मक, परिमित, वितरणात्मक, सब समुच्चय समस्याएँ या आईएफडीएस समस्याएँ सामान्य बहुपद-समय समाधान के साथ समस्या का एक अन्य वर्ग हैं।<ref name="Reps_1995"/><ref name="Naeem_2010"/> इन समस्याओं के समाधान संदर्भ-संवेदनशील और प्रवाह-संवेदनशील आंकड़ा प्रवाह विश्लेषण प्रदान करते हैं।
अंतर-प्रक्रियात्मक, परिमित, वितरणात्मक, सब समुच्चय समस्याएँ या आईएफडीएस समस्याएँ सामान्य बहुपद-समय समाधान के साथ समस्या का एक अन्य वर्ग हैं।<ref name="Reps_1995"/><ref name="Naeem_2010"/> इन समस्याओं के समाधान संदर्भ-संवेदनशील और प्रवाह-संवेदनशील आंकड़ा प्रवाह विश्लेषण प्रदान करते हैं।


लोकप्रिय कार्यक्रमिंग भाषाओं के लिए आईएफडीएस - आधारित आंकड़ा प्रवाह विश्लेषण के कई कार्यान्वयन हैं, उदा। सूत में<ref name="Bodden_2012"/> और कुछ नहीं<ref name="Rapoport_2015"/> जावा विश्लेषण के लिए रूपरेखा।
लोकप्रिय कार्यक्रमिंग भाषाओं के लिए आईएफडीएस - आधारित आंकड़ा प्रवाह विश्लेषण के कई कार्यान्वयन हैं, उदा। सूत में<ref name="Bodden_2012"/> और कुछ नहीं<ref name="Rapoport_2015"/> जावा विश्लेषण के लिए रूपरेखा।


प्रत्येक बिटवेक्टर समस्या भी एक आईएफडीएस समस्या है, किन्तु कई महत्वपूर्ण आईएफडीएस समस्याएँ हैं जो बिटवेक्टर समस्याएँ नहीं हैं, जिनमें वास्तविक-प्रत्यक्ष चर और संभवतः-अनियंत्रित चर सम्मिलित हैं।
प्रत्येक बिटवेक्टर समस्या भी एक आईएफडीएस समस्या है, किन्तु कई महत्वपूर्ण आईएफडीएस समस्याएँ हैं जो बिटवेक्टर समस्याएँ नहीं हैं, जिनमें वास्तविक-प्रत्यक्ष चर और संभवतः-अनियंत्रित चर सम्मिलित हैं।


== संवेदनशीलता ==
== संवेदनशीलता ==
आंकड़ा-प्रवाह विश्लेषण सामान्यतः पथ-असंवेदनशील होता है, चूंकि आंकड़ा-प्रवाह समीकरणों को परिभाषित करना संभव है जो पथ-संवेदनशील विश्लेषण उत्पन्न करते हैं।
आंकड़ा-प्रवाह विश्लेषण सामान्यतः पथ-असंवेदनशील होता है, चूंकि आंकड़ा-प्रवाह समीकरणों को परिभाषित करना संभव है जो पथ-संवेदनशील विश्लेषण उत्पन्न करते हैं।


* एक प्रवाह-संवेदनशील विश्लेषण एक कार्यक्रम में वर्णनों   के क्रम को ध्यान में रखता है। उदाहरण के लिए, एक प्रवाह-असंवेदनशील सूचक उपनाम विश्लेषण चर ''x'' और ''y'' को निर्धारित कर सकता है जो एक ही स्थान को संदर्भित कर सकता है, यद्यपि एक प्रवाह-संवेदनशील विश्लेषण कथन 20 के पश्चातनिर्धारित कर सकता है, चर ''x'' और ''y'' उसी स्थान को संदर्भित कर सकता है।
* एक प्रवाह-संवेदनशील विश्लेषण एक कार्यक्रम में वर्णनों के क्रम को ध्यान में रखता है। उदाहरण के लिए, एक प्रवाह-असंवेदनशील सूचक उपनाम विश्लेषण चर ''x'' और ''y'' को निर्धारित कर सकता है जो एक ही स्थान को संदर्भित कर सकता है, यद्यपि एक प्रवाह-संवेदनशील विश्लेषण कथन 20 के पश्चातनिर्धारित कर सकता है, चर ''x'' और ''y'' उसी स्थान को संदर्भित कर सकता है।
* एक पथ-संवेदनशील विश्लेषण सनिबंधन शाखा निर्देशों पर विधेय पर निर्भर विश्लेषण जानकारी के विभिन्न टुकड़ों की गणना करता है। उदाहरण के लिए, यदि किसी शाखा में कोई निबंधन है {{code|x>0}}, तो फ़ॉल-थ्रू पथ पर, विश्लेषण यह मान लेगा {{code|1=x<=0}} और शाखा के निशाने पर यह मान लिया जाएगा कि वास्तव में {{code|x>0}} रखती है।
* एक पथ-संवेदनशील विश्लेषण सनिबंधन शाखा निर्देशों पर विधेय पर निर्भर विश्लेषण जानकारी के विभिन्न टुकड़ों की गणना करता है। उदाहरण के लिए, यदि किसी शाखा में कोई निबंधन है {{code|x>0}}, तो फ़ॉल-थ्रू पथ पर, विश्लेषण यह मान लेगा {{code|1=x<=0}} और शाखा के निशाने पर यह मान लिया जाएगा कि वास्तव में {{code|x>0}} रखती है।
* एक संदर्भ-संवेदनशील विश्लेषण एक ''अंतरप्रक्रियात्मक'' विश्लेषण है जो प्रकार्य कॉल के लक्ष्य का विश्लेषण करते समय कॉलिंग संदर्भ पर विचार करता है। विशेष रूप से, संदर्भ जानकारी का उपयोग करके कोई भी वास्तविककॉल साइट पर वापस जा सकता है, यद्यपि उस जानकारी के बिना, विश्लेषण जानकारी को सभी संभावित कॉल साइटों पर वापस प्रचारित करना पड़ता है, संभावित रूप से नियतता खो देता है।
* एक संदर्भ-संवेदनशील विश्लेषण एक ''अंतरप्रक्रियात्मक'' विश्लेषण है जो प्रकार्य कॉल के लक्ष्य का विश्लेषण करते समय कॉलिंग संदर्भ पर विचार करता है। विशेष रूप से, संदर्भ जानकारी का उपयोग करके कोई भी वास्तविककॉल साइट पर वापस जा सकता है, यद्यपि उस जानकारी के बिना, विश्लेषण जानकारी को सभी संभावित कॉल साइटों पर वापस प्रचारित करना पड़ता है, संभावित रूप से नियतता खो देता है।


== आंकड़ा-प्रवाह विश्लेषणों की सूची ==
== आंकड़ा-प्रवाह विश्लेषणों की सूची ==

Revision as of 22:02, 26 February 2023

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

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

मूलरूप सिद्धांत

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

प्रत्येक खण्ड बी के लिए:

इस में, खण्ड का स्थानांतरण प्र कार्य है। यह प्रवेश अवस्था पर काम करता है, तथा निकास अवस्था प्रदान करता है। जोड़ संचालन(ज्वाइन ऑपरेशन) के पूर्ववर्तियों के निकास अवस्थाओं को जोड़ती है , जो की प्रवेश अवस्था प्रदान करता है।

समीकरणों के इस समुच्चय को हल करने के पश्चात, खण्ड सीमाओं पर कार्यक्रम के गुणों को प्राप्त करने के लिए खण्ड के प्रवेश अथवा निकास अवस्थाओं का उपयोग किया जा सकता है। मूलभूत खण्ड के अंदर बिंदु पर जानकारी प्राप्त करने के लिए भिन्न-भिन्न प्रत्येक वर्णन के हस्तांतरण प्रकार्य को अलग से प्रयुक्त किया जा सकता है।

प्रत्येक विशेष प्रकार के आंकड़ा-प्रवाह विश्लेषण का अपना विशिष्ट स्थानांतरण प्रकार्य होता है और संचालन में सम्मिलित होता है। कुछ आंकड़ा-प्रवाह समस्याओं के लिए पश्चगामी प्रवाह विश्लेषण की आवश्यकता होती है। यह एक ही योजना का पालन करता है, अतिरिक्त इसके कि स्थानांतरण प्रकार्य प्रवेश अवस्था को उत्पन्न करने वाली निकास अवस्था पर प्रयुक्त होता है, और जोड़ संचालन पूर्ववर्ति की प्रवेश अवस्थाओं पर बाहर निकलने की अवस्था उत्पन्न करने के लिए काम करता है।

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

एक पुनरावृत्त कलन विधि

आंकड़ा-प्रवाह समीकरणों को हल करने का सबसे सामान्य विधि पुनरावृत्त कलन विधि का उपयोग करना है। यह प्रत्येक खण्ड के आंतरिक-अवस्था (इन-स्टेट) के सन्निकटन से प्रारंभ होता है। इसके पश्चात बाहरी अवस्थाओं की गणना आंतरिक-अवस्थाओं पर स्थानांतरण प्रकार्यों को प्रयुक्त करके की जाती है। इनमें से, आंतरिक-अवस्थाओं को जोड़ संचालनों को प्रयुक्त करके अपडेट किया जाता है। पश्चात के दो चरणों को तब तक पुनरावृति की जाती है जब तक कि हम तथाकथित निश्चित बिंदु तक नहीं पहुंच जाते हैं: ऐसी अवस्था जिसमें आंतरिक-अवस्थाओं (और परिणाम में बाह्य-अवस्थाओं ) को नहीं बदलते हैं।

आंकड़ा-प्रवाह समीकरणों को हल करने के लिए एक मूलभूत कलन विधि राउंड-रॉबिन पुनरावृत्ति कलन विधि है:

i के लिए ← 1 से N
नोड i प्रारंभ करें
यद्यपि (समुच्चय अभी भी बदल रहे हैं)
i के लिए ← 1 से N
नोड i पर पुनर्गणना समुच्चयकरता है

अभिसरण

प्रयोग करने योग्य होने के लिए, पुनरावृत्त दृष्टिकोण वास्तव में एक निश्चित बिंदु तक पहुंचना चाहिए। इसकी गारंटी दी जा सकती है

अवस्थाओं के मूल्य डोमेन के संयोजन, स्थानांतरण कार्यों और सम्मिलित होने के संचालन पर बाधाओं को प्रयुक्त करके।

मूल्य डोमेन सीमित ऊंचाई के साथ आंशिक क्रम होना चाहिए (अर्थात, कोई अनंत आरोही श्रृंखला नहीं है < <...). इस आंशिक क्रम के संबंध में स्थानांतरण प्रकार्य और जॉइन ऑपरेशन का संयोजन एकर -संबंधी(मोनोटोनिक) होना चाहिए। मोनोटोनिकिटी(दिष्टता) यह सुनिश्चित करती है कि प्रत्येक पुनरावृत्ति पर मान या तो समान रहेगा या बड़ा होगा, यद्यपि परिमित ऊंचाई सुनिश्चित करती है कि यह अनिश्चित काल तक नहीं बढ़ सकता है। इस प्रकार हम अंतत: एक ऐसी अवस्था पर पहुंच जाएंगे जहां सभी x के लिए T(x) = x, जो नियत बिंदु है।

कार्य सूची दृष्टिकोण

ऊपर दिए गए कलन विधि में सुधार करना आसान है, यह देखते हुए कि खण्ड की आंतरिक-अवस्था अवस्था नहीं बदलेगी यदि इसके पूर्ववर्तियों के बाहरी अवस्था नहीं बदलते हैं। इसलिए, हम एक कार्य सूची प्रस्तुत करते हैं: उन खण्डों की सूची जिन्हें अभी भी संसाधित करने की आवश्यकता है। जब भी किसी खण्ड की बाहरी अवस्था बदलती है, हम उसके उत्तराधिकारियों को कार्य सूची में जोड़ देते हैं। प्रत्येक पुनरावृत्ति में, कार्य सूची से एक खण्ड हटा दिया जाता है। इसकी बाह्य-अवस्था गणना की जाती है। यदि बाहरी अवस्था बदल गया है, तो खण्ड के पूर्ववर्ति कार्य सूची में जुड़ जाते हैं। दक्षता के लिए, कार्य सूची में एक खण्ड एक से अधिक बार नहीं होना चाहिए।

एल्गोरिदम को कार्य सूची में सूचना-सृजन करने वाले खण्ड डालकर प्रारंभ किया जाता है। यह समाप्त हो जाता है जब कार्य सूची खाली है।

आदेश देना

आंकड़ा-प्रवाह समीकरणों को क्रमिक रूप से हल करने की दक्षता उस क्रम से प्रभावित होती है जिस पर स्थानीय नोड्स का भ्रमण किया जाता है।[5] इसके अतिरिक्त, यह इस बात पर निर्भर करता है कि सीएफजी पर आगे या पीछे आंकड़ा प्रवाह विश्लेषण के लिए आंकड़ा प्रवाह समीकरणों का उपयोग किया जाता है या नहीं। सहजता से, अग्रप्रवाह की समस्या में, यह सबसे तेज़ होगा यदि खण्डके सभी पूर्ववर्तियों को खण्डसे पहले संसाधित किया गया हो, तब से पुनरावृति नवीनतम जानकारी का उपयोग करेगी। लूप के अभाव में खण्ड को इस प्रकार से ऑर्डर करना संभव है कि प्रत्येक खण्ड को केवल एक बार संसाधित करके सही बाह्य-अवस्थाओं की गणना की जाती है।

निम्नलिखित में, आंकड़ा-प्रवाह समीकरणों को हल करने के लिए कुछ पुनरावृति क्रमों पर चर्चा की गई है

(एक नियंत्रण-प्रवाह ग्राफ के पुनरावृति क्रम से संबंधित अवधारणा a का ट्री ट्रैवर्सल है

वृक्ष (ग्राफ सिद्धांत))।

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

प्रारंभ

सही और स्पष्ट परिणाम प्राप्त करने के लिए आंतरिक-अवस्थाओं का प्रारंभिक मूल्य महत्वपूर्ण है।

यदि परिणामों का उपयोग संकलक अनुकूलन के लिए किया जाता है, तो उन्हें रूढ़िवादी जानकारी प्रदान करनी चाहिए, अर्थात सूचना को प्रयुक्त करते समय, कार्यक्रम को शब्दार्थ नहीं बदलना चाहिए।

फिक्सपॉइंट एल्गोरिथ्म का पुनरावृत्ति मूल्यों को अधिकतम तत्व की दिशा में ले जाएगा। इसलिए अधिकतम तत्व वाले सभी खण्डों को प्रारंभ करना उपयोगी नहीं है। अधिकतम से कम मान वाले अवस्था में कम से कम एक खण्ड प्रारंभ होता है। विवरण पर निर्भर करता है

आंकड़ा-प्रवाह समस्या। यदि न्यूनतम तत्व पूरी प्रकार से रूढ़िवादी जानकारी का प्रतिनिधित्व करता है, तो परिणाम आंकड़ा-प्रवाह पुनरावृत्ति के समय भी सुरक्षित रूप से उपयोग किए जा सकते हैं। यदि यह सबसे स्पष्ट जानकारी का प्रतिनिधित्व करता है, तो परिणामों को प्रयुक्त करने से पहले फिक्सपॉइंट तक पहुंचना चाहिए।

उदाहरण

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

ध्यान दें कि आंकड़ा-प्रवाह विश्लेषण द्वारा परिकलित गुण सामान्यतः वास्तविक के केवल सन्निकटन होते हैं

गुण। ऐसा इसलिए है क्योंकि आंकड़ा-प्रवाह विश्लेषण बिना CFG के सिंटैक्टिकल स्ट्रक्चर पर काम करता है

कार्यक्रम के स्पष्ट नियंत्रण प्रवाह का अनुकरण करना।

चूंकि, अभ्यास में अभी भी उपयोगी होने के लिए, आंकड़ा प्रवाह विश्लेषण एल्गोरिदम को सामान्यतः गणना करने के लिए डिज़ाइन किया गया है

वास्तविक कार्यक्रम गुणों का एक ऊपरी क्रमशः निचला सन्निकटन।

आगे का विश्लेषण

परिभाषा तक पहुँचना एनालिसिस प्रत्येक कार्यक्रम पॉइंट के लिए परिभाषाओं के समुच्चयकी गणना करता है

संभावित रूप से इस कार्यक्रम बिंदु तक पहुँच सकते हैं।

पिछड़ा विश्लेषण

प्रत्यक्ष चर विश्लेषण प्रत्येक कार्यक्रम के लिए उन चरों की गणना करता है जो हो सकते हैं

संभावित रूप से उनके अगले लेखन अद्यतन से पहले पश्चातमें पढ़ें। परिणाम सामान्यतः द्वारा उपयोग किया जाता है

मृत कोड उन्मूलन उन वर्णनों को हटाने के लिए जो एक चर को असाइन करते हैं जिसका मूल्य पश्चात में उपयोग नहीं किया जाता है।

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

प्रारंभिक कोड:

पिछड़ा विश्लेषण:

b3 की आंतरिक-अवस्था में केवल b और d होते हैं, क्योंकि c लिखा गया है। बी 1 का बाह्य-अवस्था बी 2 और बी 3 के आंतरिक-अवस्थाओं का संघ है। b2 में c की परिभाषा को हटाया जा सकता है, क्योंकि c स्टेटमेंट के तुरंत पश्चातप्रत्यक्ष नहीं होता है।

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

processing out-state old in-state new in-state work list
b3 {} {} {b,d} (b1,b2)
b1 {b,d} {} {} (b2)
b2 {b,d} {} {a,b} (b1)
b1 {a,b,d} {} {} ()

ध्यान दें कि b1 को b2 से पहले सूची में अंकित किया गया था, जिसने b1 को दो बार संसाधित करने के लिए बाध्य किया (b1 को b2 के पूर्ववर्ती के रूप में फिर से अंकित किया गया था)। b1 से पहले b2 डालने से पहले पूरा हो जाता।

खाली समुच्चयके साथ आरंभ करना एक आशावादी आरंभीकरण है: सभी चर मृत के रूप में प्रारंभ होते हैं। ध्यान दें कि बाह्य-अवस्थाओं एक पुनरावृत्ति से अगले तक सिकुड़ नहीं सकते हैं, चूंकि बाह्य-अवस्था आंतरिक-अवस्था से छोटा हो सकता है। यह इस तथ्य से देखा जा सकता है कि पहले पुनरावृत्ति के पश्चातअवस्था के अंदर के परिवर्तन से ही बाहरी अवस्था बदल सकता है। चूंकि आंतरिक-अवस्था खाली समुच्चयके रूप में प्रारंभ होता है, यह केवल आगे के पुनरावृत्तियों में बढ़ सकता है।

अन्य दृष्टिकोण

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

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

समस्याओं का विशेष वर्ग

आंकड़ा प्रवाह समस्याओं के कई विशेष वर्ग हैं जिनके कुशल या सामान्य समाधान हैं।

बिट वेक्टर समस्याएं

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

प्रत्येक खण्डके लिए स्थानांतरण प्रकार्य को तथाकथित 'जीन' और 'किल' समुच्चयमें विघटित किया जा सकता है।

एक उदाहरण के रूप में, लाइव-चर विश्लेषण में, जोड़ संचालन यूनियन है। किल समुच्चय चरों का समुच्चयहै जो एक खण्ड में लिखे जाते हैं, यद्यपि जेन समुच्चय चरों का समुच्चय है जो पहले लिखे बिना पढ़े जाते हैं। आंकड़ा प्रवाह समीकरण बन जाते हैं

तार्किक संचालन में, यह इस रूप में पढ़ता है

बाहर (बी) = 0
'फॉर' एस 'इन' सक्सेस (बी)
 आउट (बी) = आउट (बी) 'या' इन (एस)
इन (बी) = (बाहर (बी) 'और नहीं' मारना (बी)) 'या' जीन (बी)

आंकड़ा प्रवाह समस्याएं जिनमें आंकड़ा-प्रवाह मानों के समुच्चय होते हैं जिन्हें बिट वैक्टर के रूप में प्रदर्शित किया जा सकता है, उन्हें 'बिट वेक्टर समस्याएं', 'जेन-किल समस्याएं', या 'स्थानीय रूप से भिन्न करने योग्य समस्याएं' कहा जाता है।[8] ऐसी समस्याओं के सामान्य बहुपद-समय समाधान हैं।[9]

ऊपर बताई गई पहुंच परिभाषाओं और प्रत्यक्ष चर समस्याओं के अतिरिक्त, निम्नलिखित समस्याएं बिटवेक्टर समस्याओं के उदाहरण हैं:[9]* उपलब्ध भाव

  • बहुत व्यस्त भाव
  • यूज-डिफाइन चेन | यूज-डेफिनिशन चेन

आईएफडीएस समस्याएं

अंतर-प्रक्रियात्मक, परिमित, वितरणात्मक, सब समुच्चय समस्याएँ या आईएफडीएस समस्याएँ सामान्य बहुपद-समय समाधान के साथ समस्या का एक अन्य वर्ग हैं।[8][10] इन समस्याओं के समाधान संदर्भ-संवेदनशील और प्रवाह-संवेदनशील आंकड़ा प्रवाह विश्लेषण प्रदान करते हैं।

लोकप्रिय कार्यक्रमिंग भाषाओं के लिए आईएफडीएस - आधारित आंकड़ा प्रवाह विश्लेषण के कई कार्यान्वयन हैं, उदा। सूत में[11] और कुछ नहीं[12] जावा विश्लेषण के लिए रूपरेखा।

प्रत्येक बिटवेक्टर समस्या भी एक आईएफडीएस समस्या है, किन्तु कई महत्वपूर्ण आईएफडीएस समस्याएँ हैं जो बिटवेक्टर समस्याएँ नहीं हैं, जिनमें वास्तविक-प्रत्यक्ष चर और संभवतः-अनियंत्रित चर सम्मिलित हैं।

संवेदनशीलता

आंकड़ा-प्रवाह विश्लेषण सामान्यतः पथ-असंवेदनशील होता है, चूंकि आंकड़ा-प्रवाह समीकरणों को परिभाषित करना संभव है जो पथ-संवेदनशील विश्लेषण उत्पन्न करते हैं।

  • एक प्रवाह-संवेदनशील विश्लेषण एक कार्यक्रम में वर्णनों के क्रम को ध्यान में रखता है। उदाहरण के लिए, एक प्रवाह-असंवेदनशील सूचक उपनाम विश्लेषण चर x और y को निर्धारित कर सकता है जो एक ही स्थान को संदर्भित कर सकता है, यद्यपि एक प्रवाह-संवेदनशील विश्लेषण कथन 20 के पश्चातनिर्धारित कर सकता है, चर x और y उसी स्थान को संदर्भित कर सकता है।
  • एक पथ-संवेदनशील विश्लेषण सनिबंधन शाखा निर्देशों पर विधेय पर निर्भर विश्लेषण जानकारी के विभिन्न टुकड़ों की गणना करता है। उदाहरण के लिए, यदि किसी शाखा में कोई निबंधन है x>0, तो फ़ॉल-थ्रू पथ पर, विश्लेषण यह मान लेगा x<=0 और शाखा के निशाने पर यह मान लिया जाएगा कि वास्तव में x>0 रखती है।
  • एक संदर्भ-संवेदनशील विश्लेषण एक अंतरप्रक्रियात्मक विश्लेषण है जो प्रकार्य कॉल के लक्ष्य का विश्लेषण करते समय कॉलिंग संदर्भ पर विचार करता है। विशेष रूप से, संदर्भ जानकारी का उपयोग करके कोई भी वास्तविककॉल साइट पर वापस जा सकता है, यद्यपि उस जानकारी के बिना, विश्लेषण जानकारी को सभी संभावित कॉल साइटों पर वापस प्रचारित करना पड़ता है, संभावित रूप से नियतता खो देता है।

आंकड़ा-प्रवाह विश्लेषणों की सूची

यह भी देखें

  • सार व्याख्या
  • नियंत्रण प्रवाह विश्लेषण
  • XLT86

संदर्भ

  1. Kildall, Gary Arlen (May 1972). Global expression optimization during compilation (Ph.D. dissertation). Seattle, Washington, USA: University of Washington, Computer Science Group. Thesis No. 20506, Technical Report No. 72-06-02.
  2. Kildall, Gary Arlen (1973-10-01). "A Unified Approach to Global Program Optimization" (PDF). Proceedings of the 1st Annual ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages (POPL). POPL '73. Boston, Massachusetts, USA: 194–206. doi:10.1145/512927.512945. hdl:10945/42162. S2CID 10219496. Archived (PDF) from the original on 2017-06-29. Retrieved 2006-11-20. ([1])
  3. Rüthing, Oliver; Knoop, Jens; Steffen, Bernhard (2003-07-31) [1999]. "Optimization: Detecting Equalities of Variables, Combining Efficiency with Precision". In Cortesi, Agostino; Filé, Gilberto (eds.). Static Analysis: 6th International Symposium, SAS'99, Venice, Italy, September 22–24, 1999, Proceedings. Lecture Notes in Computer Science. Vol. 1694 (illustrated ed.). Springer. pp. 232–247 [233]. ISBN 9783540664598. ISSN 0302-9743.
  4. Huitt, Robert; Eubanks, Gordon; Rolander, Thomas "Tom" Alan; Laws, David; Michel, Howard E.; Halla, Brian; Wharton, John Harrison; Berg, Brian; Su, Weilian; Kildall, Scott; Kampe, Bill (2014-04-25). Laws, David (ed.). "Legacy of Gary Kildall: The CP/M IEEE Milestone Dedication" (PDF) (video transscription). Pacific Grove, California, USA: Computer History Museum. CHM Reference number: X7170.2014. Retrieved 2020-01-19. […] Eubanks: […] Gary […] was an inventor, he was inventive, he did things. His Ph.D. thesis proved that global flow analysis converges. […] This is a fundamental idea in computer science. […] I took a […] summer course once from a guy named Dhamdhere […] they talked about optimization for like a week and then they put a slide up and said, "Kildall's Method," this is the real story. […] that's something that no one ever thinks about. […] [2][3] (33 pages)
  5. Cooper, Keith D.; Harvey, Timothy J.; Kennedy, Ken (2004-03-26) [November 2002]. "Iterative Data-Flow Analysis, Revisited" (PDF). PLDI 2003. ACM. TR04-432. Retrieved 2017-07-01.[permanent dead link]
  6. Mohnen, Markus (2002). A Graph-Free Approach to Data-Flow Analysis. Lecture Notes in Computer Science. Vol. 2304. pp. 185–213. doi:10.1007/3-540-45937-5_6. ISBN 978-3-540-43369-9.
  7. Kuang, Hongyu; Mäder, Patrick; Hu, Hao; Ghabi, Achraf; Huang, LiGuo; Lü, Jian; Egyed, Alexander (2015-11-01). "Can method data dependencies support the assessment of traceability between requirements and source code?". Journal of Software: Evolution and Process. 27 (11): 838–866. doi:10.1002/smr.1736. ISSN 2047-7481. S2CID 39846438.
  8. 8.0 8.1 Reps, Thomas; Horwitz, Susan; Sagiv, Mooly (1995). "Precise interprocedural dataflow analysis via graph reachability". Proceedings of the 22nd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages - POPL '95. New York, New York, USA: ACM Press: 1, 49–61. doi:10.1145/199448.199462. ISBN 0-89791692-1. S2CID 5955667.
  9. 9.0 9.1 Knoop, Jens; Steffen, Bernhard; Vollmer, Jürgen (1996-05-01). "Parallelism for free: efficient and optimal bitvector analyses for parallel programs". ACM Transactions on Programming Languages and Systems. 18 (3): 268–299. doi:10.1145/229542.229545. ISSN 0164-0925. S2CID 14123780.
  10. Naeem, Nomair A.; Lhoták, Ondřej; Rodriguez, Jonathan (2010), "Practical Extensions to the IFDS Algorithm", Compiler Construction, Lecture Notes in Computer Science, vol. 6011, Berlin / Heidelberg, Germany: Springer Verlag, pp. 124–144, doi:10.1007/978-3-642-11970-5_8, ISBN 978-3-64211969-9
  11. Bodden, Eric (2012). "Inter-procedural data-flow analysis with IFDS/IDE and Soot". Proceedings of the ACM SIGPLAN International Workshop on State of the Art in Java Program Analysis - SOAP '12. New York, New York, USA: ACM Press: 3–8. doi:10.1145/2259051.2259052. ISBN 978-1-45031490-9. S2CID 3020481.
  12. Rapoport, Marianna; Lhoták, Ondřej; Tip, Frank (2015). Precise Data Flow Analysis in the Presence of Correlated Method Calls. International Static Analysis Symposium. Lecture Notes in Computer Science. Vol. 9291. Berlin / Heidelberg, Germany: Springer Verlag. pp. 54–71. doi:10.1007/978-3-662-48288-9_4. ISBN 978-3-66248287-2.

अग्रिम पठन