2009-02-17 11 views
5

मुझे एक शौक परियोजना के लिए एक विचार है जो कुछ कोड विश्लेषण और हेरफेर करता है। इस परियोजना को किसी दिए गए स्रोत फ़ाइल के ठोस और अमूर्त वाक्यविन्यास पेड़ दोनों की आवश्यकता होगी। इसके अतिरिक्त, दो पेड़ों के बीच द्वि-दिशात्मक संदर्भ सहायक होंगे। मैं अपने स्वयं के लेक्सर और पार्सर बनाने के लिए व्याकरण को लिखने के काम से बचना चाहता हूं।ठोस और अमूर्त वाक्यविन्यास पेड़ के लिए मानक प्रारूप

क्या ठोस या अमूर्त वाक्यविन्यास पेड़ का वर्णन करने के लिए कोई मानक प्रारूप है? क्या किसी भी व्यापक रूप से उपयोग की जाने वाली टूल चेन इन स्वरूपों को आउटपुट करने का समर्थन करते हैं?

मेरे पास एक विशेष लक्ष्य प्रोग्रामिंग भाषा नहीं है। कोई भी लोकप्रिय प्रोटोटाइप के लिए करेगा, लेकिन मैं एक को अच्छी तरह से जानता हूं: पायथन, सी #, जावास्क्रिप्ट, या सी/सी ++।

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

धन्यवाद!

+0

@vs से एएनटीएलआर उत्तर आकर्षक है, लेकिन एक मानक प्रारूप जो कोड जनरेशन जटिलता को छोड़ देता है वह बेहतर हो सकता है। मैं उत्तर को चिह्नित करने से पहले एक दिन या उससे भी ज्यादा इंतजार करूंगा। –

उत्तर

2

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

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

मुझे लगता है कि हमारे छात्रों में से एक बार OpenArchitectureWare के साथ खेला जाता है और एक्लिप्स-आधारित, जेनरेटेड संपादक से सिंटैक्स पेड़ (ऊपर उल्लिखित यूएमएल मॉडल से संबंधित नहीं) में परिवर्तन प्राप्त करने में कामयाब रहा, लेकिन मुझे नहीं पता इसके बारे में विवरण।

आप ANTLR's पेड़ व्याकरण को भी देखना चाहते हैं।

+0

एएनटीएलआर आशाजनक लग रहा है! "व्याकरण सूची" एक महान प्रारंभिक बिंदु की तरह प्रतीत होता है। मैं कल गहराई से देख लूंगा। मेरा लक्ष्य पेड़ डेटा संरचना है, मैं रनटाइम से मानता हूं। –

4

शोध समुदाय ने निर्णय लिया कि ग्राफ़ एक्सचेंज एक प्रोग्राम विश्लेषण टूल से दूसरी जानकारी में जानकारी लेते समय सही काम करना था। देखें http://www.gupro.de/GXL

हाल ही में, ओएमजी ने सार सिंटेक्स पेड़ों को बदलने के लिए एक मानक परिभाषित किया है। http://www.omg.org/spec/ASTM/1.0/Beta1/

यह समस्या बार-बार हल हो रही है। वर्षों में किए गए आधा दर्जन "टूल बस" प्रस्ताव हैं, जो सभी ने हल किया है, किसी ने भी उद्योग को पीछे छोड़ दिया है। समस्या यह है कि ए) का उपयोग करके एएसटी का प्रतिनिधित्व करना आसान है [किसी भी प्रकार की घोंसले नोटेशन [LISP, जैसे एक्सएमएल जैसे ब्रांड्स, ...] इसलिए लोग आसानी से अपना समाधान हल करते हैं, और बी) एक टूल के बदले में एक एएसटी दूसरे के साथ, वे दोनों को एएसटी नोड्स के अर्थ पर अनिवार्य रूप से सहमत होना है; लेकिन अधिकांश एएसटी गलती से प्रत्येक उपकरण द्वारा उपयोग की जाने वाली विशेष व्याकरण/पार्सिंग तकनीक से व्युत्पन्न होते हैं, और लगभग हमेशा उपकरणों के बीच असहमति होती है। तो, मैंने बहुत कम टूल देखे हैं जो एएसटी का अर्थपूर्ण रूप से आदान-प्रदान करते हैं।

आप एक शौक बात कर रहे हैं, मैं पेड़ की एक तुतलाना की तरह एन्कोडिंग, जहां प्रत्येक नोड निम्न स्वरूप है साथ रहना चाहते हैं: (...) इसकी उत्पन्न करने के लिए आसान है, और करने के लिए आसान पढ़ें।

मैं professional tool to manipulate programs पर काम करता हूं। अगर हम ने एएसटी प्रिंट किया है, तो हम उपर्युक्त करते हैं। अधिकतर व्यक्ति ASTs अभी तक भी व्यवहार में को देखने के लिए जटिल, तो हम शायद ही कभी बाहर पूरे एएसटी एक नोड और कुछ बच्चों को गहरी प्रिंट, सबसे अच्छे रूप केवल हैं। हमारा टूल किसी के साथ एएसटी का आदान-प्रदान नहीं करता है (ऊपर दिए गए कारणों को देखें :) लेकिन केवल मेमोरी में इसे ठीक से बना रहा है, विश्लेषण कारणों या परिवर्तन कारणों के लिए, और फिर या तो इसे हटा रहा है (इसकी आवश्यकता नहीं है इसे कहीं भी भेजें) या पेड़ से मूल भाषा पाठ को पुन: उत्पन्न करना। [बाद वाला मतलब है कि आपको एंटी-पार्सिंग या "सुंदरप्रिंटिंग" तकनीक की आवश्यकता है]

+0

"यह समस्या बार-बार हल हो रही है। आधे दर्जन "टूल बस" प्रस्ताव हैं ": ओएमजी के एएसटीएम पर विशेष रूप से आपकी राय क्या है? साइड नोट: एएसटीएम एक प्रस्ताव नहीं है, अब यह एक कल्पना है। Http://www.omg.org/spec/ASTM/ देखें। – Hibou57

+0

हां, मैंने एएसटीएम विचार को देखा क्योंकि यह 2005 में मानक बैक के रूप में विकास में शुरू हुआ था। उन्होंने "एडीडी" जैसे अमूर्त ऑपरेटरों के साथ "सामान्य सार" वाक्यविन्यास पेड़ (जीएएसटीएम) को परिभाषित करने की कोशिश की लेकिन आप जल्द ही यह खोज लें कि क्या फोर्ट्रान में "एडीडी" का मतलब है कि जावा में "एडीडी" (तारों को संभाल सकता है) या एपीएल/जे में एडीडी (आयाम एम के मैट्रिक्स के आयाम को आयाम एन के मैट्रिक्स के समान) के समान नहीं है। तो आप पृथ्वी पर कैसे एक सामान्य विश्लेषक लिखते हैं? ... –

+0

लेकिन हर किसी की तरह (टूल बस लोगों) की तरह, उन्होंने खोज की (एक और बार) कि उन्हें सिंटैक्स पेड़ों की आवश्यकता होती है जो विशिष्ट पार्सर्स ("एसएएसटीएम") से मेल खाते हैं क्योंकि कोई पार्सर सीधे जीएसटीएम उत्पन्न नहीं करता है, और अनुवाद करने का प्रयास करता है विशिष्ट वाक्यविन्यास पेड़ SASTM और GASTM के बीच बस बहुत कठिन है। मुझे क्या पता है कि मेरे पास ऐसे टूल्स हैं जो सी ++ 11 सहित पार्सिंग, सुंदर प्रिंटिंग और ट्रांसफॉर्मेशन सहित कुछ 40 भाषाओं को संसाधित करते हैं, और एएसटीएम का उपयोग अभी भी बहुत ज्यादा नहीं किया जा रहा है। क्या आप इसके आधार पर किसी भी उपकरण या उत्पादों का नाम दे सकते हैं? –

1

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

विशिष्ट मानकों के लिए, ईरा बैक्सटर पहले से ही ASTM, एक और एक, का उल्लेख किया है, हालांकि यह बल्कि, प्रोग्रामिंग भाषा (तर्क भाषाओं) का एक विशिष्ट प्रकार लक्षित करता a standard for semantic/conceptual graph, ISO‑IEC 24707 2007 रूप में जाना जाता है।

नहीं अपने आप ही एक मानक है, लेकिन उस बात के बारे में एक पेपर: Towards Portable Source Code Representations Using XML

मैं किसी भी प्रभावी ढंग से इस्तेमाल मानक पता नहीं है (इस क्षेत्र में, कि हमेशा घर का बना खाना पकाने हर जगह है), मैं अभी भी इस विषय में दिलचस्पी रखता हूँ।

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