anchor.diff:  }
   
   @parser::members {
  +/* Convert a RecognitionException into a TranslationException. */
   private matlab.TranslationProblem makeProblem(RecognitionException e) {
       return makeProblem(getTokenNames(), e);
   }
   
  +/* Convert a RecognitionException into a TranslationException. */
   private matlab.TranslationProblem makeProblem(String[] tokenNames, RecognitionException e) {
       //change column to 1-based
       return new matlab.ArrayTranslationProblem(e.line, e.charPositionInLine + 1, getErrorMessage(e, tokenNames));
   }
   
  +/**
  + * Input: a matrix or cell array with missing or extraneous row and column delimiters.
  + * Output: a matrix or cell array with a single comma separating consecutive elements
  + * and a single semicolon and/or newline separating consecutive rows.
  + */
   public static String translate(String text, int baseLine, int baseCol, OffsetTracker offsetTracker, List<matlab.TranslationProblem> problems) {
       ANTLRStringStream in = new ANTLRStringStream(text);
       in.setLine(baseLine);
  
positive.code: //AC: keep the lexer and the parser together for now because that's the default Antlr layout
  
  options {
      output = template;
      rewrite = true;
  }
  
negative.code: STRING : '\'' STRING_CHAR* '\'';
  
  fragment BRACKET_COMMENT_FILLER : ~'%' | '%' ~('{' | '}');
  BRACKET_COMMENT : '%{' BRACKET_COMMENT_FILLER* (BRACKET_COMMENT BRACKET_COMMENT_FILLER*)* '%}';
  
  fragment NOT_LINE_TERMINATOR : ~('\r' | '\n');
  COMMENT : '%' | '%' ~'{' NOT_LINE_TERMINATOR*;
  