2010-10-24 20 views
9

मैं C# में लिखे गए एक संपादक में वाक्यविन्यास हाइलाइटिंग और इंटेलिजेंस का समर्थन करने के लिए कोड फ़ाइलों को पार्स करने के तरीकों, टूल और तकनीकों का शोध कर रहा हूं।कोड पार्सिंग सी #

क्या किसी के पास कोई विचार/पैटर्न & प्रथाओं/उपकरण/तकनीक के लिए तकनीक है।

संपादित करें: किसी के लिए जानकारी का एक अच्छा स्रोत रुचि:

पार्सिंग संदर्भ मुक्त व्याकरण ISBN 978-3-642-14845-3

+0

की [पार्सर संभव डुप्लिकेट टाइप वाक्य रचना हाइलाइटिंग और स्वत: पूर्ण करने प्रदान करने के लिए है ] (http://stackoverflow.com/questions/81406/parser-for-c) – Gabe

+1

क्या आप सी # को पार्स करने या सी # में एक पार्सर लिखने की कोशिश कर रहे हैं? – Gabe

+1

@Gabe, दोनों। मैं सी # में एक पार्सर लिखने की कोशिश कर रहा हूं जो एक्सएमएल को पार्स करेगा, सी # उम्मीद है कि कुछ और :) :) – sTodorov

उत्तर

3

दो बुनियादी aproaches हैं:
1) संपूर्ण समाधान और सब कुछ संदर्भित करें ताकि आप कोड
2 में शामिल सभी प्रकारों को समझ सकें 2) स्थानीय रूप से पार्स करें और यह अनुमान लगाने के लिए अपना सर्वश्रेष्ठ प्रयास करें कि किस प्रकार आदि हैं।

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

  • पार्स:

    (1) तो आप (कठिनाई के घटते क्रम में) में से एक करने की ज़रूरत है ऐसा करने के लिए। यदि आप तृतीय पक्ष असेंबली का संदर्भ देते हैं तो संभव नहीं है।

  • संकलित कोड पर प्रतिबिंबित करें जिसका उपयोग आप स्रोत को पार्स करते समय उपयोग कर सकते हैं।
  • उपयोग मेजबान आईडीई है (तो उपलब्ध है, तो - ऐसा नहीं अपने मामले में लागू हो) कोड तत्व इंटरफेस जानकारी प्रदान करने के
+1

ओपी के लिए व्याकरण बनाने के लिए कुछ भी पार्स कर सकता है ओपी कई भाषाओं को पार्स करना चाहता है। वास्तव में उन भाषाओं के लिए काम करने वाले व्याकरण प्राप्त करने की "छोटी" समस्या है जिन्हें आप संसाधित करना चाहते हैं। विरासत लैंगुगों के लिए ऐसा करना मुश्किल है, क्योंकि मानक समितियां उन्हें गुओ के साथ सजा रही हैं; आईबीएम एंटरप्राइज़ कोबोल या फोरट्रान 2005 देखें। आधुनिक लैंगुग थोड़ा आसान हैं लेकिन यहां तक ​​कि उनके पास सामान जोड़ने का दबाव भी है; आधुनिक VB.net पार्सिंग का प्रयास करें। मुझे भाषाओं की एक विस्तृत श्रृंखला (जिसमें मैंने उल्लेख किया है) के लिए यूनिफाइड इंस्टीट्यूट का उपयोग करके पार्सर्स बनाने में 15 साल हैं और मुझे अभी तक शायद ही नहीं किया गया है: - { –

+1

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

+0

@Ira जिस काम को आप पूरा करने की कोशिश कर रहे हैं वह बहुत गंभीर है। मैं आपको इसके साथ सभी सफलता की कामना करता हूं। हालांकि, मैं जो शोध कर रहा हूं वह ज्यादातर सी #, रूबी, पायथन, वीबी के लिए समर्थन है। नेट, जावा। मैं केवल पार्सिंग विरासत भाषाओं – sTodorov

6

परे सी # के लिए मेरा पसंदीदा पार्सर विडंबना है: http://irony.codeplex.com/ - मैं इसे एक दो बार इस्तेमाल किया है बड़ी सफलता

यहाँ के साथ एक प्रविष्टि है एक विकिपीडिया पृष्ठ कई और अधिक: http://en.wikipedia.org/wiki/Compiler-compiler

+0

क्या आयरनी एकाधिक भाषा पार्सिंग का समर्थन करता है? – sTodorov

+0

आयरनी पार्सर्स बनाने के लिए है, इसलिए हाँ - यह –

1

आपको कम से कैसे http://www.icsharpcode.net/ यह किया एक बार देख ले सकता है की जरूरत है। वे एक किताब सिर्फ इतना है कि, Dissecting a C# Application: Inside SharpDevelop कर लिखा है, यह भी एक अध्याय

नामक एक पार्सर लागू के रूप में उपयोगकर्ताओं सी # के लिए

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