रिपर बॉक्स के बाहर एमआरआई 1.9 में शामिल है।
ruby-1.9.2-p180 :004 > require 'ripper'
=> true
ruby-1.9.2-p180 :005 > Ripper.sexp("def a; end")
=> [:program, [[:def, [:@ident, "a", [1, 4]], [:params, nil, nil, nil, nil, nil], [:bodystmt, [[:void_stmt]], nil, nil, nil]]]]
1,8 में, रूबी एएसटी traversing द्वारा कोड निष्पादित करता है, तो यह एक दिया विधि/ब्लॉक के लिए एएसटी प्राप्त करने के लिए संभव है। 1.9 में ऐसा नहीं है; कोड को पहले पार्स किया गया है, फिर YARV बाइटकोड में परिवर्तित किया गया है, और उसके बाद निष्पादित किया गया है। स्रोत नहीं, न ही एएसटी अनुवाद चरण के बाद रखा जाता है, और बाद वाला उलट नहीं है; इसलिए आप 1.9 में ब्लॉक के लिए एएसटी नहीं प्राप्त कर सकते हैं।
मैं ब्लॉक से एएसटी को पकड़ने के लिए रिपर का उपयोग कैसे करूं? मुझे लगता है कि मुझे किसी भी तरह ब्लॉक के लिए स्रोत कोड प्राप्त करना होगा। –
जानकारी के लिए धन्यवाद! ऐसा लगता है कि आपको काम करने के लिए 'आवश्यकता' रिप्पर की आवश्यकता है। –
ओह। क्षमा करें, मुझे आपकी पोस्ट को अधिक सावधानी से पढ़ना चाहिए था। मैंने जवाब अपडेट कर लिया है। – whitequark