aboutsummaryrefslogtreecommitdiff
path: root/src/lexer.l
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2024-04-09 02:50:34 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2024-04-09 02:50:34 +0300
commite5f9d49e39210fe634305d57f1b01e013d66aa71 (patch)
tree980b72d145339702a49557215567e3afbf3d7e35 /src/lexer.l
parent170f3ddc3d8967c0b5d4755c0221c396db215b2f (diff)
downloadek-e5f9d49e39210fe634305d57f1b01e013d66aa71.tar.gz
ek-e5f9d49e39210fe634305d57f1b01e013d66aa71.zip
simplify ast definition
+ Makes it a lot nicer to work with.
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;
}