From: Michael D. Lowis Date: Mon, 25 Mar 2019 20:08:52 +0000 (-0400) Subject: removed old flex based lexer X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=447f68d8844b8402a7ff1710a3ca9937fc5aa629;p=proto%2Fsclpl.git removed old flex based lexer --- diff --git a/source/lexer.l b/source/lexer.l deleted file mode 100644 index 4958cb4..0000000 --- a/source/lexer.l +++ /dev/null @@ -1,132 +0,0 @@ -%{ -#include - -static union { - char* text; - long long integer; - double floating; -} Value; - -static char* dupstring(const char* old) { - size_t length = strlen(old); - char* str = emalloc(length+1); - memcpy(str, old, length); - str[length] = '\0'; - return str; -} - -%} - -DIGIT [0-9] -ALPHA [a-zA_Z] -ALPHA_ [a-zA_Z_] -ALNUM_ [a-zA-Z0-9_] -SPACE [ \t\r\n] -NOSPACE [^ \t\r\n] - -%option noyywrap - -%% - -"\r\n" { yylineno++; } -"\n" { yylineno++; } -#.*[\r\n] { yylineno++; } -[ \t] { /* whitespace is insignificant */ } - -"require" { return T_REQUIRES; } -"provide" { return T_PROVIDES; } -"let" { return T_LET; } -"var" { return T_VAR; } -"fun" { return T_FUN; } -"type" { return T_TYPE; } -"struct" { return T_STRUCT; } -"union" { return T_UNION; } -"return" { return T_RETURN; } -"if" { return T_IF; } -"else" { return T_ELSE; } - -"(" { return '('; } -")" { return ')'; } -"[" { return '['; } -"]" { return ']'; } -"{" { return '{'; } -"}" { return '}'; } -"." { return '.'; } -"," { return ','; } -"'" { return '\''; } -":" { return ':'; } -"&" { return '&'; } -"=" { return '='; } -";" { return ';'; } -"*" { return '*'; } - -\\. { Value.integer = yytext[1]; return T_CHAR; } -\\space { Value.integer = ' '; return T_CHAR; } -\\newline { Value.integer = '\n'; return T_CHAR; } -\\return { Value.integer = '\r'; return T_CHAR; } -\\tab { Value.integer = '\t'; return T_CHAR; } -\\vtab { Value.integer = '\v'; return T_CHAR; } - -0b[01]+ { - Value.integer = strtol(&yytext[2], NULL, 2); - return T_INT; -} - -0o[0-7]+ { - Value.integer = strtol(&yytext[2], NULL, 8); - return T_INT; -} - -0d[0-9]+ { - Value.integer = strtol(&yytext[2], NULL, 10); - return T_INT; -} - -0h[0-9a-fA-F]+ { - Value.integer = strtol(&yytext[2], NULL, 16); - return T_INT; -} - -[+-]?[0-9]+ { - Value.integer = strtol(&yytext[0], NULL, 10); - return T_INT; -} - -[+-]?[0-9]+\.[0-9]+(e[+-]?[0-9]+)? { - Value.floating = strtod(yytext, NULL); - return T_FLOAT; -} - -\"([^"]|\\\")*\" { - size_t len = strlen(&yytext[1]); - Value.text = dupstring(&yytext[1]); - Value.text[len-1] = '\0'; - return T_STRING; -} - -true { - Value.integer = 1; - return T_BOOL; -} - -false { - Value.integer = 0; - return T_BOOL; -} - -[a-zA-Z_][a-zA-Z0-9_]* { - Value.text = dupstring(yytext); - return T_ID; -} - -<> { return T_END_FILE; } -. { return T_ERROR; } - -%% - -void gettoken(Parser* ctx) { - ctx->tok.line = yylineno; - ctx->tok.type = yylex(); - if (ctx->tok.type != T_END_FILE) - memcpy(&(ctx->tok.value), &Value, sizeof(Value)); -}