macroprocessor: substitute dates, don't substitute dates preceded by $ or dates('

issue#70
Houtan Bastani 2013-10-10 17:53:06 +02:00
parent cbb0167c4c
commit c2a3d342d8
1 changed files with 8 additions and 0 deletions

View File

@ -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(); }