Ruby(MRI)语法树节点文档

时间:2010-09-29 21:25:37

标签: ruby metaprogramming abstract-syntax-tree

来自mri's syntax tree的大多数节点的含义很容易被推测。但是列表很长(来源:bin/parse_tree_abc):

:attrasgn, :attrset, :dasgn_curr, :iasgn, :lasgn, :masgn,
:and, :case, :else, :if, :iter, :or, :rescue, :until, :when, :while,
:call, :fcall, :super, :vcall, :yield,
:args, :argscat, :array, :begin, :block, :block_arg, :block_pass, :bool,
:cfunc, :colon2, :const, :cvar, :defined, :defn, :dregx, :dstr, :dvar,
:dxstr, :ensure, :false, :fbody, :gvar, :hash, :ivar, :lit, :long, :lvar,
:match2, :match3, :nil, :not, :nth_ref, :return, :scope, :self, :str,
:splat, :to_ary, :true, :unknown, :value, :void, :zarray, :zarray,
:zclass, :zsuper

由于Python的AST操作是一个内置库,它的documentation is far better。是否有记录来自解析树语法树的所有节点的地方?

1 个答案:

答案 0 :(得分:1)

没有Ruby AST这样的东西,因此没有它的文档。每个实现都有自己的AST,可能会也可能没有记录。

此外,您所谈论的不是抽象语法树,而是解析树(又称具体语法树),根据定义,它与用于构造它的特定解析器紧密相关。不同的解析器可能会为相同的代码和相同的语法构造非常不同的解析树。

你在那里展示的东西看起来像MRI或YARV的解析树,这两者都是出了名的记录。