2011-08-01 20 views
7

क्या रूबी से ब्लॉक के एएसटी को पकड़ना संभव है?रूबी ब्लॉक से एएसटी निकालें

मैंने ParseTree और ruby_parser दोनों पर एक नज़र डाली है, लेकिन दोनों रूबी 1.9.2 के लिए स्केची समर्थन (मैंने जो पढ़ा है) से प्रतीत होता है। मुझे ऐसा कुछ चाहिए जो 1.9.2 के साथ अच्छी तरह से काम करता है।

उत्तर

7

रिपर बॉक्स के बाहर एमआरआई 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 में ब्लॉक के लिए एएसटी नहीं प्राप्त कर सकते हैं।

+0

मैं ब्लॉक से एएसटी को पकड़ने के लिए रिपर का उपयोग कैसे करूं? मुझे लगता है कि मुझे किसी भी तरह ब्लॉक के लिए स्रोत कोड प्राप्त करना होगा। –

+0

जानकारी के लिए धन्यवाद! ऐसा लगता है कि आपको काम करने के लिए 'आवश्यकता' रिप्पर की आवश्यकता है। –

+0

ओह। क्षमा करें, मुझे आपकी पोस्ट को अधिक सावधानी से पढ़ना चाहिए था। मैंने जवाब अपडेट कर लिया है। – whitequark

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