diff --git a/src/macro/Parser.yy b/src/macro/Parser.yy
index adefe52b588071ec4cfdd43ebf25decf4fe2cefe..7045479557cbde8dba34a09e146e9b825c5f0068 100644
--- a/src/macro/Parser.yy
+++ b/src/macro/Parser.yy
@@ -64,11 +64,11 @@ using namespace macro;
 %token FOR ENDFOR IF IFDEF IFNDEF ELSE ENDIF TRUE FALSE
 %token INCLUDE INCLUDEPATH DEFINE EQUAL D_ECHO ERROR
 %token COMMA LPAREN RPAREN LBRACKET RBRACKET WHEN
-%token BEGIN_EVAL END_EVAL LENGTH ECHOMACROVARS
+%token BEGIN_EVAL END_EVAL ECHOMACROVARS
 
 %token EXP LOG LN LOG10 SIN COS TAN ASIN ACOS ATAN
 %token SQRT CBRT SIGN MAX MIN FLOOR CEIL TRUNC SUM MOD
-%token ERF ERFC GAMMA LGAMMA ROUND NORMPDF NORMCDF
+%token ERF ERFC GAMMA LGAMMA ROUND NORMPDF NORMCDF LENGTH
 
 %left OR
 %left AND
diff --git a/src/macro/Tokenizer.ll b/src/macro/Tokenizer.ll
index 5349eb865a5f19a5bb8af7c31e87304bbf64b7c4..938b9b674fe96b80cd2c878ebe412926f458e794 100644
--- a/src/macro/Tokenizer.ll
+++ b/src/macro/Tokenizer.ll
@@ -110,9 +110,8 @@ CONT \\\\{SPC}*
 <expr,eval>\)              { return token::RPAREN; }
 <expr,eval>\[              { return token::LBRACKET; }
 <expr,eval>\]              { return token::RBRACKET; }
-<expr,eval>IN              { return token::IN; }
-<expr,eval>WHEN            { return token::WHEN; }
-<expr,eval>LENGTH          { return token::LENGTH; }
+<expr,eval>in              { return token::IN; }
+<expr,eval>when            { return token::WHEN; }
 
 <expr,eval>true            { return token::TRUE; }
 <expr,eval>false           { return token::FALSE; }
@@ -142,6 +141,7 @@ CONT \\\\{SPC}*
 <expr,eval>gamma           { return token::GAMMA; }
 <expr,eval>lgamma          { return token::LGAMMA; }
 <expr,eval>round           { return token::ROUND; }
+<expr,eval>length          { return token::LENGTH; }
 <expr,eval>normpdf         { return token::NORMPDF; }
 <expr,eval>normcdf         { return token::NORMCDF; }