docs: function unexpectedTokenError(token, message) {
          var value, msg = message || Messages.UnexpectedToken;
  
          if (token) {
              if (!message) {
                  msg = (token.type === Token.EOF) ? Messages.UnexpectedEOS :
                      (token.type === Token.Identifier) ? Messages.UnexpectedIdentifier :
                      (token.type === Token.NumericLiteral) ? Messages.UnexpectedNumber :
                      (token.type === Token.StringLiteral) ? Messages.UnexpectedString :
                      (token.type === Token.Template) ? Messages.UnexpectedTemplate :
                      Messages.UnexpectedToken;
  
                  if (token.type === Token.Keyword) {
                      if (isFutureReservedWord(token.value)) {
                          msg = Messages.UnexpectedReserved;
                      } else if (strict && isStrictModeReservedWord(token.value)) {
                          msg = Messages.StrictReservedWord;
                      }
                  }
              }
  
              value = (token.type === Token.Template) ? token.value.raw : token.value;
          } else {
              value = 'ILLEGAL';
          }
  
          msg = msg.replace('%0', value);
  
          return (token && typeof token.lineNumber === 'number') ?
              createError(token.lineNumber, token.start, msg) :
              createError(scanning ? lineNumber : lastLineNumber, scanning ? index : lastIndex, msg);
      }