gpt4 book ai didi

ruby - 从 Ruby block 中提取 AST

转载 作者:数据小太阳 更新时间:2023-10-29 06:59:28 25 4
gpt4 key购买 nike

是否可以从 Ruby 本身获取 block 的 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 中,Ruby 通过遍历 AST 来执行代码,因此可以获得给定方法/ block 的 AST。在 1.9 中不是这样;代码首先被解析,然后转换为 YARV 字节码,然后执行。在翻译步骤之后不保留源代码,也不保留 AST,后者是不可逆的;因此你无法在 1.9 中获取 block 的 AST。

关于ruby - 从 Ruby block 中提取 AST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6894763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com