let complain_soft () = 
    let ss, se = symbol_start (), symbol_end () in
    let the_string = (Global.get Mathcommon.lexbuf).Lexing.lex_buffer in
    if !_sl && !_se && !_pe then pe the_string;
    if !_pe then begin
      (* the error message *)
      let snip = snippet (try subb the_string ss se with _ -> "BUG!") 15 in
      if se > succ ss then begin
        if !_se then Mathcommon.show_error ss se;
        epf "{Parsing failed on pos %d-%d: `%s'}\n%!" ss (pred se) snip
      end else begin
        if !_se then Mathcommon.show_error ss (ss+1); 
        let nsnip = if snip = "" then "" else va ": `%s'" snip in
        epf "{Parsing failed on pos %d%s}\n%!" ss nsnip
      end;

      (* display some help to the hapless user.... *)
      begin match snip with 
        | "=" -> pe "{Perhaps you are trying to bind a variable with a reserved name, such as `pi', `log' etc.}"
        | _ -> ()
      end;
    end