2009-10-13 17 views
26

मैं सी # 3.0 में एक सी # 3.0 कंपाइलर लिखने की योजना बना रहा हूं। मैं पार्सर पीढ़ी के लिए व्याकरण कहां प्राप्त कर सकता हूं?मुझे सी # 3.0 व्याकरण कहां मिल सकता है?

अधिमानतः एक जो बिना एएनटीएलआर वी 3 के साथ काम करता है।

+6

आप जानते हैं कि हम पहले से ही एक कंपाइलर को मुफ्त में भेजते हैं जो सी # 3 को संकलित करता है, है ना? :-) लेकिन गंभीरता से, आप अपना खुद का निर्माण क्यों कर रहे हैं? बस मस्ती के लिए, या क्या कुछ व्यावसायिक उद्देश्य है? (कारण मैं पूछता हूं क्योंकि हम सीखने में बहुत रुचि रखते हैं कि "इस स्रोत कोड के लिए मुझे कुछ आईएल बाहर थूकने" के अलावा अन्य "सेवाएं" लोग हमारे कंपाइलर से क्या चाहते हैं।) –

+1

एरिक: मुख्य रूप से मस्ती के लिए। हालांकि, मैं समय-समय पर कुछ भाषा विचारों के साथ आता हूं कि मेरी इच्छा है कि मैं परीक्षण कर सकूं। –

+0

@ मेहरदाद, अगर आपको कुछ कोड मिल रहा है, तो क्या मैं इसके साथ खेल सकता हूं :) –

उत्तर

7

मैं ANTLR C# Grammar on CodePlex में भाग गया। यह एक अपेक्षाकृत नई परियोजना है और एएनटीएलआर 3.2 का उपयोग करता है। यह कहता है कि यह सी # 4.0 का समर्थन करता है और ग्रहण सार्वजनिक लाइसेंस (ईपीएल) के तहत लाइसेंस प्राप्त है।

मैंने इसके साथ थोड़ा सा खेला। इसमें अभिव्यक्ति युक्त परीक्षण फाइलों का एक गुच्छा है। यह lambdas, असुरक्षित संदर्भ का समर्थन करता है, ... जैसा कि आप स्वाभाविक रूप से उम्मीद करेंगे। यह एक सी # फ़ाइल पार्स करता है और आपको एक अमूर्त वाक्यविन्यास पेड़ देता है। आप जो कुछ भी चाहते हैं वह कर सकते हैं।

3

क्या आप this या this जैसे कुछ ढूंढ रहे हैं?

कृपया C# ANLTR grammar प्रश्न भी देखें।

+1

जुड़ा हुआ व्याकरण सी # 3.0 नहीं है। यह lambdas का समर्थन नहीं करता है। यह मेरे लिए विशेष रूप से महत्वपूर्ण है। –

+2

ऐसा लगता है कि व्याकरण में मौजूदा संरचनाओं के संदर्भ में लैम्बडास के लिए समर्थन जोड़ना काफी मामूली है, क्योंकि आपको केवल तर्क सूची को परिभाषित करने की आवश्यकता है।इसके लिए शायद एलएल (*) की आवश्यकता होगी, हालांकि, आप कुछ (जैसे एक ** 'को पार्स कर सकते हैं और यह नहीं जानते कि यह' (ए ** बी) '(यानी गुणा 'ए' 'बी') की अव्यवस्था का परिणाम, या एक लैम्ब्डा अभिव्यक्ति' (ए ** बी) => ', जब तक आप' => 'हिट नहीं करते हैं। चूंकि संकेत की मात्रा पर कोई सीमा नहीं है (पॉइंटर को सूचक .. ।), ऐसा लगता है कि यह मेरे लिए एलएल (*) है। लेकिन चूंकि एएनटीएलआर 3 एलएल (*) में ऑप्ट-इन का समर्थन करता है, यह कोई समस्या नहीं है। –

+0

@ पावेल: यह सिर्फ इतना नहीं है। यह जेनेरिक का समर्थन नहीं करता है। यदि मैं उचित रूप से अच्छा सी # 3.0 व्याकरण नहीं ढूंढ पाता हूं तो शायद मैं अपना खुद का पार्सर या व्याकरण लिखूंगा। –

3

COCO/R पर एक नज़र डालें ऐसा लगता है कि उनके पास C# 3.0 के लिए भाषा विनिर्देश है।

12

C# Language Specification पर एक नज़र डालें। अध्याय बी व्याकरण आपको व्याकरण मिलेगा।

+0

हाँ, निश्चित रूप से स्पेक में व्याकरण होता है। हालांकि, उस शब्द में व्याकरण * शब्द दस्तावेज़ * पूरे दस्तावेज़ के माध्यम से बिखरा हुआ है और पार्सर पीढ़ी के लिए अनुपयुक्त है। –

+8

यह * केवल * बिखरा हुआ नहीं है; हमारे पास एक ही स्थान पर पूरी चीज के साथ अंत में एक परिशिष्ट है। आप शायद सही हैं कि यह ठीक है डी को एक पार्सर जनरेटर के लिए काम करने के लिए कुछ संशोधन करें। –

+1

एरिक: ओह, उस खंड को नहीं देखा। इंगित करने के लिए धन्यवाद। –

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