

* on__eval_string_begin, on__eval_string_end, on__add_eval_string ˤĤ

  #{ }ˤʸŸʸȽꤷƤ
  on__eval_string_begin  #{ 
  on__eval_string_end  } 
  on__add_eval_string  Ȥʸ
  줾Ǥ

* on__string__*  on__eval_string_* ˤ context ˤĤ
  "<<" ʤ ҥɥ
  "<<\'" ʤҥɥ('פĤ)
  "\"" ʤ ̤ʸ
  "\'" ʤ ''Ǥäʸ
  "%q!" ʤ %q! ! Ǥäʸ
  "/" ʤɽ
  Ȥ褦ˤʤ롣

  Ĥޤʸ󳫻ʸäƤ

* contextˤĤ 2
  on__new_string, on__new_xstring ʤɤͤˤäѲ뤳ȤǤ롣
  Ѥ parse η̤ѤΤ
  ѤꤦΤ context  QundefȤӤƤȤΤߡ
   context  Qundef ˤϤʤʤ
  äƤʤ餫ξμϤѤǤȻפ
  contextؤ򤷤ƤΤ new_*stringnew_here_documentnew_regexp
  new_words ΤߤǤ롣

* on_call ʤɤˤĤ  
  Klass#hoge= Ȥ᥽åɸƤӤ hoge ȤǸƤӤ
  mlhs_nodeΤ褦ˤ٤Ǥϡ callassignƤФΤ
  ޤʤΤ

* on__assignable
  ͤȤƤȤΤѿʸ󤽤Τޤޤ on__IDENTIFIER
  ɾ̤Ȥ⡣
  顼å򤹤ɬפ

* s_dispatch ˤĤ
  on__scan Ƥ -> on__* Ƥ֤ȤʤäƤ

* tok()ˤĤ
  tok() == parser->token_buffer

* newtok()
  ȡХåեΥꥢ򤹤

* nextc()
  ʸäƤ

* yacc  type() ˤĤ
  * f_args f_arg ʤ..  ᥽åɤβ
     farglistƤޤȤ᤿
  * opt_block_var ֥å (do || ... end )β
  * primary .method Ȥƥ᥽åɤƤӤΡۤȤɤʸˡǤ
    Ƥˤ褦
  * block_call ֥åե᥽åɸƤӤ
  * operation ̻ or  or ᥽åɼ̻
  * arg primary + ʸ + 黻Ҥˤ黻 ᥽åɤΰΰĤȤƻȤ

* ripperbug
  * rip_parse_quotedwords ˤơword_spaceΤӤǶʸĤʤ
  * on__scanǤΡʸ \n Τʤɤεư
    ( \nȤʸȤ٤)

* on__*ˤĤ
  lexerǸƤӤ(s_dispatchȤΤۤȤ)parserǸƤӤ
  Τ϶̤褦

* Ripper#pointer
  lex_p - lex_pbeg

* Ripper#lineno
   1 顢 File.lineno  0 

* ʣԤˤ錄#{}ѤǤʤȤȤˤˤƤ

* local variable 
  * α
  * ᥽åɤβ
  * ֥åβ

* block localΥפ̵뤹
  (Τ let ȤǤƤȤ⤤ʤ)

* ̻Ҥμ갷ˤĤ
  * IDENTIFIER
    * 餫 method call Ȥ狼(fcall,callʤ)methodȤߤʤ
    * Ʊפ local variable ¸ߤ
      method call Ǥ뤫ɤλ local variable Ȥߤʤ
      (Rubyʣʥ׵§̵뤷ñ㲽)
    * ɤˤ⤢ƤϤޤʤΤ method call
  * CONSTANT
    * 餫 method call Ȥ狼(fcall,callʤ)methodȤߤʤ
    * ʳϤ٤̤Ȥư
  * IVAR CVAR GVAR FID ϼ
  
  * IDENTIFIERμ갷Τˤ褦ȤС

    local variable 򸫤Ȥˡ֥åפ򸫤뤳Ȥȡ
    ȤƤΤߤ򸫤뤳ȤȤФ褤

* on__begin_do  on__end_dopush_local  pop_local Τ褦ФˤĤ

  פδѤǤ롣i.e. פδڤǤ

* local_cnt
  f_block_argǤƤ֤褦ˤ

* on__sdef  on__def
  򤽤ۤɤȻפ

* on__block  on__end_do
  սƤֽդΤȤ롣
  줫

* յ
  variable (true,false,nil,selfʤɤޤ)
  fname (op,reswordޤ)

* tSTAR
  op˴ޤޤƤΤϲ?

* üargsסf_argסf_optargפorꥹȤ֤