diff --git a/src/shared/cplusplus/Lexer.cpp b/src/shared/cplusplus/Lexer.cpp
index a0cc9495d831e247e9f3c7d65d2e7d442bebeaa1..f8f1b6f1339ba993f20e7c31bc4385fe1d1bf3bc 100644
--- a/src/shared/cplusplus/Lexer.cpp
+++ b/src/shared/cplusplus/Lexer.cpp
@@ -603,7 +603,7 @@ void Lexer::scan_helper(Token *tok)
 
                 do {
                     yyinp();
-                    if (! (isalnum(_yychar) || _yychar == '_'))
+                    if (! (isalnum(_yychar) || _yychar == '_' || _yychar == '$'))
                         break;
                 } while (_yychar);
 
@@ -674,9 +674,9 @@ void Lexer::scan_helper(Token *tok)
 
             if (control())
                 tok->string = control()->findOrInsertStringLiteral(yytext, yylen);
-        } else if (std::isalpha(ch) || ch == '_') {
+        } else if (std::isalpha(ch) || ch == '_' || ch == '$') {
             const char *yytext = _currentChar - 1;
-            while (std::isalnum(_yychar) || _yychar == '_')
+            while (std::isalnum(_yychar) || _yychar == '_' || _yychar == '$')
                 yyinp();
             int yylen = _currentChar - yytext;
             if (f._scanKeywords)