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 に答える