xref: /csrg-svn/old/dbx/commands.y (revision 12536)
19683Slinton %{
29683Slinton 
39683Slinton /* Copyright (c) 1982 Regents of the University of California */
49683Slinton 
5*12536Scsvaf static char sccsid[] = "@(#)commands.y 1.7 05/18/83";
69683Slinton 
79683Slinton /*
89683Slinton  * Yacc grammar for debugger commands.
99683Slinton  */
109683Slinton 
119683Slinton #include "defs.h"
129683Slinton #include "symbols.h"
139683Slinton #include "operators.h"
149683Slinton #include "tree.h"
159683Slinton #include "process.h"
169683Slinton #include "source.h"
179683Slinton #include "scanner.h"
189683Slinton #include "names.h"
199683Slinton 
209683Slinton private String curformat = "X";
219683Slinton 
229683Slinton %}
239683Slinton 
249683Slinton %term
25*12536Scsvaf     ALIAS AND ASSIGN AT CALL CATCH CONT DEBUG DELETE DIV DUMP
269683Slinton     EDIT FILE FUNC GRIPE HELP IF IGNORE IN LIST MOD NEXT NEXTI NIL NOT OR
279683Slinton     PRINT PSYM QUIT RUN SH SKIP SOURCE STATUS STEP STEPI
289683Slinton     STOP STOPI TRACE TRACEI
299683Slinton     USE WHATIS WHEN WHERE WHEREIS WHICH
309683Slinton 
319683Slinton %term INT REAL NAME STRING
329683Slinton %term LFORMER RFORMER ABSTRACTION ARROW
339683Slinton 
349683Slinton %right INT
359683Slinton %binary REDIRECT
369683Slinton %binary '<' '=' '>' '!' IN
379683Slinton %left '+' '-' OR
389683Slinton %left UNARYSIGN
399683Slinton %left '*' '/' DIV MOD AND
409683Slinton %left NOT '(' '[' '.' '^' ARROW
4111173Slinton %left '\\'
429683Slinton 
439683Slinton %union {
449683Slinton     Name y_name;
459683Slinton     Symbol y_sym;
469683Slinton     Node y_node;
479683Slinton     Integer y_int;
489683Slinton     Operator y_op;
499683Slinton     long y_long;
509683Slinton     double y_real;
519683Slinton     String y_string;
529683Slinton     Boolean y_bool;
539683Slinton     Cmdlist y_cmdlist;
549683Slinton };
559683Slinton 
569683Slinton %type <y_op>	    trace stop
579683Slinton %type <y_long>	    INT count
589683Slinton %type <y_real>	    REAL
599683Slinton %type <y_string>    STRING redirectout filename opt_filename mode
60*12536Scsvaf %type <y_name>	    ALIAS AND ASSIGN AT CALL CATCH CONT DEBUG DELETE DIV DUMP
619683Slinton %type <y_name>	    EDIT FILE FUNC GRIPE HELP IF IGNORE IN LIST MOD
629683Slinton %type <y_name>	    NEXT NEXTI NIL NOT OR
639683Slinton %type <y_name>	    PRINT PSYM QUIT RUN SH SKIP SOURCE STATUS STEP STEPI
649683Slinton %type <y_name>	    STOP STOPI TRACE TRACEI
659683Slinton %type <y_name>	    USE WHATIS WHEN WHERE WHEREIS WHICH
669683Slinton %type <y_name>	    name NAME keyword
679683Slinton %type <y_node>      symbol
689683Slinton %type <y_node>	    command rcommand cmd step what where examine
6912482Slinton %type <y_node>	    event opt_exp_list opt_cond
709683Slinton %type <y_node>	    exp_list exp term boolean_exp constant address
719683Slinton %type <y_node>	    alias_command list_command line_number
729683Slinton %type <y_cmdlist>   actions
739683Slinton 
749683Slinton %%
759683Slinton 
769683Slinton input:
779683Slinton     input command_nl
789683Slinton |
799683Slinton     /* empty */
809683Slinton ;
819683Slinton command_nl:
829683Slinton     command_line '\n'
839683Slinton |
849683Slinton     command_line ';'
859683Slinton |
869683Slinton     '\n'
879683Slinton ;
889683Slinton 
899683Slinton command_line:
909683Slinton     command
919683Slinton {
929683Slinton 	if ($1 != nil) {
93*12536Scsvaf             if(debug_flag[2]) {dumptree(stderr,$1); fflush (stderr);}
949683Slinton 	    eval($1);
959683Slinton 	}
969683Slinton }
979683Slinton |
989683Slinton     rcommand redirectout
999683Slinton {
1009683Slinton 	if ($1 != nil) {
1019683Slinton 	    if ($2 != nil) {
1029683Slinton 		setout($2);
103*12536Scsvaf                 if(debug_flag[2]) {dumptree(stderr,$1); fflush (stderr);}
1049683Slinton 		eval($1);
1059683Slinton 		unsetout();
1069683Slinton 	    } else {
107*12536Scsvaf                 if(debug_flag[2]) {dumptree(stderr,$1); fflush (stderr);}
1089683Slinton 		eval($1);
1099683Slinton 	    }
1109683Slinton 	}
1119683Slinton }
1129683Slinton ;
1139683Slinton redirectout:
1149683Slinton     '>' shellmode NAME
1159683Slinton {
1169683Slinton 	$$ = ident($3);
1179683Slinton }
1189683Slinton |
1199683Slinton     /* empty */
1209683Slinton {
1219683Slinton 	$$ = nil;
1229683Slinton }
1239683Slinton ;
1249683Slinton 
1259683Slinton /*
1269683Slinton  * Non-redirectable commands.
1279683Slinton  */
1289683Slinton command:
1299683Slinton     alias_command
1309683Slinton {
1319683Slinton 	$$ = $1;
1329683Slinton }
1339683Slinton |
1349683Slinton     ASSIGN term '=' exp
1359683Slinton {
1369683Slinton 	$$ = build(O_ASSIGN, $2, $4);
1379683Slinton }
1389683Slinton |
1399683Slinton     CATCH INT
1409683Slinton {
1419683Slinton 	$$ = build(O_CATCH, $2);
1429683Slinton }
1439683Slinton |
1449683Slinton     CONT
1459683Slinton {
14611870Slinton 	$$ = build(O_CONT, (long) 0);
1479683Slinton }
1489683Slinton |
14911870Slinton     CONT INT
15011870Slinton {
15111870Slinton 	$$ = build(O_CONT, $2);
15211870Slinton }
15311870Slinton |
1549683Slinton     DELETE INT
1559683Slinton {
1569683Slinton 	$$ = build(O_DELETE, $2);
1579683Slinton }
1589683Slinton |
1599683Slinton     EDIT shellmode opt_filename
1609683Slinton {
1619683Slinton 	$$ = build(O_EDIT, $3);
1629683Slinton }
1639683Slinton |
1649683Slinton     FILE shellmode opt_filename
1659683Slinton {
1669683Slinton 	$$ = build(O_CHFILE, $3);
1679683Slinton }
1689683Slinton |
1699683Slinton     FUNC
1709683Slinton {
1719683Slinton 	$$ = build(O_FUNC, nil);
1729683Slinton }
1739683Slinton |
1749683Slinton     FUNC symbol
1759683Slinton {
1769683Slinton 	$$ = build(O_FUNC, $2);
1779683Slinton }
1789683Slinton |
1799683Slinton     GRIPE
1809683Slinton {
1819683Slinton 	$$ = build(O_GRIPE);
1829683Slinton }
1839683Slinton |
1849683Slinton     HELP
1859683Slinton {
1869683Slinton 	$$ = build(O_HELP);
1879683Slinton }
1889683Slinton |
1899683Slinton     IGNORE INT
1909683Slinton {
1919683Slinton 	$$ = build(O_IGNORE, $2);
1929683Slinton }
1939683Slinton |
1949683Slinton     list_command
1959683Slinton {
1969683Slinton 	$$ = $1;
1979683Slinton }
1989683Slinton |
1999683Slinton     PSYM term
2009683Slinton {
2019683Slinton 	$$ = build(O_PSYM, $2);
2029683Slinton }
2039683Slinton |
2049683Slinton     QUIT
2059683Slinton {
2069683Slinton 	if (not popinput()) {
2079683Slinton 	    quit(0);
2089683Slinton 	} else {
2099683Slinton 	    $$ = nil;
2109683Slinton 	}
2119683Slinton }
2129683Slinton |
2139683Slinton     runcommand
2149683Slinton {
2159683Slinton 	run();
2169683Slinton 	/* NOTREACHED */
2179683Slinton }
2189683Slinton |
2199683Slinton     SH
2209683Slinton {
2219683Slinton 	shellline();
2229683Slinton 	$$ = nil;
2239683Slinton }
2249683Slinton |
2259683Slinton     SOURCE shellmode filename
2269683Slinton {
2279683Slinton 	$$ = build(O_SOURCE, $3);
2289683Slinton }
2299683Slinton |
2309683Slinton     step
2319683Slinton {
2329683Slinton 	$$ = $1;
2339683Slinton }
2349683Slinton |
2359683Slinton     stop where opt_cond
2369683Slinton {
2379683Slinton 	$$ = build($1, nil, $2, $3);
2389683Slinton }
2399683Slinton |
2409683Slinton     stop what opt_cond
2419683Slinton {
2429683Slinton 	$$ = build($1, $2, nil, $3);
2439683Slinton }
2449683Slinton |
2459683Slinton     stop IF boolean_exp
2469683Slinton {
2479683Slinton 	$$ = build($1, nil, nil, $3);
2489683Slinton }
2499683Slinton |
2509683Slinton     trace what where opt_cond
2519683Slinton {
2529683Slinton 	$$ = build($1, $2, $3, $4);
2539683Slinton }
2549683Slinton |
2559683Slinton     trace where opt_cond
2569683Slinton {
2579683Slinton 	$$ = build($1, nil, $2, $3);
2589683Slinton }
2599683Slinton |
2609683Slinton     trace what opt_cond
2619683Slinton {
2629683Slinton 	$$ = build($1, $2, nil, $3);
2639683Slinton }
2649683Slinton |
2659683Slinton     trace opt_cond
2669683Slinton {
2679683Slinton 	$$ = build($1, nil, nil, $2);
2689683Slinton }
2699683Slinton |
2709683Slinton     WHATIS term
2719683Slinton {
2729683Slinton 	$$ = build(O_WHATIS, $2);
2739683Slinton }
2749683Slinton |
2759683Slinton     WHEN event '{' actions '}'
2769683Slinton {
2779683Slinton 	$$ = build(O_ADDEVENT, $2, $4);
2789683Slinton }
2799683Slinton |
2809683Slinton     WHEREIS symbol
2819683Slinton {
2829683Slinton 	$$ = build(O_WHEREIS, $2);
2839683Slinton }
2849683Slinton |
2859683Slinton     WHICH symbol
2869683Slinton {
2879683Slinton 	$$ = build(O_WHICH, $2);
2889683Slinton }
2899683Slinton |
2909683Slinton     USE shellmode sourcepath
2919683Slinton {
2929683Slinton 	$$ = nil;
2939683Slinton 	if (list_size(sourcepath) == 0) {
2949683Slinton 	    list_append(list_item("."), nil, sourcepath);
2959683Slinton 	}
2969683Slinton }
2979683Slinton ;
2989683Slinton runcommand:
29912524Slinton     run { arginit(); } arglist
30012482Slinton |
30112524Slinton     run
3029683Slinton ;
3039683Slinton run:
30412524Slinton     RUN shellmode
3059683Slinton {
3069683Slinton 	fflush(stdout);
3079683Slinton }
3089683Slinton ;
3099683Slinton arglist:
3109683Slinton     arglist arg
3119683Slinton |
31212482Slinton     arg
3139683Slinton ;
3149683Slinton arg:
3159683Slinton     NAME
3169683Slinton {
3179683Slinton 	newarg(ident($1));
3189683Slinton }
3199683Slinton |
3209683Slinton     '<' NAME
3219683Slinton {
3229683Slinton 	inarg(ident($2));
3239683Slinton }
3249683Slinton |
3259683Slinton     '>' NAME
3269683Slinton {
3279683Slinton 	outarg(ident($2));
3289683Slinton }
3299683Slinton ;
3309683Slinton step:
3319683Slinton     STEP
3329683Slinton {
3339683Slinton 	$$ = build(O_STEP, true, false);
3349683Slinton }
3359683Slinton |
3369683Slinton     STEPI
3379683Slinton {
3389683Slinton 	$$ = build(O_STEP, false, false);
3399683Slinton }
3409683Slinton |
3419683Slinton     NEXT
3429683Slinton {
3439683Slinton 	$$ = build(O_STEP, true, true);
3449683Slinton }
3459683Slinton |
3469683Slinton     NEXTI
3479683Slinton {
3489683Slinton 	$$ = build(O_STEP, false, true);
3499683Slinton }
3509683Slinton ;
3519683Slinton shellmode:
3529683Slinton     /* empty */
3539683Slinton {
3549683Slinton 	beginshellmode();
3559683Slinton }
3569683Slinton ;
3579683Slinton sourcepath:
3589683Slinton     sourcepath NAME
3599683Slinton {
3609683Slinton 	list_append(list_item(ident($2)), nil, sourcepath);
3619683Slinton }
3629683Slinton |
3639683Slinton     /* empty */
3649683Slinton {
3659683Slinton 	String dir;
3669683Slinton 
3679683Slinton 	foreach (String, dir, sourcepath)
3689683Slinton 	    list_delete(list_curitem(sourcepath), sourcepath);
3699683Slinton 	endfor
3709683Slinton }
3719683Slinton ;
3729683Slinton event:
3739683Slinton     where
3749683Slinton |
3759683Slinton     exp
3769683Slinton ;
3779683Slinton actions:
3789683Slinton     actions cmd ';'
3799683Slinton {
3809683Slinton 	$$ = $1;
3819683Slinton 	cmdlist_append($2, $$);
3829683Slinton }
3839683Slinton |
3849683Slinton     cmd ';'
3859683Slinton {
3869683Slinton 	$$ = list_alloc();
3879683Slinton 	cmdlist_append($1, $$);
3889683Slinton }
3899683Slinton ;
3909683Slinton cmd:
3919683Slinton     command
3929683Slinton |
3939683Slinton     rcommand
3949683Slinton ;
3959683Slinton 
3969683Slinton /*
3979683Slinton  * Redirectable commands.
3989683Slinton  */
3999683Slinton rcommand:
4009683Slinton     PRINT exp_list
4019683Slinton {
4029683Slinton 	$$ = build(O_PRINT, $2);
4039683Slinton }
4049683Slinton |
4059683Slinton     WHERE
4069683Slinton {
4079683Slinton 	$$ = build(O_WHERE);
4089683Slinton }
4099683Slinton |
4109683Slinton     examine
4119683Slinton {
4129683Slinton 	$$ = $1;
4139683Slinton }
4149683Slinton |
4159683Slinton     CALL term
4169683Slinton {
4179683Slinton 	$$ = $2;
4189683Slinton }
4199683Slinton |
420*12536Scsvaf     DEBUG INT
421*12536Scsvaf {
422*12536Scsvaf  	$$ = build(O_DEBUG, $2);
423*12536Scsvaf }
424*12536Scsvaf |
4259683Slinton     DUMP
4269683Slinton {
4279683Slinton 	$$ = build(O_DUMP);
4289683Slinton }
4299683Slinton |
4309683Slinton     STATUS
4319683Slinton {
4329683Slinton 	$$ = build(O_STATUS);
4339683Slinton }
4349683Slinton ;
4359683Slinton alias_command:
4369683Slinton     ALIAS name name
4379683Slinton {
4389683Slinton 	$$ = build(O_ALIAS, build(O_NAME, $2), build(O_NAME, $3));
4399683Slinton }
4409683Slinton |
4419683Slinton     ALIAS name
4429683Slinton {
4439683Slinton 	$$ = build(O_ALIAS, build(O_NAME, $2), nil);
4449683Slinton }
4459683Slinton |
4469683Slinton     ALIAS
4479683Slinton {
4489683Slinton 	$$ = build(O_ALIAS, nil, nil);
4499683Slinton }
4509683Slinton ;
4519683Slinton trace:
4529683Slinton     TRACE
4539683Slinton {
4549683Slinton 	$$ = O_TRACE;
4559683Slinton }
4569683Slinton |
4579683Slinton     TRACEI
4589683Slinton {
4599683Slinton 	$$ = O_TRACEI;
4609683Slinton }
4619683Slinton ;
4629683Slinton stop:
4639683Slinton     STOP
4649683Slinton {
4659683Slinton 	$$ = O_STOP;
4669683Slinton }
4679683Slinton |
4689683Slinton     STOPI
4699683Slinton {
4709683Slinton 	$$ = O_STOPI;
4719683Slinton }
4729683Slinton ;
4739683Slinton what:
4749683Slinton     exp
4759683Slinton {
4769683Slinton 	$$ = $1;
4779683Slinton }
4789683Slinton |
4799683Slinton     STRING ':' line_number
4809683Slinton {
4819683Slinton 	$$ = build(O_QLINE, build(O_SCON, $1), $3);
4829683Slinton }
4839683Slinton ;
4849683Slinton where:
4859683Slinton     IN term
4869683Slinton {
4879683Slinton 	$$ = $2;
4889683Slinton }
4899683Slinton |
4909683Slinton     AT line_number
4919683Slinton {
4929683Slinton 	$$ = build(O_QLINE, build(O_SCON, cursource), $2);
4939683Slinton }
4949683Slinton |
4959683Slinton     AT STRING ':' line_number
4969683Slinton {
4979683Slinton 	$$ = build(O_QLINE, build(O_SCON, $2), $4);
4989683Slinton }
4999683Slinton ;
5009683Slinton filename:
5019683Slinton     NAME
5029683Slinton {
5039683Slinton 	$$ = ident($1);
5049683Slinton }
5059683Slinton ;
5069683Slinton opt_filename:
5079683Slinton     /* empty */
5089683Slinton {
5099683Slinton 	$$ = nil;
5109683Slinton }
5119683Slinton |
5129683Slinton     filename
5139683Slinton {
5149683Slinton 	$$ = $1;
5159683Slinton }
5169683Slinton ;
51712482Slinton opt_exp_list:
51812482Slinton     exp_list
5199683Slinton {
52012482Slinton 	$$ = $1;
5219683Slinton }
5229683Slinton |
52312482Slinton     /* empty */
5249683Slinton {
52512482Slinton 	$$ = nil;
5269683Slinton }
5279683Slinton ;
5289683Slinton list_command:
5299683Slinton     LIST
5309683Slinton {
5319683Slinton 	$$ = build(O_LIST,
5329683Slinton 	    build(O_LCON, (long) cursrcline),
5339683Slinton 	    build(O_LCON, (long) cursrcline + 9)
5349683Slinton 	);
5359683Slinton }
5369683Slinton |
5379683Slinton     LIST line_number
5389683Slinton {
5399683Slinton 	$$ = build(O_LIST, $2, $2);
5409683Slinton }
5419683Slinton |
5429683Slinton     LIST line_number ',' line_number
5439683Slinton {
5449683Slinton 	$$ = build(O_LIST, $2, $4);
5459683Slinton }
5469683Slinton |
5479683Slinton     LIST symbol
5489683Slinton {
5499683Slinton 	$$ = build(O_LIST, $2);
5509683Slinton }
5519683Slinton ;
5529683Slinton line_number:
5539683Slinton     INT
5549683Slinton {
5559683Slinton 	$$ = build(O_LCON, $1);
5569683Slinton }
5579683Slinton |
5589683Slinton     '$'
5599683Slinton {
5609683Slinton 	$$ = build(O_LCON, (long) LASTLINE);
5619683Slinton }
5629683Slinton ;
5639683Slinton examine:
5649683Slinton     address '/' count mode
5659683Slinton {
5669683Slinton 	$$ = build(O_EXAMINE, $4, $1, nil, $3);
5679683Slinton }
5689683Slinton |
5699683Slinton     address ',' address '/' mode
5709683Slinton {
5719683Slinton 	$$ = build(O_EXAMINE, $5, $1, $3, 0);
5729683Slinton }
5739683Slinton |
5749683Slinton     '/' count mode
5759683Slinton {
5769683Slinton 	$$ = build(O_EXAMINE, $3, build(O_LCON, (long) prtaddr), nil, $2);
5779683Slinton }
57811173Slinton |
57911173Slinton     address '=' mode
58011173Slinton {
58111173Slinton 	$$ = build(O_EXAMINE, $3, $1, nil, 0);
58211173Slinton }
5839683Slinton ;
5849683Slinton address:
5859683Slinton     INT
5869683Slinton {
5879683Slinton 	$$ = build(O_LCON, $1);
5889683Slinton }
5899683Slinton |
5909683Slinton     '&' term
5919683Slinton {
5929683Slinton 	$$ = amper($2);
5939683Slinton }
5949683Slinton |
5959683Slinton     address '+' address
5969683Slinton {
5979683Slinton 	$$ = build(O_ADD, $1, $3);
5989683Slinton }
5999683Slinton |
6009683Slinton     address '-' address
6019683Slinton {
6029683Slinton 	$$ = build(O_SUB, $1, $3);
6039683Slinton }
6049683Slinton |
6059683Slinton     address '*' address
6069683Slinton {
6079683Slinton 	$$ = build(O_MUL, $1, $3);
6089683Slinton }
6099683Slinton |
6109683Slinton     '*' address %prec UNARYSIGN
6119683Slinton {
6129683Slinton 	$$ = build(O_INDIR, $2);
6139683Slinton }
6149683Slinton |
6159683Slinton     '(' exp ')'
6169683Slinton {
6179683Slinton 	$$ = $2;
6189683Slinton }
6199683Slinton ;
6209683Slinton count:
6219683Slinton     /* empty */
6229683Slinton {
6239683Slinton 	$$ = 1;
6249683Slinton }
6259683Slinton |
6269683Slinton     INT
6279683Slinton {
6289683Slinton 	$$ = $1;
6299683Slinton }
6309683Slinton ;
6319683Slinton mode:
6329683Slinton     name
6339683Slinton {
6349683Slinton 	$$ = ident($1);
6359683Slinton 	curformat = $$;
6369683Slinton }
6379683Slinton |
6389683Slinton     /* empty */
6399683Slinton {
6409683Slinton 	$$ = curformat;
6419683Slinton }
6429683Slinton ;
6439683Slinton opt_cond:
6449683Slinton     /* empty */
6459683Slinton {
6469683Slinton 	$$ = nil;
6479683Slinton }
6489683Slinton |
6499683Slinton     IF boolean_exp
6509683Slinton {
6519683Slinton 	$$ = $2;
6529683Slinton }
6539683Slinton ;
6549683Slinton exp_list:
6559683Slinton     exp
6569683Slinton {
6579683Slinton 	$$ = build(O_COMMA, $1, nil);
6589683Slinton }
6599683Slinton |
6609683Slinton     exp ',' exp_list
6619683Slinton {
6629683Slinton 	$$ = build(O_COMMA, $1, $3);
6639683Slinton }
6649683Slinton ;
6659683Slinton exp:
6669683Slinton     term
6679683Slinton {
6689683Slinton 	$$ = build(O_RVAL, $1);
6699683Slinton }
6709683Slinton |
6719683Slinton     constant
6729683Slinton {
6739683Slinton 	$$ = $1;
6749683Slinton }
6759683Slinton |
67611173Slinton     exp '\\' symbol
67711173Slinton {
67811173Slinton 	$$ = build(O_TYPERENAME, $1, $3);
67911173Slinton }
68011173Slinton |
6819683Slinton     '+' exp %prec UNARYSIGN
6829683Slinton {
6839683Slinton 	$$ = $2;
6849683Slinton }
6859683Slinton |
6869683Slinton     '-' exp %prec UNARYSIGN
6879683Slinton {
6889683Slinton 	$$ = build(O_NEG, $2);
6899683Slinton }
6909683Slinton |
6919683Slinton     '&' exp %prec UNARYSIGN
6929683Slinton {
6939683Slinton 	$$ = amper($2);
6949683Slinton }
6959683Slinton |
6969683Slinton     exp '+' exp
6979683Slinton {
6989683Slinton 	$$ = build(O_ADD, $1, $3);
6999683Slinton }
7009683Slinton |
7019683Slinton     exp '-' exp
7029683Slinton {
7039683Slinton 	$$ = build(O_SUB, $1, $3);
7049683Slinton }
7059683Slinton |
7069683Slinton     exp '*' exp
7079683Slinton {
7089683Slinton 	$$ = build(O_MUL, $1, $3);
7099683Slinton }
7109683Slinton |
7119683Slinton     exp '/' exp
7129683Slinton {
7139683Slinton 	$$ = build(O_DIVF, $1, $3);
7149683Slinton }
7159683Slinton |
7169683Slinton     exp DIV exp
7179683Slinton {
7189683Slinton 	$$ = build(O_DIV, $1, $3);
7199683Slinton }
7209683Slinton |
7219683Slinton     exp MOD exp
7229683Slinton {
7239683Slinton 	$$ = build(O_MOD, $1, $3);
7249683Slinton }
7259683Slinton |
7269683Slinton     exp AND exp
7279683Slinton {
7289683Slinton 	$$ = build(O_AND, $1, $3);
7299683Slinton }
7309683Slinton |
7319683Slinton     exp OR exp
7329683Slinton {
7339683Slinton 	$$ = build(O_OR, $1, $3);
7349683Slinton }
7359683Slinton |
7369683Slinton     exp '<' exp
7379683Slinton {
7389683Slinton 	$$ = build(O_LT, $1, $3);
7399683Slinton }
7409683Slinton |
7419683Slinton     exp '<' '=' exp
7429683Slinton {
7439683Slinton 	$$ = build(O_LE, $1, $4);
7449683Slinton }
7459683Slinton |
7469683Slinton     exp '>' exp
7479683Slinton {
7489683Slinton 	$$ = build(O_GT, $1, $3);
7499683Slinton }
7509683Slinton |
7519683Slinton     exp '>' '=' exp
7529683Slinton {
7539683Slinton 	$$ = build(O_GE, $1, $4);
7549683Slinton }
7559683Slinton |
7569683Slinton     exp '=' exp
7579683Slinton {
7589683Slinton 	$$ = build(O_EQ, $1, $3);
7599683Slinton }
7609683Slinton |
7619683Slinton     exp '=' '=' exp
7629683Slinton {
7639683Slinton 	$$ = build(O_EQ, $1, $4);
7649683Slinton }
7659683Slinton |
7669683Slinton     exp '<' '>' exp
7679683Slinton {
7689683Slinton 	$$ = build(O_NE, $1, $4);
7699683Slinton }
7709683Slinton |
7719683Slinton     exp '!' '=' exp
7729683Slinton {
7739683Slinton 	$$ = build(O_NE, $1, $4);
7749683Slinton }
7759683Slinton |
7769683Slinton     '(' exp ')'
7779683Slinton {
7789683Slinton 	$$ = $2;
7799683Slinton }
7809683Slinton ;
7819683Slinton term:
7829683Slinton     symbol
7839683Slinton {
7849683Slinton 	$$ = $1;
7859683Slinton }
7869683Slinton |
7879683Slinton     term '[' exp_list ']'
7889683Slinton {
7899683Slinton 	$$ = subscript($1, $3);
7909683Slinton }
7919683Slinton |
7929683Slinton     term '.' name
7939683Slinton {
7949683Slinton 	$$ = dot($1, $3);
7959683Slinton }
7969683Slinton |
7979683Slinton     term ARROW name
7989683Slinton {
7999683Slinton 	$$ = dot($1, $3);
8009683Slinton }
8019683Slinton |
8029683Slinton     '*' term %prec UNARYSIGN
8039683Slinton {
8049683Slinton 	$$ = build(O_INDIR, $2);
8059683Slinton }
8069683Slinton |
8079683Slinton     '*' '(' exp ')' %prec UNARYSIGN
8089683Slinton {
8099683Slinton 	$$ = build(O_INDIR, $3);
8109683Slinton }
8119683Slinton |
8129683Slinton     term '^' %prec UNARYSIGN
8139683Slinton {
8149683Slinton 	$$ = build(O_INDIR, $1);
8159683Slinton }
8169683Slinton |
8179683Slinton     '#' term %prec UNARYSIGN
8189683Slinton {
8199683Slinton 	$$ = concrete($2);
8209683Slinton }
8219683Slinton |
82212482Slinton     term '(' opt_exp_list ')'
8239683Slinton {
8249683Slinton 	$$ = build(O_CALL, $1, $3);
8259683Slinton }
8269683Slinton ;
8279683Slinton boolean_exp:
8289683Slinton     exp
8299683Slinton {
8309683Slinton 	chkboolean($1);
8319683Slinton 	$$ = $1;
8329683Slinton }
8339683Slinton ;
8349683Slinton constant:
8359683Slinton     INT
8369683Slinton {
8379683Slinton 	$$ = build(O_LCON, $1);
8389683Slinton }
8399683Slinton |
8409683Slinton     REAL
8419683Slinton {
8429683Slinton 	$$ = build(O_FCON, $1);
8439683Slinton }
8449683Slinton |
8459683Slinton     STRING
8469683Slinton {
8479683Slinton 	$$ = build(O_SCON, $1);
8489683Slinton }
8499683Slinton ;
8509683Slinton symbol:
8519683Slinton     name
8529683Slinton {
8539683Slinton 	$$ = build(O_SYM, which($1));
8549683Slinton }
8559683Slinton ;
8569683Slinton name:
8579683Slinton     NAME
8589683Slinton {
8599683Slinton 	$$ = $1;
8609683Slinton }
8619683Slinton |
8629683Slinton     keyword
8639683Slinton {
8649683Slinton 	$$ = $1;
8659683Slinton }
8669683Slinton keyword:
867*12536Scsvaf     ALIAS | AND | ASSIGN | AT | CALL | CATCH | CONT | DEBUG | DELETE | DIV |
868*12536Scsvaf     DUMP | EDIT | FILE | FUNC | GRIPE | HELP | IGNORE | IN | LIST | MOD |
8699683Slinton     NEXT | NEXTI | NIL | NOT | OR | PRINT | PSYM | QUIT | RUN |
8709683Slinton     SH | SKIP | SOURCE | STATUS | STEP | STEPI |
8719683Slinton     STOP | STOPI | TRACE | TRACEI |
8729683Slinton     USE | WHATIS | WHEN | WHERE | WHICH
8739683Slinton ;
874