diff options
Diffstat (limited to 'LuaSL/src/LuaSL_lexer.l')
-rw-r--r-- | LuaSL/src/LuaSL_lexer.l | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/LuaSL/src/LuaSL_lexer.l b/LuaSL/src/LuaSL_lexer.l index 2166743..9753a57 100644 --- a/LuaSL/src/LuaSL_lexer.l +++ b/LuaSL/src/LuaSL_lexer.l | |||
@@ -20,21 +20,19 @@ | |||
20 | %option align full | 20 | %option align full |
21 | 21 | ||
22 | HEX [[:xdigit:]] | 22 | HEX [[:xdigit:]] |
23 | NAME [[:alpha:]](_|[[:alpha:]]|[[:digit:]])* | ||
24 | INTEGER [[:digit:]]+ | 23 | INTEGER [[:digit:]]+ |
25 | EXPONANT [eE][+-]?{INTEGER} | 24 | EXPONANT [eE][+-]?{INTEGER} |
26 | FLOAT {INTEGER}("."{INTEGER})?{EXPONANT}? | 25 | FLOAT {INTEGER}("."{INTEGER})?{EXPONANT}? |
26 | NAME [[:alpha:]](_|[[:alpha:]]|[[:digit:]])* | ||
27 | 27 | ||
28 | %% | 28 | %% |
29 | 29 | ||
30 | /* Basic tokens */ | 30 | /* The order here is important, in mysterious ways. The more specific the lower in case of ambiguities like "floats contain integers". I think, not tested that well yet. */ |
31 | |||
32 | /* White space. */ | ||
31 | [[:space:]]+ %{ /* ECHO; yylval->spaceValue = strdup(yytext); return LSL_SPACE; */ %} | 33 | [[:space:]]+ %{ /* ECHO; yylval->spaceValue = strdup(yytext); return LSL_SPACE; */ %} |
32 | {NAME} %{ ECHO; /* yylval->nameValue = strdup(yytext); return LSL_NAME; */ %} | ||
33 | {INTEGER} %{ ECHO; yylval->integerValue = atoi(yytext); return LSL_INTEGER; %} | ||
34 | {FLOAT} %{ ECHO; /* yylval->floatValue = atof(yytext); return LSL_FLOAT; */ %} | ||
35 | 34 | ||
36 | /* Expression tokens */ | 35 | /* Operations. */ |
37 | ";" { ECHO; return LSL_STATEMENT; } | ||
38 | "&&" { ECHO; return LSL_BOOL_AND; } | 36 | "&&" { ECHO; return LSL_BOOL_AND; } |
39 | "||" { ECHO; return LSL_BOOL_OR; } | 37 | "||" { ECHO; return LSL_BOOL_OR; } |
40 | "|" { ECHO; return LSL_BIT_OR; } | 38 | "|" { ECHO; return LSL_BIT_OR; } |
@@ -58,6 +56,14 @@ FLOAT {INTEGER}("."{INTEGER})?{EXPONANT}? | |||
58 | "(" { ECHO; return LSL_PARENTHESIS_OPEN; } | 56 | "(" { ECHO; return LSL_PARENTHESIS_OPEN; } |
59 | ")" { ECHO; return LSL_PARENTHESIS_CLOSE; } | 57 | ")" { ECHO; return LSL_PARENTHESIS_CLOSE; } |
60 | 58 | ||
59 | /* Types. */ | ||
60 | {INTEGER} %{ ECHO; yylval->integerValue = atoi(yytext); return LSL_INTEGER; %} | ||
61 | {FLOAT} %{ ECHO; /* yylval->floatValue = atof(yytext); return LSL_FLOAT; */ %} | ||
62 | |||
63 | {NAME} %{ ECHO; /* yylval->nameValue = strdup(yytext); return LSL_NAME; */ %} | ||
64 | |||
65 | ";" { ECHO; return LSL_STATEMENT; } | ||
66 | |||
61 | <<EOF>> { yyterminate(); } | 67 | <<EOF>> { yyterminate(); } |
62 | 68 | ||
63 | /* Everything else */ | 69 | /* Everything else */ |