tokenizer init
This commit is contained in:
commit
8b790839df
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* flex tokenize.l
|
||||
* cc lex.yy.c -lfl
|
||||
*/
|
||||
%{
|
||||
enum yytokentype {
|
||||
NUMBER = 258,
|
||||
LPAR = 259,
|
||||
RPAR = 260,
|
||||
SYM = 261,
|
||||
STR = 262,
|
||||
EOL = 263
|
||||
};
|
||||
|
||||
int yylval;
|
||||
char *yystr;
|
||||
%}
|
||||
|
||||
%%
|
||||
"(" { return LPAR; }
|
||||
")" { return RPAR; }
|
||||
[0-9]+ { yylval = atoi(yytext); return NUMBER; }
|
||||
[ \t\n] { /* ignore white space */ }
|
||||
\".*\" { printf("str: %s\n", yytext); }
|
||||
[a-zA-Z][a-zA-Z0-9]* { printf("sym: %s\n", yytext); }
|
||||
. { printf("error: %s\n", yytext); }
|
||||
%%
|
||||
|
||||
|
||||
/*
|
||||
* Goal: write LISP read-eval-print Loop and support
|
||||
* @ Function
|
||||
* 0,1 boolean (nand 0 1) -> boolean
|
||||
* (eq 0 0) -> boolean
|
||||
* "str" Strings (streq str1 str2) -> boolean
|
||||
* abc Symboles (symeq s1 s2) -> boolean
|
||||
* 1234 Number/Integer [add,sub,div,mul,mod] -> number
|
||||
* [lt, numeq] -> boolean
|
||||
*
|
||||
* (define a <symbol,number,#function)
|
||||
* (lambda (param ..) (.. body ..))
|
||||
* (if <bool> <body> <else>)
|
||||
*/
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int tok;
|
||||
|
||||
while(tok = yylex()) {
|
||||
printf("token: %d\n", tok);
|
||||
if(tok == NUMBER) printf(" = %d\n", yylval);
|
||||
//else printf("\n");
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue