diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2012-01-25 21:04:11 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2012-01-25 21:04:11 -0800 |
commit | 807e57014e153e9c8df24ef1515dded78b5fa068 (patch) | |
tree | 15896b4c52bf4439f2ccac40846675531a2bd95d /parser.y | |
parent | 31f335160a38e1a3f5202e93a5ac28f32ad3c27d (diff) | |
download | txr-807e57014e153e9c8df24ef1515dded78b5fa068.tar.gz txr-807e57014e153e9c8df24ef1515dded78b5fa068.tar.bz2 txr-807e57014e153e9c8df24ef1515dded78b5fa068.zip |
* eval.c (eval_init): New functions registered.
* lib.c (sub_list, replace_list, vectorp): New functions.
(sub_vec): Allow negative indices from end of array.
(replace_vec): New function.
* lib.h (sub_list, replace_list, vectorp, replace_vec): Declared.
* parser.l (DOTDOT): Scan .. as new token.
* parser.y (DOTDOT): New token.
(expr): New syntax with DOTDOT.
(yybadtoken): Handle DOTDOT.
* txr.vim: Added new functions. Also missing append* and dwim.
* txr.1: Updated.
Diffstat (limited to 'parser.y')
-rw-r--r-- | parser.y | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -72,7 +72,7 @@ static val parsed_spec; %token <lineno> UNTIL COLL OUTPUT REPEAT REP SINGLE FIRST LAST EMPTY %token <lineno> MOD MODLAST DEFINE TRY CATCH FINALLY %token <lineno> ERRTOK /* deliberately not used in grammar */ -%token <lineno> HASH_BACKSLASH +%token <lineno> HASH_BACKSLASH DOTDOT %token <val> NUMBER @@ -106,6 +106,7 @@ static val parsed_spec; %left '&' %right '~' '*' '?' '+' '%' %right '.' REGCHAR LITCHAR +%right DOTDOT %% @@ -711,6 +712,7 @@ expr : IDENT { $$ = rl(intern(string_own($1), nil), | chrlit { $$ = rl($1, num(lineno)); } | strlit { $$ = $1; } | quasilit { $$ = $1; } + | expr DOTDOT expr { $$ = list(cons_s, $1, $3, nao); } ; regex : '/' regexpr '/' { $$ = cons(regex_s, $2); end_of_regex(); @@ -1064,6 +1066,7 @@ void yybadtoken(int tok, val context) case LITCHAR: problem = lit("string literal character"); break; case METAPAR: problem = lit("@("); break; case METABKT: problem = lit("@["); break; + case DOTDOT: problem = lit(".."); break; } if (problem != 0) |