मैंने कहा "लाइव कोड" क्योंकि मेरा मतलब टेक्स्ट स्रोत फ़ाइलों या स्रोत तारों से नहीं है, लेकिन आंशिक फ़ंक्शन/लैम्बडास से है। (मैं जानता हूँ कि Ruby1.8 के parseTree और सी # LINQ यह कर सकते हैं)क्या मुझे लाइव स्कैला कोड से एएसटी मिल सकता है?
एक partialFunction च पर विचार करें:
val f = (i: Int, j: Int) => (i + j) * 2
मुझे आशा है कि वहाँ कुछ उपकरण है इस तरह काम करता है:
getBodyAstFrom(f) //=> (Infix('*'), (Infix('+'), Id('i'), Id('j')), Val('2'))
मैं डॉन ' अर्थपूर्ण चीजों की परवाह नहीं करते हैं (संदर्भ पार्सिंग और implicits बहुत जटिल हैं, और मेरे लिए अनावश्यक), मुझे बस लाइव कोड से सिंटैक्स पेड़ की आवश्यकता है, क्या यह संभव है?
अन्य लोगों के कोड का निरीक्षण करने में समस्या हो सकती है, लेकिन मेरे अपने कोड के बारे में क्या? क्या निम्नलिखित चीजें संभव हैं?
val f = AstFunction(i: Int, j: Int){(i + j) * 2}
f(5, 6) //=> 22
f.ast //=> (Infix('*'), (Infix('+'), Id('i'), Id('j')), Val('2'))
यह कुछ संकलक, hmmmm में हैकिंग ...