@@ -842,7 +842,7 @@ public function parseNumber()
842842        // or "E" causing wrongly interpreted scientific notation (".e[0 to 9]" is invalid). Such invalid notation could 
843843        // break the lexer when table names under a given database context starts with ".e[0-9]". 
844844        // 
845-         // Valid final states are: 2, 3, 4  and 6 . Any parsing that finished in a 
845+         // Valid final states are: 2, 3, 4, 6,  and 9 . Any parsing that finished in a 
846846        // state other than these is invalid. 
847847        // Also, negative states are invalid states. 
848848        $ iBak$ this last ;
@@ -886,29 +886,25 @@ public function parseNumber()
886886                    $ state4 ;
887887                } elseif  ($ this str [$ this last ] === 'e '  || $ this str [$ this last ] === 'E ' ) {
888888                    $ state5 ;
889-                 } elseif  (
890-                     ($ this str [$ this last ] >= 'a '  && $ this str [$ this last ] <= 'z ' )
891-                     || ($ this str [$ this last ] >= 'A '  && $ this str [$ this last ] <= 'Z ' )
892-                 ) {
893-                     // A number can't be directly followed by a letter 
894-                     $ state$ state
895-                     break ;
896889                } elseif  ($ this str [$ this last ] < '0 '  || $ this str [$ this last ] > '9 ' ) {
890+                     if  (! Context::isSeparator ($ this str [$ this last ])) {
891+                         // A number can't be directly followed by a letter _ or $ 
892+                         $ state$ state
893+                     }
894+ 
897895                    // Just digits and `.`, `e` and `E` are valid characters. 
898896                    break ;
899897                }
900898            } elseif  ($ state4 ) {
901899                $ flagsFLAG_NUMBER_FLOAT ;
902900                if  ($ this str [$ this last ] === 'e '  || $ this str [$ this last ] === 'E ' ) {
903901                    $ state5 ;
904-                 } elseif  (
905-                     ($ this str [$ this last ] >= 'a '  && $ this str [$ this last ] <= 'z ' )
906-                     || ($ this str [$ this last ] >= 'A '  && $ this str [$ this last ] <= 'Z ' )
907-                 ) {
908-                     // A number can't be directly followed by a letter 
909-                     $ state$ state
910-                     break ;
911902                } elseif  ($ this str [$ this last ] < '0 '  || $ this str [$ this last ] > '9 ' ) {
903+                     if  (! Context::isSeparator ($ this str [$ this last ])) {
904+                         // A number can't be directly followed by a letter _ or $ 
905+                         $ state$ state
906+                     }
907+ 
912908                    // Just digits, `e` and `E` are valid characters. 
913909                    break ;
914910                }
@@ -919,14 +915,12 @@ public function parseNumber()
919915                    || ($ this str [$ this last ] >= '0 '  && $ this str [$ this last ] <= '9 ' )
920916                ) {
921917                    $ state6 ;
922-                 } elseif  (
923-                     ($ this str [$ this last ] >= 'a '  && $ this str [$ this last ] <= 'z ' )
924-                     || ($ this str [$ this last ] >= 'A '  && $ this str [$ this last ] <= 'Z ' )
925-                 ) {
926-                     // A number can't be directly followed by a letter 
927-                     $ state$ state
928-                     break ;
929918                } else  {
919+                     if  (! Context::isSeparator ($ this str [$ this last ])) {
920+                         // A number can't be directly followed by a letter _ or $ 
921+                         $ state$ state
922+                     }
923+ 
930924                    break ;
931925                }
932926            } elseif  ($ state6 ) {
0 commit comments