2012-05-21 15 views
7

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

आम तौर पर, मैं कोड स्ट्रिंग से कोड के एक अमूर्त प्रतिनिधित्व को विकसित करने के पीछे की तकनीकों के बारे में जानना चाहता हूं। अधिक विशेष रूप से, मैं इस एएसटी का उपयोग सी # सिंटैक्स हाइलाइटिंग करने में सक्षम होना चाहता हूं। (मुझे एहसास है कि सिंटैक्स हाइलाइटिंग को एएसटी की आवश्यकता नहीं है, लेकिन यह कुछ "कंपाइलर" -वेल तकनीक सीखने का एक अच्छा मौका लगता है।)

अगर मैं यह प्रश्न थोड़ा व्यापक हूं, तो मैं क्षमा चाहता हूं, लेकिन मैं हूं सुनिश्चित नहीं है कि और कैसे पूछना है।

धन्यवाद!

+0

एफडब्ल्यूआईडब्ल्यू, यदि आप कंपाइलर्स पर शुरू करने के लिए एक अच्छी जगह चाहते हैं, तो ड्रैगन पुस्तक (आईएमएचओ) एक महान पुस्तक है। http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools –

+0

@ जेम्स मैनिंग: धन्यवाद, मैं इसे देख लूंगा! –

उत्तर

12

सबसे पहले आपको यह समझने की आवश्यकता है कि पार्सिंग क्या है, और कौन सा सार वाक्यविन्यास पेड़ हैं। इसके लिए, आप पहली बार देखने के लिए Wikipedia on abstract syntax trees से परामर्श कर सकते हैं।

आपको वास्तव में एक कंपाइलर टेक्स्ट बुक के साथ कुछ समय बिताने की जरूरत है यह समझने के लिए कि अमूर्त सिंटैक्स पेड़ पार्सिंग से कैसे संबंधित हैं, और पार्सिंग के दौरान बनाया जा सकता है; क्लासिक संदर्भ अहो/उलमन/सेठी की "कंपाइलर्स" पुस्तक है (आसानी से वेब पर पाई जाती है)। आपको Are there any "fun" ways to learn about Languages, Grammars, Parsing and Compilers? निर्देशक का SO उत्तर मिल सकता है।

एक बार जब आप समझते हैं कि एक साधारण व्याकरण के लिए एएसटी कैसे बनाया जाए, तो आप अपना ध्यान सी # जैसे कुछ पर बदल सकते हैं। यहां मुद्दा बहुत बड़ा है; 20 व्याकरण नियमों के साथ खिलौना भाषा के साथ खेलना एक बात है। यह कई सौ या हजार नियमों के व्याकरण के साथ काम करने के लिए एक और है। अनुभव छोटे लोगों को यह समझने में बहुत आसान लगेगा कि बड़े लोगों को एक साथ कैसे रखा जाता है, और उनके साथ कैसे रहना है।

शायद आप अपना स्वयं का सी # व्याकरण नहीं बनाना चाहते हैं (या सी # मानक से एक को लागू करना); यह काफी काम है। आप उपलब्ध टूल्स प्राप्त कर सकते हैं जो आपको सी # एएसटी (रोसलीन का पहले ही उल्लेख किया जा चुका है; एएनटीएलआर में सी # पार्सर है, वहां कई और हैं)।

यह सच है कि आप सिंटैक्स हाइलाइटिंग के लिए एएसटी का उपयोग कर सकते हैं (हालांकि शायद यह स्लेजहैमर के साथ एक gnat मार रहा है)। अधिकांश लोग इस बारे में ज्यादा नहीं सोचते हैं (लेकिन संकलक पुस्तकें जोर देती हैं), आपके पास एएसटी होने के बाद क्या होता है; ज्यादातर वे खुद से उपयोगी नहीं हैं। आपको कुछ भी दिलचस्प करने के लिए वास्तव में बहुत अधिक मशीनरी की आवश्यकता है। इसे बार-बार दोहराने की बजाय (मैं एक ही तरह के प्रश्न देख रहा हूं), आप अधिक जानकारी के लिए Life After Parsing पर अपनी चर्चा देख सकते हैं।

+0

धन्यवाद, सिर्फ उस प्रकार का उत्तर जिसे मैं ढूंढ रहा था! –

+0

मुझे पता है कि यह थोड़ा देर हो चुकी है, लेकिन क्या आपने [गोल्ड पार्सर] (http://goldparser.org/) देखा है? यह कार्यक्रम आपको बीएनएफ नियमों का उपयोग करके व्याकरण बनाने की अनुमति देता है और जीन पार्स पेड़ को संसाधित करने के लिए किसी भी भाषा में कंकाल कोड उत्पन्न करता है, यानी जब आप पार्स पेड़ चलते हैं या कोड उत्पन्न करते हैं तो कोड की व्याख्या करें। – Intrepid

+0

@ माइक क्लार्क: मैंने सोचा कि गोल्ड केवल पार्स किया गया है। यह वास्तव में एक पार्स पेड़ बनाता है? इसका कोई सबूत नहीं है कि मैं वेब पेजों से देख सकता हूं http://goldparser.org/doc/index.htm –

1

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

http://blogs.msdn.com/b/visualstudio/archive/2011/10/19/introducing-the-microsoft-roslyn-ctp.aspx

इसके अलावा, मैं compilers पर एक पाठ्यपुस्तक सुझाव देते हैं।

+0

मुझे लगता है कि Roslyn एक * सार * वाक्यविन्यास पेड़ का एक अच्छा उदाहरण नहीं है। इसके वाक्यविन्यास पेड़ में प्रत्येक अर्धविराम, टिप्पणी और सफेद स्थान होता है, जो इसे एक बहुत ही ठोस वाक्यविन्यास पेड़ बनाता है। लेकिन अगर सिंटैक्स हाइलाइटिंग लक्ष्य था, तो रोज़लिन एक अच्छी पसंद होगी। – svick

+0

कोई विशेष पाठ्यपुस्तक जिसे आप अनुशंसा कर सकते हैं? मैं वास्तव में तैयार किए गए समाधान की तलाश नहीं कर रहा हूं, मैं खुद को विकसित करके खुद को संपादित करना चाहता हूं। –

2

आप शायद फिल Trelford द्वारा इस बात पर एक नज़र रखना चाहिए:

Write your own compiler in 24 hours

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

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