7
是否有可能從Ruby本身獲取塊的AST?從Ruby塊中提取AST
我已經看過ParseTree和ruby_parser,但他們似乎都有粗略的支持(從我讀過的)Ruby 1.9.2。我需要一些與1.9.2一致的東西。
是否有可能從Ruby本身獲取塊的AST?從Ruby塊中提取AST
我已經看過ParseTree和ruby_parser,但他們似乎都有粗略的支持(從我讀過的)Ruby 1.9.2。我需要一些與1.9.2一致的東西。
Ripper包含在開箱即用的MRI 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,紅寶石通過遍歷AST執行的代碼,所以能夠得到AST對於給定的方法/塊。在1.9中並非如此;代碼首先被解析,然後轉換爲YARV字節碼,然後執行。在翻譯步驟之後不是來源,也不保留AST,後者不可逆;因此你不能在1.9中獲得一個塊的AST。
我將如何使用Ripper從塊中獲取AST?我假設我必須以某種方式獲取該塊的源代碼。 –
感謝您的信息!好像你需要做'需要'ripper''才能工作。 –
哦。對不起,我應該更仔細地閱讀你的文章。我已經更新了答案。 – whitequark