summaryrefslogtreecommitdiffstats
path: root/parser.l
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2011-11-26 09:54:49 -0800
committerKaz Kylheku <kaz@kylheku.com>2011-11-26 09:54:49 -0800
commitbb83f68455149edd0acd6996115de881ed0e77a2 (patch)
treeebb45a058cc59b2c3b8a3c9e63fc2c0864c1ae6e /parser.l
parent21d250ce79f3c3a109731eeee7d67d757031dc1d (diff)
downloadtxr-bb83f68455149edd0acd6996115de881ed0e77a2.tar.gz
txr-bb83f68455149edd0acd6996115de881ed0e77a2.tar.bz2
txr-bb83f68455149edd0acd6996115de881ed0e77a2.zip
Task #11436
Lisp interpreter added. * gc.c (finalize, mark_obj): Handle ENV objects. * hash.c (struct hash): acons_new_l_fun function pointer order of arguments change. (equal_hash): Handle ENV. (make_hash, gethash_l): Use cobj_handle for type safety. Follow change in acons_new_l. (gethash, gethash_f, remhash, hash_count, hash_get_userdata, hash_set_userdata, hash_next): Use cobj_handle. (gethash_n): New function. * hash.h (gethash_n): Declared. * lib.c (env_s): New symbol variable. (code2type, equal): Handle ENV. (plusv, minusv, mul, mulv, trunc, mod, gtv, ltv, gev, lev, maxv, minv, int_str): New functions. (rehome_sym): New static function. (func_f0, func_f1, func_f2, func_f3, func_f4, func_n0, func_n1, func_n2, func_n3, func_n4): Initialize new fields of struct func. (func_f0v, func_f1v, func_f2v, func_f3v, func_f4v, func_n0v, func_n1v, func_n2v, func_n3v, func_n4v, func_interp): New functions. (apply): Function removed: sanely re-implemented in new eval.c file. (funcall, funcall1, funcall2, funcall3, funcall4): Handle variadic and interpreted functions. (acons, acons_new, acons_new_l, aconsq_new, aconsq_new_l): Reordered arguments for compatibility with Common Lisp acons. (obj_init): Special hack to prepare hash_s symbol, which is needed for type checking inside the hash table funtions invoked by make_package, at a time when the symbol is not yet interned. Initialize new env_s variable. (obj_print, obj_pprint): Handle ENV. Fix confusing rendering of of function type. (init): Call new function eval_init. * lib.h (enum type): New enumeration member ENV. (struct func): functype member changed to bitfield. New bitfied members minparam and variadic. New members in f union: f0v, f1v, f2v, f3v, f4v, n0v, n1v, n2v, n3v, n4v. (struct env): New type. (union obj): New member e of type struct env. (env_s): Variable declared. (plusv, minusv, mul, mulv, trunc, mod, gtv, ltv, gev, lev, maxv, minv,
Diffstat (limited to 'parser.l')
-rw-r--r--parser.l12
1 files changed, 5 insertions, 7 deletions
diff --git a/parser.l b/parser.l
index d6be1239..a4649473 100644
--- a/parser.l
+++ b/parser.l
@@ -146,10 +146,11 @@ static wchar_t num_esc(char *num)
%option nounput
%option noinput
-SYM [a-zA-Z_][a-zA-Z0-9_]*
-NUM [+-]?[0-9]+
-TOK :?{SYM}|{NUM}
-NTOK [:@]?{SYM}|{NUM}
+SYM [a-zA-Z0-9_]+
+NSCHR [a-zA-Z0-9!$%&*+\-<=>?\\^_~]
+NSYM {NSCHR}({NSCHR}|#)*
+TOK :?{SYM}
+NTOK [:@]?{NSYM}
ID_END [^a-zA-Z0-9_]
WS [\t ]*
HEX [0-9A-Fa-f]
@@ -360,9 +361,6 @@ UONLY {U2}{U}|{U3}{U}{U}|{U4}{U}{U}{U}
<NESTED>@\( |
<SPECIAL,NESTED>\{|\( {
yy_push_state(NESTED);
- if (yy_top_state() == INITIAL
- || yy_top_state() == QSILIT)
- yy_pop_state();
if (yytext[0] == '@') {
yylval.chr = '(';
return METAPAR;