2010-09-29 12 views
1

La signification de la plupart des noeuds de mri's syntax tree peut être facilement déduite. Cependant, la liste est assez longue (source: bin/parse_tree_abc):Ruby (MRI) Syntaxe Documentation sur les noeuds d'arbre

: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 

Depuis la manipulation AST Python est une bibliothèque intégrée, son documentation is far better. Y a-t-il un endroit où tous les nœuds de l'arbre de syntaxe de l'arbre d'analyse sont documentés?

Répondre

1

Il n'y a pas de Ruby AST, donc il n'y a pas de documentation pour cela. Chaque implémentation a son propre AST, qui peut ou non être documenté. De plus, ce dont vous parlez n'est pas l'arbre de la syntaxe abstraite, mais l'arbre d'analyse (aussi appelé arbre de syntaxe concret), qui est, par définition, étroitement lié à l'analyseur spécifique utilisé pour le construire. Différents analyseurs peuvent construire des arborescences d'analyse très différentes pour le même code et la même syntaxe. Ce que vous montrez là ressemble à l'arbre d'analyse de MRI ou de YARV, qui sont notoirement mal documentés.

+0

Bien placé. C'est l'arbre de syntaxe de MRI. Mais le terme, quoique incorrect, exprime plus facilement la notion de ce que je veux dire. Même poste de Ilya Grigorik, et les sites de référence, mentionnent cela comme AST. Mais merci pour la correction bienvenue. Edit: fait amusant: googling pour 'arbre de syntaxe concret' 'ruby' 'donne cette page comme premier résultat, et "JAVA - Boolean Query/Expression à un arbre de syntaxe concret" comme deuxième. Oui, erreur commune. –