C++ Mathematical Expression Library (ExprTk)  http://www.partow.net/programming/exprtk/index.html
diff --git a/exprtk.hpp b/exprtk.hpp
index a3d14ea..b4d4343 100644
--- a/exprtk.hpp
+++ b/exprtk.hpp
@@ -23810,7 +23810,10 @@
                default            : return;
             }
 
-            parser_->dec_.add_assignment(symbol_name,cst);
+            if (!symbol_name.empty())
+            {
+               parser_->dec_.add_assignment(symbol_name,cst);
+            }
          }
 
          inline expression_node_ptr synthesize_assignment_expression(const details::operator_type& operation, expression_node_ptr (&branch)[2])
diff --git a/readme.txt b/readme.txt
index 1c29569..43c831b 100644
--- a/readme.txt
+++ b/readme.txt
@@ -403,17 +403,17 @@
 |          | in the event they have fractional components truncation |
 |          | will be performed. (eg: 1.67 --> 1)                     |
 +----------+---------------------------------------------------------+
-|  :=      | Assign the value of x to y. Where x is a mutable string |
-|          | or string range and y is either a string or a string    |
+|  :=      | Assign the value of x to y. Where y is a mutable string |
+|          | or string range and x is either a string or a string    |
 |          | range. eg:                                              |
-|          | 1. x := y                                               |
-|          | 2. x := 'abc'                                           |
-|          | 3. x := y[:i + j]                                       |
-|          | 4. x := '0123456789'[2:7]                               |
-|          | 5. x := '0123456789'[2i + 1:7]                          |
-|          | 6. x := (y := '0123456789'[2:7])                        |
-|          | 7. x[i:j] := y                                          |
-|          | 8. x[i:j] := (y + 'abcdefg'[8 / 4:5])[m:n]              |
+|          | 1. y := x                                               |
+|          | 2. y := 'abc'                                           |
+|          | 3. y := x[:i + j]                                       |
+|          | 4. y := '0123456789'[2:7]                               |
+|          | 5. y := '0123456789'[2i + 1:7]                          |
+|          | 6. y := (x := '0123456789'[2:7])                        |
+|          | 7. y[i:j] := x                                          |
+|          | 8. y[i:j] := (x + 'abcdefg'[8 / 4:5])[m:n]              |
 |          |                                                         |
 |          | Note: For options 7 and 8 the shorter of the two ranges |
 |          | will denote the number characters that are to be copied.|
@@ -593,7 +593,7 @@
 |          | 2. max_size := max(v0[],v1[],v2[],v3[])                 |
 +----------+---------------------------------------------------------+
 
-Note: In  the  above  tables, the  symbols x, y, z, w, u  and v  where
+Note: In  the  tables  above, the  symbols x, y, z, w, u  and v  where
 appropriate may represent any of one the following:
 
    1. Literal numeric/string value
@@ -1307,10 +1307,10 @@
    };
 
 
-In the above example, the input 'parameters' to the function operator,
+In the example above, the input 'parameters' to the function operator,
 parameter_list_t,  is  a  type  of  std::vector  of  type_store.  Each
 type_store  instance  has  a  member  called  'type'  which  holds the
-enumeration pertaining  the underlying  type of  the type_store. There
+enumeration pertaining to the underlying type of the type_store. There
 are three type enumerations:
 
    (1) e_scalar - literals, variables, vector elements, expressions
@@ -1570,7 +1570,7 @@
    };
 
 
-In the above example there are four distinct parameter sequences  that
+In the example above there are four distinct parameter sequences  that
 can be processed  by the generic  function 'roo'. Any  other parameter
 sequences will cause a compilation error. The four valid sequences are
 as follows:
@@ -2039,7 +2039,7 @@
     parser.compile("1 + sin(30)",expression);
 
 
-In the above example, the custom 'sin' function is registered with the
+In the example above, the custom 'sin' function is registered with the
 symbol_table using the method 'add_reserved_function'. This is done so
 as to bypass the checks for reserved words that are carried out on the
 provided symbol names when calling the standard 'add_function' method.
@@ -2261,9 +2261,10 @@
  (06) All  reserved words,  keywords, variable,  vector, string   and
       function names are case-insensitive.
 
- (07) Variable, vector and  function names must  begin with a  letter
-      (A-Z  or a-z),  then  can  be comprised  of any  combination of
-      letters, digits and underscores. (eg: x, var1 or power_func99)
+ (07) Variable, vector, string variable and function names must begin
+      with  a  letter  (A-Z or  a-z), then  can be  comprised of  any
+      combination of letters, digits and underscores. (eg: x, var1 or
+      power_func99)
 
  (08) Expression lengths and sub-expression lists are limited only by
       storage capacity.