मैं अपने खिलौने माई खिलौना भाषा -> एमएसआईएल कंपाइलर लिखने की कोशिश कर रहा हूं ताकि संकलक कैसे काम कर सकें। मुझे पार्सिंग और लेक्सिंग काम मिल गया है, मैंने अभिव्यक्ति के पेड़ों का निर्माण किया है और सिस्टम का उपयोग कर लिया है। लिंक्स.एक्सप्रेस एक्सप्रेशन ट्री एपीआई, मेरे पास एक वर्किंग दुभाषिया है। अब मैं कुछ असली एमएसआईएल असेंबली उत्सर्जित करना चाहता हूं।एक नई असेंबली में एक .NET अभिव्यक्ति वृक्ष को जोड़ना
समस्या यह है कि, मैं यह नहीं समझ सकता कि वास्तव में इन विधानसभाओं को कैसे बनाया जाए। MethodBuilder कक्षा केवल कच्चे एमएसआईएल विधि निकायों को स्वीकार करती है, इसलिए मुझे अपने अभिव्यक्ति पेड़ का कच्चा एमएसआईएल प्राप्त करना होगा। कॉलिंग Expression.Compile() एक कार्यकारी प्रतिनिधि को लौटाता है लेकिन मैं इसके अंतर्निहित एमएसआईएल प्राप्त करने में सक्षम नहीं हूं। कॉलिंग MethodInfo.GetMethodBody() एक अवैधऑपरेशन अपवाद फेंकता है क्योंकि यह उस विशिष्ट बाल वर्ग में लागू नहीं किया गया है।
मैं उस प्रतिनिधि को एक नई असेंबली में कैसे जोड़ सकता हूं?
ध्यान रखें कि इस विधि में कुछ सीमाएं हैं, जैसे गैर स्थैतिक तरीकों को संकलित करने में असमर्थता। –
@ 280Z28: सौभाग्य से, मेरी खिलौना भाषा ऑब्जेक्ट उन्मुख नहीं है, इसलिए यह कोई समस्या नहीं होगी। –
क्या आप उचित 'विधिबिल्डर' को कैसे प्राप्त कर सकते हैं - मुझे एहसास है कि यह बहुत समय पहले था :) –