diff options
author | mongo <andmarti@gmail.com> | 2017-04-03 16:32:04 -0300 |
---|---|---|
committer | mongo <andmarti@gmail.com> | 2017-04-03 16:32:04 -0300 |
commit | 451d00fc159a9811f036994a39d2c8646d01e7ee (patch) | |
tree | b3c6588b79d444578ef5bc668562be5f0db40c39 /src/gram.y | |
parent | e829f116491fa441452cbc77cb52e1a511fb13ba (diff) |
cleaning code. removing unneeded/comments lines. starting to isolate UI code
Diffstat (limited to 'src/gram.y')
-rw-r--r-- | src/gram.y | 882 |
1 files changed, 409 insertions, 473 deletions
@@ -1,6 +1,6 @@ %{ -#include <ncurses.h> #include <stdlib.h> + #include "sc.h" #include "cmds.h" #include "color.h" @@ -16,7 +16,7 @@ #include "conf.h" #include "pipe.h" #include "main.h" -#include "screen.h" +#include "tui.h" #include "freeze.h" #include "undo.h" #include "dep_graph.h" @@ -27,7 +27,6 @@ void yyerror(char *err); // error routine for yacc (gram.y) int yylex(); - #ifdef USELOCALE #include <locale.h> #endif @@ -84,15 +83,12 @@ int yylex(); %token S_MARK %token S_AUTOJUS %token S_PAD - /* -token <ival> CARACTER token S_INSERTCOL token S_OPENCOL token S_DELETECOL token S_YANKCOL */ - %token S_DATEFMT %token S_FORMAT %token S_FMT @@ -115,7 +111,6 @@ token S_YANKCOL %token S_SEVAL %token S_ERROR %token S_FILL - /* token S_ADDNOTE token S_DELNOTE @@ -180,7 +175,6 @@ token S_YANKCOL token S_PLUGIN token S_PLUGOUT */ - %token S_SHIFT %token S_GETNUM %token S_GETSTRING @@ -236,13 +230,8 @@ token S_YANKCOL %token K_NOXLSX_READFORMULAS %token K_IGNORECASE %token K_NOIGNORECASE - %token K_TM_GMTOFF %token K_NEWLINE_ACTION - - - - %token K_ERROR %token K_INVALID %token K_FIXED @@ -425,7 +414,6 @@ command: $2.left.vp->cellerror = CELLOK; $2.left.vp->flags &= ~is_valid; $2.left.vp->flags |= is_changed; - //changed++; modflg++; #ifdef UNDO @@ -568,102 +556,101 @@ command: | S_LOCK var_or_range { lock_cells($2.left.vp, $2.right.vp); } | S_UNLOCK var_or_range { unlock_cells($2.left.vp, $2.right.vp); } - | S_NMAP STRING STRING { - add_map($2, $3, NORMAL_MODE, 1); - scxfree($2); - scxfree($3); - } - - | S_IMAP STRING STRING - { - add_map($2, $3, INSERT_MODE, 1); - scxfree($2); - scxfree($3); - } - | S_NNOREMAP STRING STRING { - add_map($2, $3, NORMAL_MODE, 0); - scxfree($2); - scxfree($3); - } - - | S_INOREMAP STRING STRING { - add_map($2, $3, INSERT_MODE, 0); - scxfree($2); - scxfree($3); - } - - - | S_NUNMAP STRING { - del_map($2, NORMAL_MODE); - scxfree($2); - } - - | S_IUNMAP STRING { - del_map($2, INSERT_MODE); - scxfree($2); - } - - | S_COLOR STRING { + | S_NMAP STRING STRING { + add_map($2, $3, NORMAL_MODE, 1); + scxfree($2); + scxfree($3); + } + + | S_IMAP STRING STRING { + add_map($2, $3, INSERT_MODE, 1); + scxfree($2); + scxfree($3); + } + | S_NNOREMAP STRING STRING { + add_map($2, $3, NORMAL_MODE, 0); + scxfree($2); + scxfree($3); + } + + | S_INOREMAP STRING STRING { + add_map($2, $3, INSERT_MODE, 0); + scxfree($2); + scxfree($3); + } + + | S_NUNMAP STRING { + del_map($2, NORMAL_MODE); + scxfree($2); + } + + | S_IUNMAP STRING { + del_map($2, INSERT_MODE); + scxfree($2); + } + + | S_COLOR STRING { #ifdef USECOLORS - chg_color($2); + chg_color($2); #endif - scxfree($2); - } + scxfree($2); + } - | S_CELLCOLOR var_or_range STRING { + | S_CELLCOLOR var_or_range STRING + { #ifdef USECOLORS - if ( ! atoi(get_conf_value("nocurses"))) - color_cell($2.left.vp->row, $2.left.vp->col, $2.right.vp->row, $2.right.vp->col, $3); + if ( ! atoi(get_conf_value("nocurses"))) + color_cell($2.left.vp->row, $2.left.vp->col, $2.right.vp->row, $2.right.vp->col, $3); #endif - scxfree($3); - } + scxfree($3); + } | S_TRIGGER var_or_range STRING { set_trigger($2.left.vp->row, $2.left.vp->col, $2.right.vp->row, $2.right.vp->col, $3); scxfree($3); } - | S_UNTRIGGER var_or_range { - del_trigger($2.left.vp->row, $2.left.vp->col, $2.right.vp->row, $2.right.vp->col); - } + | S_UNTRIGGER var_or_range { + del_trigger($2.left.vp->row, $2.left.vp->col, $2.right.vp->row, $2.right.vp->col); + } - | S_CELLCOLOR STRING { + | S_CELLCOLOR STRING { #ifdef USECOLORS - if ( ! atoi(get_conf_value("nocurses"))) - color_cell(currow, curcol, currow, curcol, $2); + if ( ! atoi(get_conf_value("nocurses"))) + color_cell(currow, curcol, currow, curcol, $2); #endif - scxfree($2); - } + scxfree($2); + } - | S_UNFORMAT var_or_range { + | S_UNFORMAT var_or_range { #ifdef USECOLORS - if ( ! atoi(get_conf_value("nocurses"))) unformat($2.left.vp->row, $2.left.vp->col, $2.right.vp->row, $2.right.vp->col); + if ( ! atoi(get_conf_value("nocurses"))) unformat($2.left.vp->row, $2.left.vp->col, $2.right.vp->row, $2.right.vp->col); #endif - } + } - | S_UNFORMAT { + | S_UNFORMAT { #ifdef USECOLORS - if ( ! atoi(get_conf_value("nocurses"))) unformat(currow, curcol, currow, curcol); + if ( ! atoi(get_conf_value("nocurses"))) unformat(currow, curcol, currow, curcol); #endif - } + } | S_REDEFINE_COLOR STRING NUMBER NUMBER NUMBER { redefine_color($2, $3, $4, $5); scxfree($2); } - | S_FCOPY { fcopy(); } - | S_FSUM { fsum(); } - | S_PAD NUMBER COL ':' COL { pad($2, 0, $3, maxrow, $5); } - | S_PAD NUMBER COL { pad($2, 0, $3, maxrow, $3); } - | S_PAD NUMBER var_or_range { pad($2, $3.left.vp->row, $3.left.vp->col, $3.right.vp->row, $3.right.vp->col); } + | S_FCOPY { fcopy(); } + | S_FSUM { fsum(); } + | S_PAD NUMBER COL ':' COL { pad($2, 0, $3, maxrow, $5); } + | S_PAD NUMBER COL { pad($2, 0, $3, maxrow, $3); } + | S_PAD NUMBER var_or_range { pad($2, $3.left.vp->row, $3.left.vp->col, $3.right.vp->row, $3.right.vp->col); } -/* | S_SET STRING { parse_str(user_conf_d, $2); - scxfree($2); - } +/* | S_SET STRING { parse_str(user_conf_d, $2); + scxfree($2); + } */ - | S_SET setlist { } //sc_info("INT: Config value changed: %s", $2); } + | S_SET setlist { } //sc_info("INT: Config value changed: %s", $2); } /* - | S_DEFINE strarg { struct ent_ptr arg1, arg2; + | S_DEFINE strarg { struct ent_ptr arg1, arg2; arg1.vp = lookat(showsr, showsc); arg1.vf = 0; arg2.vp = lookat(currow, curcol); @@ -672,99 +659,68 @@ command: add_range($2, arg2, arg2, 0); else add_range($2, arg1, arg2, 1); - } + } */ - | S_DEFINE strarg range { add_range($2, $3.left, $3.right, 1); } - | S_DEFINE strarg var { add_range($2, $3, $3, 0); } -/* | S_DEFINE strarg NUMBER { info("%s %d", $2, $3); get_key(); } */ - | S_UNDEFINE var_or_range { del_range($2.left.vp, $2.right.vp); } - - | S_EVAL e { eval_result = eval(NULL, $2); - efree($2); - } - | S_QUIT { printf("quitting. unsaved changes will be lost.\n"); - shall_quit = 2; // unsaved changes are lost! - } - | S_REBUILD_GRAPH { rebuild_graph(); - update(FALSE); - } - - | S_PRINT_GRAPH { print_vertexs(); } - | S_SYNCREFS { sync_refs(); } - | S_UNDO { - do_undo(); - // sync_refs(); - EvalAll(); - update(TRUE); - } - - | S_REDO { - do_redo(); - // sync_refs(); - EvalAll(); - update(TRUE); - } - + | S_DEFINE strarg range { add_range($2, $3.left, $3.right, 1); } + | S_DEFINE strarg var { add_range($2, $3, $3, 0); } +/* | S_DEFINE strarg NUMBER { info("%s %d", $2, $3); get_key(); } */ + | S_UNDEFINE var_or_range { del_range($2.left.vp, $2.right.vp); } + + | S_EVAL e { + eval_result = eval(NULL, $2); + efree($2); + } + | S_QUIT { + printf("quitting. unsaved changes will be lost.\n"); + shall_quit = 2; // unsaved changes are lost! + } + | S_REBUILD_GRAPH { + rebuild_graph(); + update(FALSE); + } + + | S_PRINT_GRAPH { print_vertexs(); } + | S_SYNCREFS { sync_refs(); } + | S_UNDO { + do_undo(); + // sync_refs(); + EvalAll(); + update(TRUE); + } + + | S_REDO { + do_redo(); + // sync_refs(); + EvalAll(); + update(TRUE); + } // For scripting and piping - | S_RECALC { - EvalAll(); - //update(1); - //changed = 0; - } - | S_GETNUM var_or_range { - getnum($2.left.vp->row, $2.left.vp->col, $2.right.vp->row, $2.right.vp->col, fdoutput); - } - - | S_GETSTRING var_or_range { getstring($2.left.vp->row, $2.left.vp->col, $2.right.vp->row, $2.right.vp->col, fdoutput); } + | S_RECALC { + EvalAll(); + //update(1); + //changed = 0; + } + | S_GETNUM var_or_range { + getnum($2.left.vp->row, $2.left.vp->col, $2.right.vp->row, $2.right.vp->col, fdoutput); + } - | S_GETEXP var_or_range { getexp($2.left.vp->row, $2.left.vp->col, $2.right.vp->row, $2.right.vp->col, fdoutput); } + | S_GETSTRING var_or_range { getstring($2.left.vp->row, $2.left.vp->col, $2.right.vp->row, $2.right.vp->col, fdoutput); } - | S_GETFORMAT COL { getformat($2, fdoutput); } + | S_GETEXP var_or_range { getexp($2.left.vp->row, $2.left.vp->col, $2.right.vp->row, $2.right.vp->col, fdoutput); } - | S_GETFMT var_or_range { getfmt($2.left.vp->row, $2.left.vp->col, $2.right.vp->row, $2.right.vp->col, fdoutput); } + | S_GETFORMAT COL { getformat($2, fdoutput); } - | S_SEVAL e { seval_result = seval(NULL, $2); // TODO make sure this seval_result is always freed afterwards - efree($2); - } - | S_ERROR STRING { sc_error($2); } + | S_GETFMT var_or_range { getfmt($2.left.vp->row, $2.left.vp->col, $2.right.vp->row, $2.right.vp->col, fdoutput); } -/* - | S_REDRAW { if (usecurses) { - clearok(stdscr, TRUE); - linelim = -1; - update(1); - refresh(); - changed = 0; - } - } - - | S_RUN STRING { //deraw(1); - system($2); - if (*($2 + strlen($2) - 1) != '&') { - printf("Press any key to continue "); - fflush(stdout); - cbreak(); - get_key(); - } - //goraw(); - scxfree($2); } - - - - | S_PLUGIN STRING '=' STRING - { addplugin($2, $4, 'r'); } - | S_PLUGOUT STRING '=' STRING - { addplugin($2, $4, 'w'); } - | PLUGIN { *line = '|'; - sprintf(line + 1, $1); - readfile(line, 0); - scxfree($1); } + | S_SEVAL e { seval_result = seval(NULL, $2); // TODO make sure this seval_result is always freed afterwards + efree($2); + } + | S_ERROR STRING { sc_error($2); } -*/ - | // nothing - | error { + | // nothing + | error { sc_error("syntax error"); line[0]='\0'; linelim = 0; @@ -772,263 +728,256 @@ command: linelim = -1; yyerrok; }; -term: var { $$ = new_var(O_VAR, $1); } - | '@' K_FIXED term { $$ = new('f', $3, ENULL); } - | '(' '@' K_FIXED ')' term - { $$ = new('F', $5, ENULL); } - | '@' K_SUM '(' var_or_range ')' - { $$ = new(SUM, - new_range(REDUCE | SUM, $4), ENULL); } - | '@' K_SUM '(' range ',' e ')' - { $$ = new(SUM, - new_range(REDUCE | SUM, $4), $6); } - | '@' K_PROD '(' var_or_range ')' - { $$ = new(PROD, - new_range(REDUCE | PROD, $4), ENULL); } - | '@' K_PROD '(' range ',' e ')' - { $$ = new(PROD, - new_range(REDUCE | PROD, $4), $6); } - | '@' K_AVG '(' var_or_range ')' - { $$ = new(AVG, - new_range(REDUCE | AVG, $4), ENULL); } - | '@' K_AVG '(' range ',' e ')' - { $$ = new(AVG, - new_range(REDUCE | AVG, $4), $6); } - | '@' K_STDDEV '(' var_or_range ')' - { $$ = new(STDDEV, - new_range(REDUCE | STDDEV, $4), ENULL); } - | '@' K_STDDEV '(' range ',' e ')' - { $$ = new(STDDEV, - new_range(REDUCE | STDDEV, $4), $6); } - | '@' K_COUNT '(' var_or_range ')' - { $$ = new(COUNT, - new_range(REDUCE | COUNT, $4), ENULL); } - | '@' K_COUNT '(' range ',' e ')' - { $$ = new(COUNT, - new_range(REDUCE | COUNT, $4), $6); } - | '@' K_MAX '(' var_or_range ')' - { $$ = new(MAX, - new_range(REDUCE | MAX, $4), ENULL); } - | '@' K_MAX '(' range ',' e ')' - { $$ = new(MAX, - new_range(REDUCE | MAX, $4), $6); } - | '@' K_MAX '(' e ',' expr_list ')' - { $$ = new(LMAX, $6, $4); } - | '@' K_MIN '(' var_or_range ')' - { $$ = new(MIN, - new_range(REDUCE | MIN, $4), ENULL); } - | '@' K_MIN '(' range ',' e ')' - { $$ = new(MIN, - new_range(REDUCE | MIN, $4), $6); } - | '@' K_MIN '(' e ',' expr_list ')' - { $$ = new(LMIN, $6, $4); } - | '@' K_ROWS '(' var_or_range ')' - { $$ = new_range(REDUCE | 'R', $4); } - | '@' K_COLS '(' var_or_range ')' - { $$ = new_range(REDUCE | 'C', $4); } - | '@' K_ABS '(' e ')' { $$ = new(ABS, $4, ENULL); } - | '@' K_FROW '(' e ')' { $$ = new(FROW, $4, ENULL); } - | '@' K_FCOL '(' e ')' { $$ = new(FCOL, $4, ENULL); } - | '@' K_ACOS '(' e ')' { $$ = new(ACOS, $4, ENULL); } - | '@' K_ASIN '(' e ')' { $$ = new(ASIN, $4, ENULL); } - | '@' K_ATAN '(' e ')' { $$ = new(ATAN, $4, ENULL); } - | '@' K_ATAN2 '(' e ',' e ')' { $$ = new(ATAN2, $4, $6); } - | '@' K_CEIL '(' e ')' { $$ = new(CEIL, $4, ENULL); } - | '@' K_COS '(' e ')' { $$ = new(COS, $4, ENULL); } - | '@' K_EXP '(' e ')' { $$ = new(EXP, $4, ENULL); } - | '@' K_FABS '(' e ')' { $$ = new(FABS, $4, ENULL); } - | '@' K_FLOOR '(' e ')' { $$ = new(FLOOR, $4, ENULL); } - | '@' K_HYPOT '(' e ',' e ')' { $$ = new(HYPOT, $4, $6); } - | '@' K_LN '(' e ')' { $$ = new(LOG, $4, ENULL); } - | '@' K_LOG '(' e ')' { $$ = new(LOG10, $4, ENULL); } - | '@' K_POW '(' e ',' e ')' { $$ = new(POW, $4, $6); } - | '@' K_SIN '(' e ')' { $$ = new(SIN, $4, ENULL); } - | '@' K_SQRT '(' e ')' { $$ = new(SQRT, $4, ENULL); } - | '@' K_TAN '(' e ')' { $$ = new(TAN, $4, ENULL); } - | '@' K_DTR '(' e ')' { $$ = new(DTR, $4, ENULL); } - | '@' K_RTD '(' e ')' { $$ = new(RTD, $4, ENULL); } - | '@' K_RND '(' e ')' { $$ = new(RND, $4, ENULL); } - | '@' K_ROUND '(' e ',' e ')' { $$ = new(ROUND, $4, $6); } - | '@' K_IF '(' e ',' e ',' e ')' { $$ = new(IF, $4,new(',',$6,$8)); } - - | '@' K_PV '(' e ',' e ',' e ')' { $$ = new(PV, $4,new(':',$6,$8)); } - | '@' K_FV '(' e ',' e ',' e ')' { $$ = new(FV, $4,new(':',$6,$8)); } - | '@' K_PMT '(' e ',' e ',' e ')' { $$ = new(PMT, $4,new(':',$6,$8)); } - - | '@' K_HOUR '(' e ')' { $$ = new(HOUR, $4, ENULL); } - | '@' K_MINUTE '(' e ')' { $$ = new(MINUTE, $4, ENULL); } - | '@' K_SECOND '(' e ')' { $$ = new(SECOND, $4, ENULL); } - | '@' K_MONTH '(' e ')' { $$ = new(MONTH, $4, ENULL); } - | '@' K_DAY '(' e ')' { $$ = new(DAY, $4, ENULL); } - | '@' K_YEAR '(' e ')' { $$ = new(YEAR, $4, ENULL); } - | '@' K_NOW { $$ = new(NOW, ENULL, ENULL);} - | '@' K_DTS '(' e ',' e ',' e ')' - { $$ = new(DTS, $4, new(',', $6, $8));} - | NUMBER '.' NUMBER '.' NUMBER { $$ = new(DTS, - new_const(O_CONST, (double) $1), - new(',', new_const(O_CONST, (double) $3), - new_const(O_CONST, (double) $5)));} +term: var { $$ = new_var(O_VAR, $1); } + | '@' K_FIXED term { $$ = new('f', $3, ENULL); } + | '(' '@' K_FIXED ')' term + { $$ = new('F', $5, ENULL); } + | '@' K_SUM '(' var_or_range ')' + { $$ = new(SUM, new_range(REDUCE | SUM, $4), ENULL); } + | '@' K_SUM '(' range ',' e ')' + { $$ = new(SUM, new_range(REDUCE | SUM, $4), $6); } + | '@' K_PROD '(' var_or_range ')' + { $$ = new(PROD, new_range(REDUCE | PROD, $4), ENULL); } + | '@' K_PROD '(' range ',' e ')' + { $$ = new(PROD, new_range(REDUCE | PROD, $4), $6); } + | '@' K_AVG '(' var_or_range ')' + { $$ = new(AVG, new_range(REDUCE | AVG, $4), ENULL); } + | '@' K_AVG '(' range ',' e ')' + { $$ = new(AVG, new_range(REDUCE | AVG, $4), $6); } + | '@' K_STDDEV '(' var_or_range ')' + { $$ = new(STDDEV, new_range(REDUCE | STDDEV, $4), ENULL); } + | '@' K_STDDEV '(' range ',' e ')' + { $$ = new(STDDEV, new_range(REDUCE | STDDEV, $4), $6); } + | '@' K_COUNT '(' var_or_range ')' + { $$ = new(COUNT, new_range(REDUCE | COUNT, $4), ENULL); } + | '@' K_COUNT '(' range ',' e ')' + { $$ = new(COUNT, new_range(REDUCE | COUNT, $4), $6); } + | '@' K_MAX '(' var_or_range ')' + { $$ = new(MAX, new_range(REDUCE | MAX, $4), ENULL); } + | '@' K_MAX '(' range ',' e ')' + { $$ = new(MAX, new_range(REDUCE | MAX, $4), $6); } + | '@' K_MAX '(' e ',' expr_list ')' + { $$ = new(LMAX, $6, $4); } + | '@' K_MIN '(' var_or_range ')' + { $$ = new(MIN, new_range(REDUCE | MIN, $4), ENULL); } + | '@' K_MIN '(' range ',' e ')' + { $$ = new(MIN, new_range(REDUCE | MIN, $4), $6); } + | '@' K_MIN '(' e ',' expr_list ')' + { $$ = new(LMIN, $6, $4); } + | '@' K_ROWS '(' var_or_range ')' + { $$ = new_range(REDUCE | 'R', $4); } + | '@' K_COLS '(' var_or_range ')' + { $$ = new_range(REDUCE | 'C', $4); } + | '@' K_ABS '(' e ')' { $$ = new(ABS, $4, ENULL); } + | '@' K_FROW '(' e ')' { $$ = new(FROW, $4, ENULL); } + | '@' K_FCOL '(' e ')' { $$ = new(FCOL, $4, ENULL); } + | '@' K_ACOS '(' e ')' { $$ = new(ACOS, $4, ENULL); } + | '@' K_ASIN '(' e ')' { $$ = new(ASIN, $4, ENULL); } + | '@' K_ATAN '(' e ')' { $$ = new(ATAN, $4, ENULL); } + | '@' K_ATAN2 '(' e ',' e ')' + { $$ = new(ATAN2, $4, $6); } + | '@' K_CEIL '(' e ')' { $$ = new(CEIL, $4, ENULL); } + | '@' K_COS '(' e ')' { $$ = new(COS, $4, ENULL); } + | '@' K_EXP '(' e ')' { $$ = new(EXP, $4, ENULL); } + | '@' K_FABS '(' e ')' { $$ = new(FABS, $4, ENULL); } + | '@' K_FLOOR '(' e ')' { $$ = new(FLOOR, $4, ENULL); } + | '@' K_HYPOT '(' e ',' e ')' + { $$ = new(HYPOT, $4, $6); } + | '@' K_LN '(' e ')' { $$ = new(LOG, $4, ENULL); } + | '@' K_LOG '(' e ')' { $$ = new(LOG10, $4, ENULL); } + | '@' K_POW '(' e ',' e ')' + { $$ = new(POW, $4, $6); } + | '@' K_SIN '(' e ')' { $$ = new(SIN, $4, ENULL); } + | '@' K_SQRT '(' e ')' { $$ = new(SQRT, $4, ENULL); } + | '@' K_TAN '(' e ')' { $$ = new(TAN, $4, ENULL); } + | '@' K_DTR '(' e ')' { $$ = new(DTR, $4, ENULL); } + | '@' K_RTD '(' e ')' { $$ = new(RTD, $4, ENULL); } + | '@' K_RND '(' e ')' { $$ = new(RND, $4, ENULL); } + | '@' K_ROUND '(' e ',' e ')' + { $$ = new(ROUND, $4, $6); } + | '@' K_IF '(' e ',' e ',' e ')' + { $$ = new(IF, $4,new(',',$6,$8)); } + | '@' K_PV '(' e ',' e ',' e ')' + { $$ = new(PV, $4,new(':',$6,$8)); } + | '@' K_FV '(' e ',' e ',' e ')' + { $$ = new(FV, $4,new(':',$6,$8)); } + | '@' K_PMT '(' e ',' e ',' e ')' + { $$ = new(PMT, $4,new(':',$6,$8)); } + | '@' K_HOUR '(' e ')' { $$ = new(HOUR, $4, ENULL); } + | '@' K_MINUTE '(' e ')' { $$ = new(MINUTE, $4, ENULL); } + | '@' K_SECOND '(' e ')' { $$ = new(SECOND, $4, ENULL); } + | '@' K_MONTH '(' e ')' { $$ = new(MONTH, $4, ENULL); } + | '@' K_DAY '(' e ')' { $$ = new(DAY, $4, ENULL); } + | '@' K_YEAR '(' e ')' { $$ = new(YEAR, $4, ENULL); } + | '@' K_NOW { $$ = new(NOW, ENULL, ENULL);} + | '@' K_DTS '(' e ',' e ',' e ')' + { $$ = new(DTS, $4, new(',', $6, $8));} + | NUMBER '.' NUMBER '.' NUMBER + { $$ = new(DTS, new_const(O_CONST, (double) $1), + new(',', new_const(O_CONST, (double) $3), + new_const(O_CONST, (double) $5)));} | '@' K_TTS '(' e ',' e ',' e ')' - { $$ = new(TTS, $4, new(',', $6, $8));} - | '@' K_STON '(' e ')' { $$ = new(STON, $4, ENULL); } - | '@' K_SLEN '(' e ')' { $$ = new(SLEN, $4, ENULL); } - | '@' K_EQS '(' e ',' e ')' { $$ = new(EQS, $4, $6); } - | '@' K_DATE '(' e ')' { $$ = new(DATE, $4, ENULL); } - | '@' K_DATE '(' e ',' e ')' { $$ = new(DATE, $4, $6); } - | '@' K_FMT '(' e ',' e ')' { $$ = new(FMT, $4, $6); } - | '@' K_UPPER '(' e ')' { $$ = new(UPPER, $4, ENULL); } - | '@' K_LOWER '(' e ')' { $$ = new(LOWER, $4, ENULL); } - | '@' K_CAPITAL '(' e ')' { $$ = new(CAPITAL, $4, ENULL); } + { $$ = new(TTS, $4, new(',', $6, $8));} + | '@' K_STON '(' e ')' { $$ = new(STON, $4, ENULL); } + | '@' K_SLEN '(' e ')' { $$ = new(SLEN, $4, ENULL); } + | '@' K_EQS '(' e ',' e ')' + { $$ = new(EQS, $4, $6); } + | '@' K_DATE '(' e ')' { $$ = new(DATE, $4, ENULL); } + | '@' K_DATE '(' e ',' e ')' + { $$ = new(DATE, $4, $6); } + | '@' K_FMT '(' e ',' e ')' + { $$ = new(FMT, $4, $6); } + | '@' K_UPPER '(' e ')' { $$ = new(UPPER, $4, ENULL); } + | '@' K_LOWER '(' e ')' { $$ = new(LOWER, $4, ENULL); } + | '@' K_CAPITAL '(' e ')' { $$ = new(CAPITAL, $4, ENULL); } | '@' K_INDEX '(' range ',' e ')' - { $$ = new(INDEX, new_range(REDUCE | INDEX, $4), $6); } + { $$ = new(INDEX, new_range(REDUCE | INDEX, $4), $6); } | '@' K_INDEX '(' e ',' range ')' - { $$ = new(INDEX, new_range(REDUCE | INDEX, $6), $4); } + { $$ = new(INDEX, new_range(REDUCE | INDEX, $6), $4); } | '@' K_INDEX '(' range ',' e ',' e ')' - { $$ = new(INDEX, new_range(REDUCE | INDEX, $4), - new(',', $6, $8)); } + { $$ = new(INDEX, new_range(REDUCE | INDEX, $4), new(',', $6, $8)); } | '@' K_LOOKUP '(' range ',' e ')' - { $$ = new(LOOKUP, new_range(REDUCE | LOOKUP, $4), $6); } + { $$ = new(LOOKUP, new_range(REDUCE | LOOKUP, $4), $6); } | '@' K_LOOKUP '(' e ',' range ')' - { $$ = new(LOOKUP, new_range(REDUCE | LOOKUP, $6), $4); } + { $$ = new(LOOKUP, new_range(REDUCE | LOOKUP, $6), $4); } | '@' K_HLOOKUP '(' range ',' e ',' e ')' - { $$ = new(HLOOKUP, new_range(REDUCE | HLOOKUP, $4), - new(',', $6, $8)); } + { $$ = new(HLOOKUP, new_range(REDUCE | HLOOKUP, $4), new(',', $6, $8)); } | '@' K_HLOOKUP '(' e ',' range ',' e ')' - { $$ = new(HLOOKUP, new_range(REDUCE | HLOOKUP, $6), - new(',', $4, $8)); } + { $$ = new(HLOOKUP, new_range(REDUCE | HLOOKUP, $6), new(',', $4, $8)); } | '@' K_VLOOKUP '(' range ',' e ',' e ')' - { $$ = new(VLOOKUP, new_range(REDUCE | VLOOKUP, $4), - new(',', $6, $8)); } + { $$ = new(VLOOKUP, new_range(REDUCE | VLOOKUP, $4), new(',', $6, $8)); } | '@' K_VLOOKUP '(' e ',' range ',' e ')' - { $$ = new(VLOOKUP, new_range(REDUCE | VLOOKUP, $6), - new(',', $4, $8)); } + { $$ = new(VLOOKUP, new_range(REDUCE | VLOOKUP, $6), new(',', $4, $8)); } | '@' K_STINDEX '(' range ',' e ')' - { $$ = new(STINDEX, new_range(REDUCE | STINDEX, $4), $6); } + { $$ = new(STINDEX, new_range(REDUCE | STINDEX, $4), $6); } | '@' K_STINDEX '(' e ',' range ')' - { $$ = new(STINDEX, new_range(REDUCE | STINDEX, $6), $4); } + { $$ = new(STINDEX, new_range(REDUCE | STINDEX, $6), $4); } | '@' K_STINDEX '(' range ',' e ',' e ')' - { $$ = new(STINDEX, new_range(REDUCE | STINDEX, $4), - new(',', $6, $8)); } - | '@' K_EXT '(' e ',' e ')' { $$ = new(EXT, $4, $6); } - | '@' K_LUA '(' e ',' e ')' { - #ifdef XLUA - $$ = new(LUA, $4, $6); - #endif - } - | '@' K_NVAL '(' e ',' e ')' { $$ = new(NVAL, $4, $6); } - | '@' K_SVAL '(' e ',' e ')' { $$ = new(SVAL, $4, $6); } + { $$ = new(STINDEX, new_range(REDUCE | STINDEX, $4), new(',', $6, $8)); } + | '@' K_EXT '(' e ',' e ')' + { $$ = new(EXT, $4, $6); } + | '@' K_LUA '(' e ',' e ')' + { + #ifdef XLUA + $$ = new(LUA, $4, $6); + #endif + } + | '@' K_NVAL '(' e ',' e ')' + { $$ = new(NVAL, $4, $6); } + | '@' K_SVAL '(' e ',' e ')' + { $$ = new(SVAL, $4, $6); } | '@' K_REPLACE '(' e ',' e ',' e ')' - { $$ = new(REPLACE, $4, new(',', $6, $8)); } + { $$ = new(REPLACE, $4, new(',', $6, $8)); } | '@' K_SUBSTR '(' e ',' e ',' e ')' - { $$ = new(SUBSTR, $4, new(',', $6, $8)); } - | '(' e ')' { $$ = $2; } - | '+' term { $$ = $2; } + { $$ = new(SUBSTR, $4, new(',', $6, $8)); } + | '(' e ')' { $$ = $2; } + | '+' term { $$ = $2; } // | '-' term { $$ = new('m', $2, ENULL); } - | NUMBER { $$ = new_const(O_CONST, (double) $1); } - | FNUMBER { $$ = new_const(O_CONST, $1); } - | '@' K_PI { $$ = new(PI_, ENULL, ENULL); } - | STRING { $$ = new_str($1); } - | '~' term { $$ = new('!', $2, ENULL); } - | '!' term { $$ = new('!', $2, ENULL); } - | '@' K_FILENAME '(' e ')' { $$ = new(FILENAME, $4, ENULL); } - | '@' K_MYROW { $$ = new(MYROW, ENULL, ENULL);} - | '@' K_MYCOL { $$ = new(MYCOL, ENULL, ENULL);} - | '@' K_LASTROW { $$ = new(LASTROW, ENULL, ENULL);} - | '@' K_LASTCOL { $$ = new(LASTCOL, ENULL, ENULL);} - | '@' K_COLTOA '(' e ')' { $$ = new(COLTOA, $4, ENULL);} - | '@' K_ASCII '(' e ')' { $$ = new(ASCII, $4, ENULL); } - | '@' K_SET8BIT '(' e ')' { $$ = new(SET8BIT, $4, ENULL); } - | '@' K_CHR '(' e ')' { $$ = new(CHR, $4, ENULL);} - | '@' K_ERR { $$ = new(ERR_, ENULL, ENULL); } - | K_ERR { $$ = new(ERR_, ENULL, ENULL); } - | '@' K_REF { $$ = new(REF_, ENULL, ENULL); } - | K_REF { $$ = new(REF_, ENULL, ENULL); } + | NUMBER { $$ = new_const(O_CONST, (double) $1); } + | FNUMBER { $$ = new_const(O_CONST, $1); } + | '@' K_PI { $$ = new(PI_, ENULL, ENULL); } + | STRING { $$ = new_str($1); } + | '~' term { $$ = new('!', $2, ENULL); } + | '!' term { $$ = new('!', $2, ENULL); } + | '@' K_FILENAME '(' e ')' + { $$ = new(FILENAME, $4, ENULL); } + | '@' K_MYROW { $$ = new(MYROW, ENULL, ENULL);} + | '@' K_MYCOL { $$ = new(MYCOL, ENULL, ENULL);} + | '@' K_LASTROW { $$ = new(LASTROW, ENULL, ENULL);} + | '@' K_LASTCOL { $$ = new(LASTCOL, ENULL, ENULL);} + | '@' K_COLTOA '(' e ')' { $$ = new(COLTOA, $4, ENULL);} + | '@' K_ASCII '(' e ')' { $$ = new(ASCII, $4, ENULL); } + | '@' K_SET8BIT '(' e ')' { $$ = new(SET8BIT, $4, ENULL); } + | '@' K_CHR '(' e ')' { $$ = new(CHR, $4, ENULL);} + | '@' K_ERR { $$ = new(ERR_, ENULL, ENULL); } + | K_ERR { $$ = new(ERR_, ENULL, ENULL); } + | '@' K_REF { $$ = new(REF_, ENULL, ENULL); } + | K_REF { $$ = new(REF_, ENULL, ENULL); } /* - | '@' K_NUMITER { $$ = new(NUMITER, ENULL, ENULL);} - | '@' K_BLACK { $$ = new(BLACK, ENULL, ENULL); } - | '@' K_RED { $$ = new(RED, ENULL, ENULL); } - | '@' K_GREEN { $$ = new(GREEN, ENULL, ENULL); } - | '@' K_YELLOW { $$ = new(YELLOW, ENULL, ENULL); } - | '@' K_BLUE { $$ = new(BLUE, ENULL, ENULL); } - | '@' K_MAGENTA { $$ = new(MAGENTA, ENULL, ENULL); } - | '@' K_CYAN { $$ = new(CYAN, ENULL, ENULL); } - | '@' K_WHITE { $$ = new(WHITE, ENULL, ENULL); } + | '@' K_NUMITER { $$ = new(NUMITER, ENULL, ENULL);} + | '@' K_BLACK { $$ = new(BLACK, ENULL, ENULL); } + | '@' K_RED { $$ = new(RED, ENULL, ENULL); } + | '@' K_GREEN { $$ = new(GREEN, ENULL, ENULL); } + | '@' K_YELLOW { $$ = new(YELLOW, ENULL, ENULL); } + | '@' K_BLUE { $$ = new(BLUE, ENULL, ENULL); } + | '@' K_MAGENTA { $$ = new(MAGENTA, ENULL, ENULL); } + | '@' K_CYAN { $$ = new(CYAN, ENULL, ENULL); } + | '@' K_WHITE { $$ = new(WHITE, ENULL, ENULL); } */ ; /* expressions */ -e: e '+' e { $$ = new('+', $1, $3); } - | e '-' e { $$ = new('-', $1, $3); } - | e '*' e { $$ = new('*', $1, $3); } - | e '/' e { $$ = new('/', $1, $3); } - | e '%' e { $$ = new('%', $1, $3); } - | '-' e { $$ = new('m', $2, ENULL); } - | e '^' e { $$ = new('^', $1, $3); } +e: e '+' e { $$ = new('+', $1, $3); } + | e '-' e { $$ = new('-', $1, $3); } + | e '*' e { $$ = new('*', $1, $3); } + | e '/' e { $$ = new('/', $1, $3); } + | e '%' e { $$ = new('%', $1, $3); } + | '-' e { $$ = new('m', $2, ENULL); } + | e '^' e { $$ = new('^', $1, $3); } | term - | e '?' e ':' e { $$ = new('?', $1, new(':', $3, $5)); } - | e ';' e { $$ = new(';', $1, $3); } - | e '<' e { $$ = new('<', $1, $3); } - | e '=' e { $$ = new('=', $1, $3); } - | e '>' e { $$ = new('>', $1, $3); } - | e '&' e { $$ = new('&', $1, $3); } - | e '|' e { $$ = new('|', $1, $3); } - | e '<' '=' e { $$ = new('!', new('>', $1, $4), ENULL); } - | e '!' '=' e { $$ = new('!', new('=', $1, $4), ENULL); } - | e '<' '>' e { $$ = new('!', new('=', $1, $4), ENULL); } - | e '>' '=' e { $$ = new('!', new('<', $1, $4), ENULL); } - | e '#' e { $$ = new('#', $1, $3); } + | e '?' e ':' e { $$ = new('?', $1, new(':', $3, $5)); } + | e ';' e { $$ = new(';', $1, $3); } + | e '<' e { $$ = new('<', $1, $3); } + | e '=' e { $$ = new('=', $1, $3); } + | e '>' e { $$ = new('>', $1, $3); } + | e '&' e { $$ = new('&', $1, $3); } + | e '|' e { $$ = new('|', $1, $3); } + | e '<' '=' e { $$ = new('!', new('>', $1, $4), ENULL); } + | e '!' '=' e { $$ = new('!', new('=', $1, $4), ENULL); } + | e '<' '>' e { $$ = new('!', new('=', $1, $4), ENULL); } + | e '>' '=' e { $$ = new('!', new('<', $1, $4), ENULL); } + | e '#' e { $$ = new('#', $1, $3); } ; -expr_list: e { $$ = new(ELIST, ENULL, $1); } - | expr_list ',' e { $$ = new(ELIST, $1, $3); } +expr_list: e |