Add expressions
[tedtools.git] / tmpl_scan.l
index 4379919..318736c 100644 (file)
@@ -36,8 +36,10 @@ static MemoryContext *lexContext;
 %x  xQUOTED
 %x  xCOMMENT
 
+LEXEMCHARSTART         [a-zA-Z_]
 LEXEMCHAR      [a-zA-Z0-9_]
 PATH           [a-zA-Z0-9_/\.]
+DIGIT          [0-9]
 
 %%
 
@@ -60,14 +62,7 @@ PATH                 [a-zA-Z0-9_/\.]
                                                BEGIN xCOMMENT;
                                        }
 
-<xVAR>{LEXEMCHAR}+     {
-                                               yylval.str      = strlower(mcnstrdup(lexContext, yytext, yyleng));
-                                               return  getIdent(yylval.str);
-                                       }
-
-<xVAR>\|\|                     { return OR_P; }
-
-<xVAR>[,\|\^]          {
+<xVAR>[,\|#]           {
                                                yylval.punct = *yytext;
                                                return yylval.punct;
                                        }
@@ -101,11 +96,47 @@ PATH               [a-zA-Z0-9_/\.]
                                                addchar(*yytext); 
                                        }
 
-<xEXPR>{LEXEMCHAR}+ {
+<xEXPR,xVAR>{DIGIT}+   {
+                                       yylval.intval = atoi(yytext);
+                                               return INTEGER;
+                                       }
+
+<xEXPR,xVAR>{LEXEMCHARSTART}{LEXEMCHAR}* {
                                                yylval.str  = strlower(mcnstrdup(lexContext, yytext, yyleng));
                                                return  getIdent(yylval.str);
                                        }
 
+<xEXPR,xVAR>\|\|                       { return OR_P; }
+
+<xEXPR,xVAR>\&\&                       { return AND_P; }
+
+<xEXPR,xVAR>\!                 { return NOT_P; }
+
+<xEXPR,xVAR>[\^\%\+\*\/\-\(\)\?\:]             {
+                                               yylval.punct = *yytext;
+                                               return yylval.punct;
+                                       }
+
+<xEXPR,xVAR>(\<|\<=|\>=|\>|==|\!=|\<\>)        {
+                                               yylval.str  = mcnstrdup(lexContext, yytext, yyleng);
+                                               return CMP_P;
+                                       }
+
+<xEXPR,xVAR>{DIGIT}+"."{DIGIT}+        {
+                                       yylval.floatval = atof(yytext);
+                                               return DOUBLE;
+                                       }
+
+<xEXPR,xVAR>{DIGIT}+[eE]["+""-"]?{DIGIT}+    {
+                                       yylval.floatval = atof(yytext);
+                                               return DOUBLE;
+                                       }
+
+<xEXPR,xVAR>{DIGIT}+"."{DIGIT}+[eE]["+""-"]?{DIGIT}+   {
+                                               yylval.floatval = atof(yytext);
+                                               return DOUBLE;
+                                       }
+
 <xEXPR>\@\>                    {
                                                BEGIN INITIAL;
                                                return  EXPR_CLOSE;
@@ -172,11 +203,9 @@ static KeyWord keywords[] = {
        { "H",                  0,      HTMLESCAPE      },
        { "U",                  0,      URLESCAPE       },
        { "IF",                 0,      IF_P            },
-       { "NOT",                0,      NOT_P           },
        { "ELSE",               0,      ELSE_P          },
        { "LOOP",               0,      LOOP_P          },
        { "ENDIF",              0,      ENDIF_P         },
-       { "DEFINED",    0,      DEFINED_P       }, 
        { "ENDLOOP",    0,      ENDLOOP_P       } 
 };