anchor.diff:  private boolean inParens() { return !bracketStack.isEmpty() && bracketStack.peek() == LPAREN; }
   private boolean inCurly() { return !bracketStack.isEmpty() && bracketStack.peek() == LCURLY; }
   private boolean inSquare() { return !bracketStack.isEmpty() && bracketStack.peek() == LSQUARE; }
  -private boolean notInBrackets() { return bracketStack.isEmpty(); }
   }
   
   @lexer::header {
  
positive.code: //non-empty
  element_separator_list :
       t_FILLER? t_COMMA t_FILLER? //just echo
    |  element_separator_filler //insert comma
    ;
  
  element_separator_filler :
       {isElementSeparator()}? { offsetTracker.recordOffsetChange(0, -1); offsetTracker.advanceInLine(1); } t_FILLER -> template(filler={$text}) ",<filler>" //insert comma
    ;
  
  //non-empty
  
negative.code: 
  sep_stmt_list :
       t_FILLER? stmt_separator t_FILLER? (stmt t_FILLER?)*
    ;
  
  function_list :
  