diff options
author | crupest <crupest@outlook.com> | 2021-12-02 21:59:36 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2021-12-02 21:59:36 +0800 |
commit | 27556004e8e12a72ed1c2c70212f6b660ed798c3 (patch) | |
tree | 9191fca88d48c97fce6e777037c93c57c29edad2 /works/life/compile-principle-experiment/4/lex.l | |
parent | e3fb643403ae71a38cba404e8d548d7a49cfdb88 (diff) | |
download | crupest-27556004e8e12a72ed1c2c70212f6b660ed798c3.tar.gz crupest-27556004e8e12a72ed1c2c70212f6b660ed798c3.tar.bz2 crupest-27556004e8e12a72ed1c2c70212f6b660ed798c3.zip |
import(life): ...
Diffstat (limited to 'works/life/compile-principle-experiment/4/lex.l')
-rw-r--r-- | works/life/compile-principle-experiment/4/lex.l | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/works/life/compile-principle-experiment/4/lex.l b/works/life/compile-principle-experiment/4/lex.l new file mode 100644 index 0000000..e7731ca --- /dev/null +++ b/works/life/compile-principle-experiment/4/lex.l @@ -0,0 +1,20 @@ +%{ +#include "main.h" +#include "syn.h" +%} +%option noyywrap +%% +[ \t] { ; } /* skip blanks and tabs */ +[0-9]+\.?|[0-9]*\.[0-9]+ { + Symbol *s = cru_symbol_install("", UNDEF, (SymbolValue)0.0); + sscanf(yytext, "%lf", &s->value.val); + yylval.sym = s; + return NUMBER; } +[a-zA-Z][a-zA-Z0-9]* { + Symbol *s; + if ((s=cru_symbol_lookup(yytext)) == 0) + s = cru_symbol_install(yytext, UNDEF, (SymbolValue)0.0); + yylval.sym = s; + return s->type == UNDEF ? VAR : s->type; } +\n { lineno++; return '\n'; } /* everything else */ +. { return yytext[0]; } |