C++ Mathematical Expression Library (ExprTk)  https://www.partow.net/programming/exprtk/index.html
diff --git a/exprtk.hpp b/exprtk.hpp
index 1e33de8..b2542ee 100644
--- a/exprtk.hpp
+++ b/exprtk.hpp
@@ -2427,11 +2427,25 @@
          {
             const char* initial_itr = s_itr_;
 
-            while (
-                    (!is_end(s_itr_)) &&
-                    (details::is_letter_or_digit(*s_itr_) || ((*s_itr_) == '_'))
-                  )
+            while (!is_end(s_itr_))
             {
+               if (!details::is_letter_or_digit(*s_itr_) && ('_' != (*s_itr_)))
+               {
+                  if ('.' != (*s_itr_))
+                     break;
+                  /*
+                     Permit symbols that contain a 'dot'
+                     Allowed   : abc.xyz, a123.xyz, abc.123, abc_.xyz a123_.xyz abc._123
+                     Disallowed: abc.<white-space>, abc.<eof>
+                  */
+                  if (
+                       !is_end(s_itr_ + 1)                      &&
+                       details::is_letter_or_digit(*s_itr_ + 1) &&
+                       ('_' != (*s_itr_ + 1))
+                     )
+                     break;
+               }
+
                ++s_itr_;
             }
 
diff --git a/readme.txt b/readme.txt
index 56d1aef..ed39952 100644
--- a/readme.txt
+++ b/readme.txt
@@ -2769,9 +2769,9 @@
       function names are case-insensitive.
 
  (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)
+      with  a letter  (A-Z or  a-z), then  can be  comprised of  any
+      combination of letters, digits,  underscores and dots. (eg:  x,
+      var1 or power_func99, person.age, item.size.0)
 
  (08) Expression lengths and sub-expression lists are limited only by
       storage capacity.