anchor.diff:  
   scan_number([C|Cs], St, Line, Col, Toks, Ncs) when ?DIGIT(C) ->
       scan_number(Cs, St, Line, Col, Toks, [C|Ncs]);
  -scan_number([$_|Cs], St, Line, Col, Toks, Ncs) ->
  -    scan_number(Cs, St, Line, Col, Toks, Ncs);
  +scan_number([$_,Next|Cs], St, Line, Col, Toks, [Prev|_]=Ncs) when
  +      ?DIGIT(Next) andalso ?DIGIT(Prev) ->
  +    scan_number(Cs, St, Line, Col, Toks, [Next,$_|Ncs]);
   scan_number([$.,C|Cs], St, Line, Col, Toks, Ncs) when ?DIGIT(C) ->
       scan_fraction(Cs, St, Line, Col, Toks, [C,$.|Ncs]);
   scan_number([$.]=Cs, _St, Line, Col, Toks, Ncs) ->
       {more,{Cs,Col,Toks,Line,Ncs,fun scan_number/6}};
   scan_number([$#|Cs]=Cs0, St, Line, Col, Toks, Ncs0) ->
       Ncs = lists:reverse(Ncs0),
  -    case catch list_to_integer(Ncs) of
  +    case catch list_to_integer(remove_digit_separators(Ncs)) of
           B when B >= 2, B =< 1+$Z-$A+10 ->
               Bcs = Ncs++[$#],
               scan_based_int(Cs, St, Line, Col, Toks, {B,[],Bcs});
  
positive.code:             scan_error({illegal,integer}, Line, Col, Line, Ncol, Cs)
      end.
  
  scan_based_int([C|Cs], St, Line, Col, Toks, {B,Ncs,Bcs})
      when ?DIGIT(C), C < $0+B ->
      scan_based_int(Cs, St, Line, Col, Toks, {B,[C|Ncs],Bcs});
  scan_based_int([C|Cs], St, Line, Col, Toks, {B,Ncs,Bcs})
      when C >= $A, B > 10, C < $A+B-10 ->
      scan_based_int(Cs, St, Line, Col, Toks, {B,[C|Ncs],Bcs});
  scan_based_int([C|Cs], St, Line, Col, Toks, {B,Ncs,Bcs})
      when C >= $a, B > 10, C < $a+B-10 ->
      scan_based_int(Cs, St, Line, Col, Toks, {B,[C|Ncs],Bcs});
  scan_based_int([$_|Cs], St, Line, Col, Toks, {B,Ncs,Bcs}) ->
      scan_based_int(Cs, St, Line, Col, Toks, {B,Ncs,Bcs});
  scan_based_int([]=Cs, _St, Line, Col, Toks, State) ->
      {more,{Cs,Col,Toks,Line,State,fun scan_based_int/6}};
  scan_based_int(Cs, St, Line, Col, Toks, {B,Ncs0,Bcs}) ->
      Ncs = lists:reverse(Ncs0),
      case catch erlang:list_to_integer(Ncs, B) of
          N when is_integer(N) ->
              tok3(Cs, St, Line, Col, Toks, integer, Bcs++Ncs, N);
          _ ->
  
negative.code: 
  float_end(Cs, St, Line, Col, Toks, Ncs0) ->
      Ncs = lists:reverse(Ncs0),
      case catch list_to_float(remove_digit_separators(Ncs)) of
          F when is_float(F) ->
              tok3(Cs, St, Line, Col, Toks, float, Ncs, F);
          _ ->
  