= Ripper 簡易リファレンス == 注 * ここでいう文字列とは、基本的に"、'、%q、でくくられた文字列やヒアドキュメント などを指す。そうでない場合はできるだけそこで注意をうながす。 * ブロックとはいわゆるイテレータである == クラスメソッド --- Ripper.new(*args) --- Ripper.parse(*args) == メソッド --- Ripper#parse(*args) --- Ripper#pointer == parse中に呼びだされるメソッド --- Ripper#on__AMPER --- Ripper#on__AND --- Ripper#on__ANDAND --- Ripper#on__ANDAND_ASSIGN --- Ripper#on__AND_ASSIGN --- Ripper#on__AREF --- Ripper#on__ASET --- Ripper#on__ASSIGN --- Ripper#on__ASSOC --- Ripper#on__AT --- Ripper#on__BACKQUOTE --- Ripper#on__BACKSLASH --- Ripper#on__BACK_REF --- Ripper#on__BANG --- Ripper#on__BEGIN --- Ripper#on__CHAR( str ) ?a などで表わされる整数リテラルがscanされたときに呼びだされる。 要fix * ((|str|)) =="?" --- Ripper#on__CMP --- Ripper#on__CMP_ASSIGN --- Ripper#on__COLON --- Ripper#on__COLON2 --- Ripper#on__COLON3 --- Ripper#on__COMMA --- Ripper#on__CONSTANT( const_id ) * ((|const_id|))定数識別子 --- Ripper#on__CVAR( cvar_id ) * ((|cvar_id|)) クラス変数識別子 --- Ripper#on__DOLLER --- Ripper#on__DOT --- Ripper#on__DOT2 --- Ripper#on__DOT3 --- Ripper#on__END --- Ripper#on__EQ --- Ripper#on__EQQ --- Ripper#on__FID( function_id ) おしりに?や!などが付いている、明らかにメソッドとわかる識別子 * ((|function_id|))識別子 --- Ripper#on__GEQ --- Ripper#on__GT --- Ripper#on__GVAR( gvar_id ) * ((|gvar_id|)) グローバル変数識別子 --- Ripper#on__HAT --- Ripper#on__HAT_ASSIGN --- Ripper#on__IDENTIFIER( id ) * ((|id|)) 識別子 --- Ripper#on__INTEGER_10 --- Ripper#on__INTEGER_16 --- Ripper#on__INTEGER_2 --- Ripper#on__INTEGER_8 --- Ripper#on__IVAR( ivar_id ) * ((|ivar_id|)) インスタンス変数識別子 --- Ripper#on__KEYWORD( keyword ) 予約語をscanしたときに呼びだされる * ((|keyword|)) キーワード文字列 --- Ripper#on__LBRACE --- Ripper#on__LBRACE_ARG --- Ripper#on__LBRACKET --- Ripper#on__LPAREN --- Ripper#on__LPAREN_ARG --- Ripper#on__LSHIFT --- Ripper#on__LT --- Ripper#on__MATCH --- Ripper#on__MINUS --- Ripper#on__MINUS_ASSIGN --- Ripper#on__MUL --- Ripper#on__MUL_ASSIGN --- Ripper#on__NEQ --- Ripper#on__NMATCH --- Ripper#on__NTH_REF --- Ripper#on__OP( op ) 新設 再定義可能な演算子(==など、=,::などは含まれない)がscanされた ときに呼びだされる。 単項演算子が`-hoge'の形で使われた場合は呼びだされない。 `-@'の場合は呼びだされる。 * ((|op|)) 演算子の文字列 --- Ripper#on__OR --- Ripper#on__OROR --- Ripper#on__OROR_ASSIGN --- Ripper#on__OR_ASSIGN --- Ripper#on__PERCENT --- Ripper#on__PERCENT_ASSIGN --- Ripper#on__PLUS --- Ripper#on__PLUS_ASSIGN --- Ripper#on__POW --- Ripper#on__POW_ASSIGN --- Ripper#on__Q( q ) ?(クエスチョンマーク)がscanされたときに呼びだされる * ((|q|)) =="?" --- Ripper#on__RBRACE --- Ripper#on__RBRACKET --- Ripper#on__RPAREN --- Ripper#on__RSHIFT --- Ripper#on__RSHIFT_ASSIGN --- Ripper#on__SEMICOLON --- Ripper#on__SLASH --- Ripper#on__SLASH_ASSIGN --- Ripper#on__STAR --- Ripper#on__SYMBEG --- Ripper#on__TILDE --- Ripper#on__UMINUS --- Ripper#on__UPLUS --- Ripper#on__add_eval_string( context, str ) 文字列に実行時に評価される文字列 #{...} がscanされたときに呼びだされる。 * ((|str|)) は実行時に評価される文字列 --- Ripper#on__add_space( context, str ) %w( で文字列からなる配列を生成するとき、%w( の直後にspace文字があるとき よびだされる * ((|context|)) %w( など * ((|str|)) %w( の直後のspace文字列。複数続けばそれがまとめて呼びだされる。 つまり、%w( hoge heke) というものに対しては " " が呼びだされる --- Ripper#on__add_string( context, str ) 文字列が処理されたときに呼びだされる。 ただし、ヒアドキュメントはとりあつかいが異なる。 また、"befere #{hoge} after"という文字列を処理すると、 "befere "、 " after"の部分が別々に処理される。 また、#{}の部分は別口で(on__add_eval_stringなどで)処理される --- Ripper#on__add_word( context, str ) %w( で文字列からなる配列を生成するとき、一つ一つの文字列ごとに 呼びだされる。 --- Ripper#on__alias --- Ripper#on__ambiguous_argument --- Ripper#on__and --- Ripper#on__aref --- Ripper#on__argadd( args, arg ) 引数、仮引数、配列引数のリストで引数が一つ追加されたときに 呼びだされる。 --- Ripper#on__argadd_args( args1, args2 ) open_args2(かっこの前にスペースをいれるかどうかでそのかっこがメソッド 呼出しになるか式になるかどうかを実現している部分)で必要になる。 --- Ripper#on__argadd_assocs --- Ripper#on__argadd_block --- Ripper#on__argadd_opt --- Ripper#on__argadd_rest --- Ripper#on__argadd_star --- Ripper#on__argadd_value( args, arg ) 引数のリストに引数がひとつ追加されたときに呼出される。 parse時に呼出される。 (())とは排他的、Ripper#on__argaddとどのように区別されて いるのかはよくわからない。 --- Ripper#on__argstart 引数、仮引数のリストの一番最初に呼びだされる。 (())とは排他的。 parse時に呼びだされる。 --- Ripper#on__argvoid 仮引数で通常の引数(初期値つき、*つき、&つき以外)が無いときに呼びだされる。 また、aref([])の引数に「*heke」のみ与えたときにも呼びだされる。 parse時に呼びだされる。 --- Ripper#on__assign --- Ripper#on__assignable( var, arg ) ((|var|))が代入の左辺として使われると判定された時に呼びだされる。 ブロックの引数として使われたときも呼びだされる parse時に呼びだされる。 * ((|var|)) 左辺(文字列そのまま) * ((|arg|)) メソッドのデフォルト引数として代入文が書かれたときの右辺。 それ以外は nil となる --- Ripper#on__assoc --- Ripper#on__assoc_add --- Ripper#on__assoc_list --- Ripper#on__backref_error --- Ripper#on__begin --- Ripper#on__begin_block --- Ripper#on__begin_brace { } ブロックが始まるときに呼びだされる。parse時に呼びだされる。 (())と対になっている。 --- Ripper#on__begin_do do end ブロックが始まるときに呼びだされる。parse時に呼びだされる。 (())と対になっている。 --- Ripper#on__block --- Ripper#on__blockcall( method_call, block ) ブロック付メソッド呼びだしのときに呼びだされる。 引数なし、かっこなし、かつレシーバなしのメソッド呼びだしで、ブロックを 取る場合ば fcallやvarrefは呼びだされずに、これのみが呼びだされる ことに注意。(ripper.yを修正してこの場合はfcallを呼ぶようにした) * ((|method_call|)) メソッド * ((|block|)) ブロック --- Ripper#on__blockvar --- Ripper#on__break --- Ripper#on__call( receiver, method, args ) レシーバを持つメソッド呼び出し時に呼びだされる。parse時に呼びだされる。 * ((|receiver|)) レシーバ * ((|method|)) メソッド名 * ((|args|)) 引数 --- Ripper#on__call_colon --- Ripper#on__case --- Ripper#on__class( class_name, stmts, superclass ) クラス定義時に呼ばれる。parse時に呼びだされる。 * ((|kw_class|)) 予約語 "class" (新設) * ((|class_name|)) クラス名 * ((|stmts|)) 中の文 * ((|superclass|)) スーパークラスの名前。指定されていない場合は nil。 * ((|kw_end|)) 予約語 "end" (新設) --- Ripper#on__comment --- Ripper#on__comment_start --- Ripper#on__condexpr --- Ripper#on__const_get( receiver, const_name ) A::Bという形式で定数を参照したときに呼びだされる。parse時に呼びだされる。 ::CONST_NAME という形式の場合は(())が 呼びだされ、これは呼びだされない。 また、「::」なしでの定数参照は(())が呼びだされ、 これは呼びだされない。 * ((|receiver|)) ::の左側 * ((|const_name|)) 定数名。::の右側 --- Ripper#on__def( kw_def, name, arglist, statements, rescue_clause, kw_end ) メソッド定義時に呼ばれる * ((|kw_def|)) == "def" * ((|name|)) メソッド名 * ((|arglist|)) 引数のリスト * ((|statements|)) メソッドの中身 * ((|rescue_clause|)) レスキュー節 * ((|kw_end|)) == "end" (新設) --- Ripper#on__defined --- Ripper#on__else --- Ripper#on__elsif --- Ripper#on__embdoc( str ) 埋め込みドキュメントを1行scanするごとに呼ばれる * ((|str|)) 埋め込みドキュメントを1行の内容(改行含む) --- Ripper#on__embdoc_begin( str ) 埋め込みドキュメントのscan開始時に呼ばれる * ((|str|)) == "=begin" --- Ripper#on__embdoc_begin_label( str ) 埋め込みドキュメントのscan開始時、on__embdoc_beginの後に呼びだされる * ((|str|)) =beginに続く文字列(not Ruby's String) --- Ripper#on__embdoc_end 埋め込みドキュメントのscan終了時に呼ばれる * ((|str|)) == "=end" --- Ripper#on__embdoc_end_label 埋め込みドキュメントのscan終了時、on__embdoc_endの後に呼びだされる * ((|str|)) =endに続く文字列(not Ruby's String) --- Ripper#on__end_brace { } ブロックが終わるに呼びだされる。parse時に呼びだされる。 (())と対になっている --- Ripper#on__end_do do end ブロックが始まるときに呼びだされる。parse時に呼びだされる。 (())と対になっている --- Ripper#on__ensure --- Ripper#on__escaped_newline --- Ripper#on__eval_string_begin( context, str ) * ((|str|)) == #{ --- Ripper#on__eval_string_end( context, str ) * ((|str|)) == } --- Ripper#on__fcall( function, args ) レシーバの無いメソッド呼びだしで呼ばれる。parse時に呼びだされる。 メソッド呼びだしかローカル変数へのアクセスか区別できないときは 呼びだされない。 * ((|function|)) 関数名 * ((|args|)) 引数リスト --- Ripper#on__for --- Ripper#on__here_document_end( context ) * ((|context|)) は << など文字列開始文字列 --- Ripper#on__here_document_eos( context, eos ) * ((|context|)) は << など文字列開始文字列 * ((|eos|)) 文字列終端文字列 これは以下のソースにおける "EOS" にあたる str == <))と対になっている。 on__classやon__defを呼びだした直後に呼ばれる --- Ripper#on__local_push 以下の場合に呼びだされる。parserより。 * クラス定義開始 * 特異クラス定義開始 * モジュール定義開始 * メソッド定義開始 * 特異メソッド定義開始 つまり、新しいスコープが生成されるときに呼びだされる このスコープにはブロックのスコープは含まれない。 これは(())と対になっている。 --- Ripper#on__massign --- Ripper#on__mlhs_add --- Ripper#on__mlhs_add_star --- Ripper#on__mlhs_aset --- Ripper#on__mlhs_attrset_colon --- Ripper#on__mlhs_attrset_dot --- Ripper#on__mlhs_paren --- Ripper#on__mlhs_star --- Ripper#on__mlhs_start --- Ripper#on__module( kw_module, module_name, stmts, kw_end ) モジュール定義時に呼ばれる。parse時に呼びだされる。 * ((|kw_module|)) 予約語 "module" (新設) * ((|module_name|)) モジュール名 * ((|stmts|)) 中の文 * ((|kw_end|)) 予約語 "end" (新設) --- Ripper#on__name --- Ripper#on__new_array --- Ripper#on__new_hash --- Ripper#on__new_here_document --- Ripper#on__new_regexp --- Ripper#on__new_string( str ) 文字列のscanがされる直前に呼びだされる * ((|str|)) 文字列開始文字列 --- Ripper#on__new_words( str ) %w( で文字列からなる配列を生成する(scanする)直前に呼びだされる * ((|str|)) 文字列開始文字列 --- Ripper#on__new_xstring( str ) `で囲まれた文字列や、%x( )でという文字列をscanする直前に呼びだされる * ((|str|)) 文字列開始文字列 --- Ripper#on__newline --- Ripper#on__next --- Ripper#on__not --- Ripper#on__notop --- Ripper#on__opaset --- Ripper#on__opassign --- Ripper#on__opcallassign( receiver, method_name, op_assign, arg ) receiver.method_name += arg の形のメソッド呼び出しがされたときに 呼びだされる。parse時に呼びだされる。 * ((|receiver|)) レシーバ * ((|method_name|)) メソッド * ((|op_assign|)) "*="や"+="など * ((|arg|)) 右辺 --- Ripper#on__or --- Ripper#on__paren --- Ripper#on__redo --- Ripper#on__regexp_end --- Ripper#on__regexp_options --- Ripper#on__rescue --- Ripper#on__rescue_else --- Ripper#on__rescue_mod --- Ripper#on__retry --- Ripper#on__return --- Ripper#on__scan --- Ripper#on__sclass( kw_class, s_obj, statements kw_end ) 特異クラス定義時に呼ばれる。parse時に呼びだされる。 * ((|kw_class|)) 予約語 "class" (新設) * ((|s_obj|)) 特異クラスを定義するオブジェクトを示すもの * ((|statements|)) クラスの中身 * ((|kw_end|)) 予約語 "end" (新設) --- Ripper#on__sdef( kw_def, s_obj, method_name, arglist, statements, kw_end ) 特異メソッド定義時に呼ばれる。parse時に呼びだされる。 * ((|kw_def|)) == 予約語 "def" (新設) * ((|s_obj|)) 特異メソッドを定義するオブジェクトを示すもの * ((|method_name|)) メッソド名 * ((|arglist|)) 仮引数 * ((|statements|)) メソッドの中身 * ((|kw_end|)) == 予約語 "end" (新設) --- Ripper#on__set_line --- Ripper#on__space --- Ripper#on__string_add_dstr --- Ripper#on__string_concat( str1, str2 ) スキャナ(lexer)では判定できない文字列連結が生じたときに呼びだされる。 parse時に呼びだされる --- Ripper#on__string_end --- Ripper#on__super --- Ripper#on__symbol( id ) シンボルリテラルのパース時に呼びだされる。 parse時に呼びだされる。 * ((|id|)) 識別子 --- Ripper#on__tPOW_ASSIGN * bug (on__POW_ASSIGNが正しい) 修正した --- Ripper#on__toplevel_const_get( const_name ) ::CONST_NAME という方式による定数の参照 * ((|const_name|)) 定数の名前 --- Ripper#on__unary --- Ripper#on__undef --- Ripper#on__unless --- Ripper#on__unless_mod --- Ripper#on__until --- Ripper#on__until_mod --- Ripper#on__varcall( method_name, arg ) 引数なし、かっこなし、かつレシーバなしのメソッド呼びだしで、 メソッドの名前が「!」や「?」で終わるときに呼びだされる。 parse時に呼びだされる。 * ((|method_name|)) メソッド名 * ((|arg|)) == nil --- Ripper#on__varref( var_name ) 変数を参照したときに呼びだされる。引数なし、かっこなし、かつレシーバなし のメソッド呼びだしのときも呼びだされる。parse時に呼びだされる。 * ((|var_name|)) 変数名 --- Ripper#on__when --- Ripper#on__while --- Ripper#on__while_mod --- Ripper#on__word_space( context, str ) %w( で、単語間のスペースごとと、最後の単語の後のスペースの所で呼びだされる * ((|str|)) 空白文字の列 --- Ripper#on__words_end( context, term ) %w( で、スキャン終了時に呼びだされる。 * ((|term|)) 終端文字 --- Ripper#on__yield