एक पूर्ण नियंत्रण प्रवाह ग्राफ का निर्माण करना जो वास्तव में सभी भाषा समस्याओं को ध्यान में रखता है, यह दिखने से कठिन है। न केवल आपको यह पता होना चाहिए कि "मूलभूत ब्लॉक" प्रतीत होता है, लेकिन आपको फ़ंक्शन कॉल (आसान प्रकार की पहचान करना है, लेकिन लक्ष्य को पहचानना कठिन हो सकता है), जहां पीछे के दृश्य संचालन जैसे वर्ग प्रारंभकर्ता हो सकते हैं। और उन बिंदुओं के बारे में चिंता करने के लिए जहां अपवाद हो सकते हैं और जहां कोई अपवाद होता है तो नियंत्रण कहां जाता है।
आप सबसे अधिक भाषाओं को ध्यान से जांच करते हैं, तो वे भी भाव, में संगणना के मूल्यांकन के आदेश के बारे में स्पष्ट हो जाएगा और इस मायने रखती है अगर आप एक अभिव्यक्ति में दो दुष्प्रभाव; नियंत्रण प्रवाह ऑर्डर को प्रतिबिंबित करना चाहिए (या गैर-ऑर्डर, यदि यह परिभाषित नहीं किया गया है)।
शायद आप केवल मूल प्रवाह और सशर्त होने वाले नियंत्रण प्रवाह का एक अमूर्त चाहते हैं। यह स्पष्ट रूप से थोड़ा आसान है।
या तो मामले में (सरल CFG या पूर्ण CFG), आप संभव नियंत्रण प्रवाह लक्ष्य के लिए एक संदर्भ होने के प्रत्येक बिंदु पर एएसटी, चलने के लिए की जरूरत है (उदाहरण के लिए, इस तरह के बयानों अगर के रूप में ज्यादातर मामलों, के लिए, वहाँ दो हैं प्रवाह लक्ष्य: THEN और ELSE खंड)। प्रत्येक नोड पर, उस नोड को पर उचित नियंत्रण प्रवाह लक्ष्य से लिंक करें, संभवतः प्रवाह लक्ष्य (उदा।, जब आप आईएफ का सामना करते हैं) को प्रतिस्थापित करते हैं।
जावा (या सी) की पूर्ण भाषा अर्थशास्त्र के लिए ऐसा करने के लिए काफी बहुत काम है। आप बस उस टूल का उपयोग करना चाह सकते हैं जो ऑफ-द-शेल्फ की गणना करता है। http://www.semanticdesigns.com/Products/DMS/FlowAnalysis.html देखें जो हमारे उपकरणों से बाहर निकलने के लिए वास्तव में दिखता है।
स्रोत
2009-06-17 08:46:18
आपको प्रश्न में अपने प्रश्न की स्पष्टीकरण देना चाहिए, ताकि उत्तर आपके प्रश्न को प्रतिबिंबित कर सकें, और टिप्पणियों में न हो। – EfForEffort
"सीएफजी .... स्रोत से पेड़ का प्रतिनिधित्व प्राप्त करें ..." ?? यदि आप स्रोत कोड को पार्स करते हैं, तो आपको पेड़ का प्रतिनिधित्व मिलता है। एक सीएफजी एक ग्राफ उत्पन्न करेगा जो एएसटी नोड्स को एक साथ जोड़ता है। –