2013-03-13 7 views
6

मुझे पता है कि यह इसके लायक नहीं हो सकता है लेकिन केवल शिक्षा उद्देश्यों के लिए मैं जानना चाहता हूं कि क्या आपके स्वयं के कीवर्ड .NET भाषाओं में इंजेक्ट करने का कोई तरीका है या नहीं।क्या सी # या वीबी.नेट में कीवर्ड जोड़ना संभव है?

उदाहरण के लिए मैंने सोचा कि सी #+ एएसएम कीवर्ड सी # में होना अच्छा है।
याद रखें कि मैं एएसएम कीवर्ड को कार्यान्वित करने के बारे में बात नहीं कर रहा हूं लेकिन सी # में कीवर्ड जोड़ने का एक सामान्य तरीका है।

मेरे कल्पना कोड:

asm{ 
    mov ax,1 
    add ax,4 
} 

तो वहाँ इस लक्ष्य को हासिल करने के लिए एक तरीका है?
keyword{ } लागू करने वाले उत्तरों को इस प्रश्न के लिए पर्याप्त सूट।

+8

केवल तभी यदि आप अपना स्वयं का सी # कंपाइलर लिखने के लिए तैयार हैं। –

+0

मुझे पता है कि एकमात्र तरीका ज्ञात प्रकारों के लिए उपनाम असाइन करना है। –

+0

मुझे लगता है कि इसे "इंटरमीडिएट लैंग्वेज" टैग के कुछ प्रकार की ज़रूरत है ... सभी .NET आईएल कोड – LamonteCristo

उत्तर

4

इस समय यह संभव नहीं है। हालांकि, Roslyn नामक विकास में एक माइक्रोसॉफ्ट प्रोजेक्ट है जिसे "सेवा के रूप में संकलक" के रूप में सारांशित किया जा सकता है। यह आपको एपीआई के माध्यम से कंपाइलर के व्यवहार को बढ़ाने या संशोधित करने के लिए, अन्य चीजों के साथ, आपको अनुमति देता है।

जब रोज़लिन उपलब्ध हो जाता है, तो मुझे विश्वास है कि यह कुछ ऐसा होना चाहिए (सावधानी के साथ!) काफी कामयाब है।

+0

+1 अच्छी जानकारी। – SysDragon

+0

चूंकि रोज़लिन जारी किया गया है, क्या कोई अब बेहतर (अपडेटेड) उत्तर प्रदान कर सकता है? –

2

दुर्भाग्य से यह संभव नहीं है। आप किसी भी तरह से भाषाओं का विस्तार या परिवर्तन नहीं कर सकते हैं।

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

0

MSDN के अनुसार कीवर्ड पूर्वनिर्धारित हैं और इन्हें बदला नहीं जा सकता है। तो आप कोई भी जोड़ नहीं सकते हैं, क्योंकि आपको संकलक को उन्हें कैसे संभालना है, बताना होगा। अंदरूनी, नहीं, आप नहीं कर सकते।

2

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

आपके स्वयं के कीवर्ड/वाक्यविन्यास निर्दिष्ट करने के लिए कंपाइलर में कोई भी समर्थन नहीं है; आपको इसे पूरी तरह से कंपाइलर से स्वतंत्र करने की आवश्यकता होगी।

+0

अभी तक नहीं है, लेकिन जल्द ही होगा - रोज़लिन आपको चुनने पर कंपाइलर व्यवहार को संशोधित करने देगा। मैंने जो नमूने अब तक देखे हैं वे हैं ... अच्छी तरह से, बहुत डरावना, ज्यादातर! ;-) –

+0

वीएस 2012 – Apocatastasis

+1

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

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