summaryrefslogtreecommitdiffstats
path: root/lexer/theme-lexer.l
diff options
context:
space:
mode:
Diffstat (limited to 'lexer/theme-lexer.l')
-rw-r--r--lexer/theme-lexer.l33
1 files changed, 33 insertions, 0 deletions
diff --git a/lexer/theme-lexer.l b/lexer/theme-lexer.l
new file mode 100644
index 00000000..4094a256
--- /dev/null
+++ b/lexer/theme-lexer.l
@@ -0,0 +1,33 @@
+%option noyywrap
+
+%{
+#include <stdio.h>
+
+
+#include "lexer/theme-parser.tab.h"
+int yylex(void);
+#define YY_DECL int yylex()
+
+%}
+
+%%
+
+"@" { return CLASS;}
+"\{" { return BOPEN;}
+"\}" { return BCLOSE;}
+":" { return PSEP; }
+";" { return PCLOSE;}
+"." { return NSEP; }
+[ \t] ; // ignore all whitespace
+[0-9]+\.[0-9]+ { yylval.fval = g_ascii_strtod(yytext, NULL); return T_FLOAT;}
+[0-9]+ { yylval.ival = (int)g_ascii_strtoll(yytext, NULL, 10); return T_INT;}
+(true|false) { yylval.bval= g_strcmp0(yytext, "true") == 0; return T_BOOLEAN;}
+[a-zA-Z0-9]+ { yylval.sval = g_strdup(yytext); return N_STRING;}
+\"[a-zA-Z0-9]+\" { yylval.sval = g_strdup(yytext); return T_STRING;}
+#[0-9A-Fa-f]+ { yylval.colorval = (unsigned int)strtoull ( &yytext[1], NULL, 16); return T_COLOR;}
+[\r\n]+ ;
+
+<*><<EOF>> {
+ yyterminate();
+}
+%%