1

可以很容易地推断出mri 语法树中大多数节点的含义。但是列表很长(来源: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 操作是一个内置库,因此它的文档要好得多。是否有一个地方记录了解析树的语法树中的所有节点?

4

1 回答 1

1

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

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

您在此处显示的内容看起来像是来自 MRI 或 YARV 的解析树,这两者的文档记录都非常糟糕。

于 2010-09-29T22:00:55.363 回答