6

मुझे आश्चर्य है कि सामान्य के बाहर स्कैला कंपाइलर से बातचीत करने के लिए कितने तरीके मौजूद हैं "मेरे स्रोतों को संकलित करने के लिए इसे कमांड लाइन पर आमंत्रित करें"।स्कैला कोड में संकलक के साथ कैसे बातचीत करें?

क्या कोड का विश्लेषण करने, सार तत्व वाक्यविन्यास पेड़ बनाने या रनटाइम पर कोड संकलित करने के लिए लाइब्रेरी का उपयोग करने का कोई तरीका है?

+0

संभावित डुप्लिकेट [क्या मुझे लाइव स्कैला कोड से एएसटी मिल सकता है?] (Http://stackoverflow.com/questions/1962925/can-i-get-ast-from-live-scala-code) –

उत्तर

2

कुछ समय पहले मैंने लोड (संशोधित और आश्चर्य) करने के लिए scala.tools.nsc.Interpreter वर्ग का उपयोग किया था (अब वंचित)! - रनटाइम पर स्कैला कोड की व्याख्या करें। यदि आप अपने और व्याख्या किए गए कोड के बीच मूल्यों का आदान-प्रदान करना चाहते हैं तो इसकी bind विधि देखें। इसमें compileSources और compileString विधि भी है लेकिन मैंने अब तक उनमें से एक का उपयोग नहीं किया है। इसके अलावा मुझे एएसटी प्राप्त करने के लिए इस (या कुछ और) का उपयोग करने के बारे में कुछ नहीं पता है।

यह भी देखें: What is the purpose of the scala.tools.nsc package? और nsc package scaladoc

अपडेट: यह एएसटी सवाल का जवाब चाहिए (2009 से, पुराना हो सकता है): Scala AST in Scala

1

मैंने पहले भी यह किया है एक नया CompilerCommand उदाहरण बनाकर आदेश पंक्ति तर्क पार्स करने के लिए और अधिक महत्वपूर्ण बात, द्वारा द्वारा कभी-कभी भयानक Global कक्षा का विस्तार करना।

computeInternalPhases विधि, आप (जैसे ऊपर refchecks करने के लिए एक पार्सर/typechecker केवल के रूप में उपयोग करने के लिए) केवल संकलक के कुछ चरणों का उपयोग कर सकते हैं, और आप अपने खुद के चरणों (प्लगइन्स) जोड़ सकते हैं जैसा कि आप उम्मीद करेंगे अधिभावी तक । आप कक्षा फाइलों को उत्पन्न करने के लिए भी सभी तरह से जा सकते हैं।

तो हाँ, यह निश्चित रूप से संभव है। आखिरकार, संकलक स्वयं भी जेवीएम पर चलता है।

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