anchor.diff:      return op.getType() == RPAREN;
   }
   
  +/*
  + * Key helper method: used to determine whether or not a FILLER token is meant
  + * to be a column delimiter.
  + */
   private boolean isElementSeparator() {
       if(inParens()) {
           return false;
  
positive.code: STRING : '\'' STRING_CHAR* '\'';
  
  fragment BRACKET_COMMENT_FILLER : ~'%' | '%' ~('{' | '}');
  BRACKET_COMMENT : '%{' BRACKET_COMMENT_FILLER* (BRACKET_COMMENT BRACKET_COMMENT_FILLER*)* '%}'; //TODO-AC: test this
  
  fragment NOT_LINE_TERMINATOR : ~('\r' | '\n');
  COMMENT : '%' | '%' ~'{' NOT_LINE_TERMINATOR*;
  
negative.code: }
  
  @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);
  