anchor.diff:    ;
   
   quiet_row_separator : //match and delete row_separator
  -     dt_LINE_TERMINATOR {System.err.println("deleting newline before " + input.LT(1));}-> template() ""
  -  |  dt_SEMICOLON {System.err.println("deleting semicolon before " + input.LT(1));}-> template() ""
  +     dt_LINE_TERMINATOR -> template() ""
  +  |  dt_SEMICOLON -> template() ""
     |  t_COMMENT t_LINE_TERMINATOR //can't delete in this case
     |  t_BRACKET_COMMENT t_LINE_TERMINATOR //can't delete in this case
     ;
  
positive.code:   ;
  
  quiet_element_separator_comma :
       dt_COMMA {System.err.println("deleting comma " + retval.start);}-> template() "" //delete comma
    ;
  
  input_params :
  
negative.code: //non-empty
  element_separator_list :
       t_FILLER? t_COMMA t_FILLER? //just echo
    |  {isElementSeparator()}? { offsetTracker.recordOffsetChange(0, -1); } t_FILLER -> template(filler={$text}) ",<filler>" //insert comma
    ;
  
  //non-empty
  