BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

ParseTree前路茫茫

| 作者 Werner Schuster 关注 9 他的粉丝 ,译者 胡振波 关注 0 他的粉丝 发布于 2009年4月27日. 估计阅读时间: 3 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

ParseTree是一个用来访问Ruby代码解析树的程序库,这个Ruby代码可以是源代码,也可以是已经加载到解释器的代码(即实时访问)。
ParseTree的开发者之一,Ryan Davis,在最近的一篇博客中宣布了ParseTree的去留

ParseTree在ruby 1.9上已经玩完了,我们也没打算让它在ruby 1.9上再运行起来。

主要原因在于ruby 1.9内部实现的改变,我们也试图获取一些钩子或者能让ParseTree工作的其它方法,但迟迟没有得到回复。

如果你想用ParseTree来获取一个运行时方法/块/过程的抽象语法树,那么我们只好说抱歉了。如果你只是想用ParseTree来做静态分析,那么你可以在一分钟内切换到ruby_parser,它是ParseTree的一个最佳替代者。


所以我们看到,ParseTree在Ruby 1.8.x上能很好地工作,但它不再提供对Ruby 1.9.1的支持。尽管我们也能通过一些办法,让ParseTree的部分功能工作起来。幸运的是,Ruby 1.9.x带来了Ripper,一个用来解析Ruby代码和分析语法树的工具。

ruby_parser是Ryan Davis编写的另一个Ruby语法分析器,它是纯Ruby实现的,并且在输出上和ParseTree保持一致。如果只是对源代码进行静态分析,那么最好的选择就是切换到ruby_parser,因为你不需要更改任何代码。Ruby_parser还能提供抽象语法树节点的源码位置,这是Ruby代码分析或者代码转换工具的必需信息。使用ruby_parser可以让这些工具得以在大多数Ruby实现上工作,而ParseTree只能在MRI上工作(虽然在一个接近完成版本的JRuby上也可以,但还是缺少一些运行时特性)。

但跟ruby_parser相比,ParseTree有一个重要特性,就是能实时访问解析树。有些库利用这个特性来对运行时Ruby代码进行分析。比如Merb的action arguments,一个用来分析方法形参的工具。这个功能已经被移植到JRuby上(无需ParseTree),往Ruby 1.9.1上的移植也已经通过methopara项目完成。Methopara是YARV创建者Sasada Koichi和asakusa.rb(一个东京的Ruby用户组)的成员们共同完成的。Methopara项目给Ruby 1.9.1带来了新的API

这个gem只提供给Ruby-1.9.1。因为Ruby18x已经拥有merb-action-args,而Ruby-1.9.2和它的后续者将会内置Method#parameters。

那么,你是否在使用ParseTree呢?如果是,你可以用ruby_parser来做替代么?如果不行,ParseTree在Ruby-1.9.x上的不可再用是否给你带来了很大的困扰呢?

查看英文原文:The Future of ParseTree

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT