aboutsummaryrefslogtreecommitdiff
path: root/src/lexer.l
diff options
context:
space:
mode:
Diffstat (limited to 'src/lexer.l')
-rw-r--r--src/lexer.l36
1 files changed, 13 insertions, 23 deletions
diff --git a/src/lexer.l b/src/lexer.l
index c819328..b38833d 100644
--- a/src/lexer.l
+++ b/src/lexer.l
@@ -84,36 +84,26 @@ STRING \"(\\.|[^"\\])*\"
"%" {return REM;}
"^" {return XOR;}
-'[^'\\]' {
- /* regular character constant, 'a' */
- yylval->integer = yytext[1];
- return INT;
+"true" {
+ yylval->integer = 1;
+ return BOOL;
}
-'\\x[0-9a-fA-F]+' {
- /* hex character constant, '\xef' */
- /* handling is slightly different from C, here it's more or less just
- * another way to specify a hex integer */
- yylval->integer = strtoll(yytext + 3, NULL, 16);
- return INT;
-}
-
-'\\[0-8]+' {
- /* octal character constant, '\033' */
- yylval->integer = strtoll(yytext + 2, NULL, 8);
- return INT;
+"false" {
+ yylval->integer = 0;
+ return BOOL;
}
-'\\b[01]+' {
- /* binary character constant, '\b101' */
- yylval->integer = strtoll(yytext + 3, NULL, 2);
- return INT;
+'[^'\\]' {
+ /* regular character constant, 'a' */
+ yylval->integer = yytext[1];
+ return CHAR;
}
'\\.' {
/* escaped character constant */
yylval->integer = match_escape(yytext[2]);
- return INT;
+ return CHAR;
}
"?" {return QUESTION;}
@@ -185,7 +175,7 @@ STRING \"(\\.|[^"\\])*\"
}
{ID} {
- yylval->str = yytext;
+ yylval->str = strdup(yytext);
return ID;
}
@@ -194,7 +184,7 @@ STRING \"(\\.|[^"\\])*\"
char *s = yytext + strlen(yytext);
s[-1] = '\0';
- yylval->str = yytext;
+ yylval->str = strdup(yytext);
return APPLY;
}