2013-02-08 11 views
5

मैं सी # से एक्सएमएल को कन्वर्ट करने के विकल्प ढूंढ रहा हूं और फिर सी # को फिर से बेकार कर रहा हूं। किसी को इसके लिए किसी भी मौजूदा समाधान के बारे में पता है? मुझे लगता है कि रोज़लिन सिंटेक्स ट्री एक्सएमएल-सीरियलज़ेबल नहीं है। मैं यह भी मानता हूं कि एक वाक्यविन्यास के लिए एक एक्सएमएल-सीरिएलाइज़र बनाना काफी बड़ा उपक्रम होगा। लेकिन शायद नहीं?XML Rosialn SyntaxTree serialize?

मुझे इसकी आवश्यकता क्यों है? मैं एक्सएलएल-मॉडल से xsl से syntaxtree-xml और फिर C# (या हो सकता है vb) के माध्यम से कोड जेनरेट करना चाहता हूं।

मैं सीधे एक्सएसएल से सी # उत्पन्न नहीं करना चाहता (ऐसा किया जा सकता है लेकिन मुझे यह आदर्श नहीं लगता)। मुझे एक्सएसएल की आवश्यकता है क्योंकि मैं एक्सएमएमएल और एचटीएमएल को एक्सएमएल-मॉडल से उत्पन्न करने जा रहा हूं और मैं भी आवश्यक इत्यादि के पीछे कोई भी कोड उत्पन्न करने में सक्षम होना चाहता हूं।

मुझे टी 4-टेम्पलेट्स के बारे में पता है लेकिन अभी मैं मैं विभिन्न कारणों से अन्य विकल्पों को देख रहा हूं।

+0

क्या आप सिंटैक्स पेड़ को एक्सएमएल में क्रमबद्ध करना चाहते हैं, या बस deserialize? अथवा दोनों? – svick

+0

दोनों अच्छे होंगे। –

+0

क्यों? आपके द्वारा उल्लिखित उपयोग मामले में केवल deserialization की आवश्यकता होती है। और मुझे लगता है कि serialization सही ढंग से करना अधिक कठिन होगा, क्योंकि इसका मतलब है कि आपको सबकुछ सी # समर्थनों को संभालना होगा। यदि आपके पास केवल deserialization था, तो आपको अपने एक्सएमएल में सी # कर सकते हैं सब कुछ का प्रतिनिधित्व करने की चिंता करने की आवश्यकता नहीं होगी। – svick

उत्तर

3

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

डिब्बाबंद समाधान के लिए, C# AST in XML देखें। उस समाधान के लिए एक समान पढ़ने-एक्सएमएल-टू-मेक-एएसटी की भी आवश्यकता होगी।

शायद आप पेड़ों के लिए एक्सएमएल का उपयोग नहीं करना चाहते हैं; ऐसी फाइलें आम तौर पर बहुत बड़ी होती हैं। What would an AST (abstract syntax tree) for an object-oriented programming language look like? देखें।

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