summaryrefslogtreecommitdiffstats
path: root/parser.y
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2012-01-25 21:04:11 -0800
committerKaz Kylheku <kaz@kylheku.com>2012-01-25 21:04:11 -0800
commit807e57014e153e9c8df24ef1515dded78b5fa068 (patch)
tree15896b4c52bf4439f2ccac40846675531a2bd95d /parser.y
parent31f335160a38e1a3f5202e93a5ac28f32ad3c27d (diff)
downloadtxr-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.y5
1 files changed, 4 insertions, 1 deletions
diff --git a/parser.y b/parser.y
index 8a3e8bbb..a3d28df1 100644
--- a/parser.y
+++ b/parser.y
@@ -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)