diff --git a/preprocessor/macro/MacroFlex.ll b/preprocessor/macro/MacroFlex.ll
index 05a60329c71d35dfa8c62794da03fa5cfad0a7e6..792efce711560341fc8567eed6178db0d602d40a 100644
--- a/preprocessor/macro/MacroFlex.ll
+++ b/preprocessor/macro/MacroFlex.ll
@@ -51,6 +51,7 @@ typedef Macro::parser::token token;
 %x FOR_BODY
 %x THEN_BODY
 %x ELSE_BODY
+%x END_DATE
 
 %{
 // Increments location counter for every token read
@@ -60,6 +61,7 @@ typedef Macro::parser::token token;
 SPC  [ \t]+
 EOL  (\r)?\n
 CONT \\\\
+DATE -?[0-9]+([YyAa]|[Mm]([1-9]|1[0-2])|[Qq][1-4]|[Ww]([1-9]{1}|[1-4][0-9]|5[0-2]))
 
 %%
  /* Code put at the beginning of yylex() */
@@ -87,6 +89,12 @@ CONT \\\\
 <INITIAL>^{SPC}*@#          { yylloc->step(); BEGIN(STMT); }
 <INITIAL>@\{                { yylloc->step(); BEGIN(EXPR); }
 
+<INITIAL>{DATE}             { yylloc->step(); *yyout << "dates('" << yytext << "')"; }
+<INITIAL>${DATE}            { yylloc->step(); *yyout << yytext + 1; }
+
+<INITIAL>dates{SPC}*\({SPC}*\'{DATE} { yylloc->step(); *yyout << yytext; BEGIN(END_DATE); }
+<END_DATE>{SPC}*\'{SPC}*\)           { yylloc->step(); *yyout << yytext; BEGIN(INITIAL); }
+
 <EXPR>\}                    { BEGIN(INITIAL); return token::EOL; }
 
 <STMT>{CONT}{SPC}*{EOL}     { yylloc->lines(1); yylloc->step(); }