code: function unuse_dialect(dialectName, lexer, options) {
    options = options || {};
    if(dialectName && options.validate &&
      lexer.dialects[0].name !== dialectName)
    {
      lexer.error('Attempt to exit dialect "' + dialectName + '" while "' +
        lexer.dialects[0].name + '" was still active');
    }
  
    slinfo('removing dialect', dialectName ? ": " + dialectName : "");
    var removedDialect = lexer.pop_dialect(dialectName);
    if(!removedDialect) {
      lexer.error('The dialect ' + (dialectName ? '"' + dialectName + '"': '') +
          ' has never been used');
    }
  
  }
docs: stop using a dialect
  
  Whereas "use_dialect" enters the scope of a dialect, "unuse_dialect"
  exits that scope.
  
  @params dialectName = the name of the dialect to stop using, or if
  undefined the most recent dialect "used" in the one that's "unused"
  @params lexer = the lexer for the file being "unused" from.
  
  note:  if options.validate is true, the function will *only* "unuse"
  the most recent dialect and it's name must match the name you've
  given, otherwise an error is thrown.  This validates that you
  haven't (accidentally) failed to "unuse" an inner dialect nested
  inside another one, leaving the dialect stack in a different state
  than you think.