2011-04-24 9 views
10

कंपाइलर्स पार्स स्रोत कोड और एक सार वाक्यविन्यास पेड़ का निर्माण। एक अमूर्त सिंटैक्स पेड़ रिटर्न पॉइंटर्स बनाने के लिए उपयोग किए जाने वाले फ़ंक्शन संश्लेषित गुण का गठन करते हैं। वे क्या हैं और वे विरासत विशेषताओं से अलग कैसे हैं?एक सार वाक्यविन्यास पेड़ बनाने के संदर्भ में संश्लेषित गुण क्या हैं?

संपादित करें: मुझे नहीं पता कि यह मदद कर सकता है, लेकिन मैंने मूल रूप से फ्रांसीसी संदर्भ में इन शर्तों के बारे में सुना है: गुणों को समेकित करता है, गुणों का श्रेय देता है।

उत्तर

19

विशेषताएँ केंद्रीय रुचि के कुछ से जुड़े अतिरिक्त मूल्य हैं। एएसटी के मामले में, आप उन्हें प्रत्येक एएसटी नोड से जुड़े जोड़े (attribute_name, attribute_value) के रूप में सोच सकते हैं, जहां विशेषता का नाम कुछ रोचक तथ्य-प्रकार से मेल खाता है, और विशेषता मान उस तथ्य की वास्तविक स्थिति से मेल खाता है (उदाहरण के लिए , "(constants_in_subtree_count, 12)")।

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

समन्वित गुण जिनकी मूल्य बच्चों नोड से विशेषता मान से गणना की जाती है कर रहे हैं, और ऊपर पेड़ पारित कर दिया जा रहा है। अक्सर, संश्लेषित गुणों के मान माता-पिता नोड के लिए एक विशेषता उत्पन्न करने के लिए संयुक्त होते हैं। यदि एएसटी नोड में दो बच्चे हैं, जिनमें से प्रत्येक के पास अपने गुण हैं (constants_in_subtree_count, 5) और (constants_in_subtree_count, 7), फिर उन गुणों को पारित करके, माता-पिता अपनी संबंधित विशेषता (constants_in_subtree_count, 12) की गणना कर सकते हैं।

विरासत गुण माता-पिता से बच्चे को पास किए गए गुण हैं। यदि किसी फ़ंक्शन एएसटी की रूट "जानता है" फ़ंक्शन रिटर्न प्रकार एक विशेषता के रूप में (return_type, integer) है, तो यह फ़ंक्शन प्रकार को फ़ंक्शन रूट के बच्चों को पास कर सकता है, उदा। समारोह शरीर के लिए। उस पेड़ में गहराई से कुछ जगह एक वास्तविक वापसी बयान है; यदि यह विरासत विशेषता (return_type, X), प्राप्त करता है तो यह जांच सकता है कि यह कंप्यूटिंग का परिणाम सही प्रकार है।

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

इस विचार का मूल्य यह स्वचालन द्वारा समर्थित एक आयोजन सिद्धांत प्रदान करता है, जिसका उपयोग नियमित रूप से एएसटी के बारे में कई रोचक चीजों की गणना करने के लिए किया जा सकता है। अन्यथा आप विज्ञापन कोड कोड का उपयोग कर उन सभी सामानों को कोड प्राप्त कर सकते हैं।

हमारे DMS Software Reengineering Toolkit एक एएसटी हेरफेर प्रणाली है (वास्तव में स्रोत करने वाली स्रोत प्रोग्राम परिवर्तनों) है कि भारी समानांतर विशेषता मूल्यांकन का उपयोग करता ASTs अधिक उपयोगी विश्लेषण के सभी प्रकार की गणना करने के: (जैसे पारंपरिक मीट्रिक, प्रतीक टेबल, प्रकार के चेक रिटर्न टाइप चेक मैंने ऊपर वर्णित किया है), कोड से नियंत्रण और डेटा प्रवाह निष्कर्षण, साथ ही साथ अन्य आसानी से वर्णित लेकिन उपयोगी परिणाम उपट्रीज़ पर गणना ("इस अभिव्यक्ति में साइड इफेक्टिंग असाइनमेंट की सूची")। समानांतर क्यों?खैर, subtrees में विशेषता computations अनिवार्य रूप से स्वतंत्र हैं, तो समांतरता पहले से ही वहाँ है, और जब आप वास्तव में बड़े पेड़ प्रदर्शन मामलों के साथ सौदा करते हैं। डीएमएस अक्सर संकलन इकाइयों के हजार से संबंधित है, प्रत्येक एक (संभवतः बड़ा) एएसटी उत्पादन करता है।

+2

उदाहरणों के लिए धन्यवाद। यह एक महत्वपूर्ण बात है जिसने मुझे इसे समझने में मदद की। मेरे प्रोफेसरों की स्लाइड और विकिपीडिया दोनों कुछ छोड़ गए। – d1str0

संबंधित मुद्दे