diff --git a/edify/lexer.l b/edify/lexer.l
new file mode 100644
index 0000000..4faef5d
--- /dev/null
+++ b/edify/lexer.l
@@ -0,0 +1,97 @@
+%{
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "expr.h"
+#include "parser.h"
+
+int gLine = 1;
+int gColumn = 1;
+
+// TODO: enforce MAX_STRING_LEN during lexing
+char string_buffer[MAX_STRING_LEN];
+char* string_pos;
+%}
+
+%x STR
+
+%option noyywrap
+
+%%
+
+
+\" {
+    ++gColumn;
+    BEGIN(STR);
+    string_pos = string_buffer;
+}
+
+<STR>{
+  \" {
+      ++gColumn;
+      BEGIN(INITIAL);
+      *string_pos = '\0';
+      yylval.str = strdup(string_buffer);
+      return STRING;
+  }
+
+  \\n   { gColumn += yyleng; *string_pos++ = '\n'; }
+  \\t   { gColumn += yyleng; *string_pos++ = '\t'; }
+  \\\"  { gColumn += yyleng; *string_pos++ = '\"'; }
+  \\\\  { gColumn += yyleng; *string_pos++ = '\\'; }
+
+  \\x[0-9a-fA-F]{2} {
+      gColumn += yyleng;
+      int val;
+      sscanf(yytext+2, "%x", &val);
+      *string_pos++ = val;
+  }
+
+  \n {
+      ++gLine;
+      gColumn = 1;
+      *string_pos++ = yytext[0];
+  }
+
+  . {
+      ++gColumn;
+      *string_pos++ = yytext[0];
+  }
+}
+
+if                { gColumn += yyleng; return IF; }
+then              { gColumn += yyleng; return THEN; }
+else              { gColumn += yyleng; return ELSE; }
+endif             { gColumn += yyleng; return ENDIF; }
+
+[a-zA-Z0-9_:/]+ {
+  gColumn += yyleng;
+  yylval.str = strdup(yytext);
+  return STRING;
+}
+
+\&\&              { gColumn += yyleng; return AND; }
+\|\|              { gColumn += yyleng; return OR; }
+==                { gColumn += yyleng; return EQ; }
+!=                { gColumn += yyleng; return NE; }
+
+[+(),!;]          { gColumn += yyleng; return yytext[0]; }
+
+[ \t]+            gColumn += yyleng;
+
+(#.*)?\n          { ++gLine; gColumn = 1; }
+
+.                 return BAD;
