xref: /csrg-svn/old/dbx/commands.y (revision 16926)
19683Slinton %{
29683Slinton /* Copyright (c) 1982 Regents of the University of California */
39683Slinton 
4*16926Ssam static	char sccsid[] = "@(#)commands.y	1.12 (Berkeley) 08/12/84";
59683Slinton 
69683Slinton /*
79683Slinton  * Yacc grammar for debugger commands.
89683Slinton  */
99683Slinton 
109683Slinton #include "defs.h"
119683Slinton #include "symbols.h"
129683Slinton #include "operators.h"
139683Slinton #include "tree.h"
149683Slinton #include "process.h"
159683Slinton #include "source.h"
169683Slinton #include "scanner.h"
179683Slinton #include "names.h"
1814673Slinton #include "lists.h"
19*16926Ssam #include <signal.h>
209683Slinton 
219683Slinton private String curformat = "X";
229683Slinton 
239683Slinton %}
249683Slinton 
259683Slinton %term
2616607Ssam     ALIAS AND ASSIGN AT CALL CATCH CONT DEBUG DELETE DIV DOWN DUMP
279683Slinton     EDIT FILE FUNC GRIPE HELP IF IGNORE IN LIST MOD NEXT NEXTI NIL NOT OR
2816607Ssam     PRINT PSYM QUIT RERUN RETURN RUN SH SKIP SOURCE STATUS STEP STEPI
2916607Ssam     STOP STOPI TRACE TRACEI UP
309683Slinton     USE WHATIS WHEN WHERE WHEREIS WHICH
319683Slinton 
329683Slinton %term INT REAL NAME STRING
339683Slinton %term LFORMER RFORMER ABSTRACTION ARROW
349683Slinton 
359683Slinton %right INT
369683Slinton %binary REDIRECT
379683Slinton %binary '<' '=' '>' '!' IN
389683Slinton %left '+' '-' OR
399683Slinton %left UNARYSIGN
409683Slinton %left '*' '/' DIV MOD AND
419683Slinton %left NOT '(' '[' '.' '^' ARROW
4211173Slinton %left '\\'
439683Slinton 
449683Slinton %union {
459683Slinton     Name y_name;
469683Slinton     Symbol y_sym;
479683Slinton     Node y_node;
489683Slinton     Integer y_int;
499683Slinton     Operator y_op;
509683Slinton     long y_long;
519683Slinton     double y_real;
529683Slinton     String y_string;
539683Slinton     Boolean y_bool;
549683Slinton     Cmdlist y_cmdlist;
5514673Slinton     List y_list;
569683Slinton };
579683Slinton 
589683Slinton %type <y_op>	    trace stop
599683Slinton %type <y_long>	    INT count
609683Slinton %type <y_real>	    REAL
619683Slinton %type <y_string>    STRING redirectout filename opt_filename mode
6216607Ssam %type <y_name>	    ALIAS AND ASSIGN AT CALL CATCH CONT
6316607Ssam %type <y_name>	    DEBUG DELETE DIV DOWN DUMP
649683Slinton %type <y_name>	    EDIT FILE FUNC GRIPE HELP IF IGNORE IN LIST MOD
659683Slinton %type <y_name>	    NEXT NEXTI NIL NOT OR
6616607Ssam %type <y_name>	    PRINT PSYM QUIT RERUN RETURN RUN SH SKIP SOURCE STATUS
6716607Ssam %type <y_name>	    STEP STEPI STOP STOPI TRACE TRACEI
6816607Ssam %type <y_name>	    UP USE WHATIS WHEN WHERE WHEREIS WHICH
699683Slinton %type <y_name>	    name NAME keyword
7016607Ssam %type <y_node>      opt_qual_symbol symbol
719683Slinton %type <y_node>	    command rcommand cmd step what where examine
7212482Slinton %type <y_node>	    event opt_exp_list opt_cond
739683Slinton %type <y_node>	    exp_list exp term boolean_exp constant address
74*16926Ssam %type <y_node>	    int_list alias_command list_command line_number
75*16926Ssam %type <y_node>	    something search_command pattern
76*16926Ssam %type <y_node>	    signal_list signal
779683Slinton %type <y_cmdlist>   actions
7814673Slinton %type <y_list>      sourcepath
799683Slinton 
809683Slinton %%
819683Slinton 
829683Slinton input:
839683Slinton     input command_nl
84*16926Ssam {
85*16926Ssam 	endshellmode();
86*16926Ssam 	startaliasing();
87*16926Ssam }
889683Slinton |
899683Slinton     /* empty */
909683Slinton ;
91*16926Ssam 
929683Slinton command_nl:
939683Slinton     command_line '\n'
94*16926Ssam {
95*16926Ssam 	if (istty()) {
96*16926Ssam 		printf("(%s) ", cmdname);
97*16926Ssam 		fflush(stdout);
98*16926Ssam 	}
99*16926Ssam }
1009683Slinton |
1019683Slinton     command_line ';'
1029683Slinton |
1039683Slinton     '\n'
104*16926Ssam {
105*16926Ssam 	if (istty()) {
106*16926Ssam 		printf("(%s) ", cmdname);
107*16926Ssam 		fflush(stdout);
108*16926Ssam 	}
109*16926Ssam }
1109683Slinton ;
1119683Slinton 
1129683Slinton command_line:
1139683Slinton     command
1149683Slinton {
1159683Slinton 	if ($1 != nil) {
11612536Scsvaf             if(debug_flag[2]) {dumptree(stderr,$1); fflush (stderr);}
1179683Slinton 	    eval($1);
1189683Slinton 	}
119*16926Ssam 	startaliasing();
1209683Slinton }
1219683Slinton |
1229683Slinton     rcommand redirectout
1239683Slinton {
1249683Slinton 	if ($1 != nil) {
1259683Slinton 	    if ($2 != nil) {
1269683Slinton 		setout($2);
12712536Scsvaf                 if(debug_flag[2]) {dumptree(stderr,$1); fflush (stderr);}
1289683Slinton 		eval($1);
1299683Slinton 		unsetout();
1309683Slinton 	    } else {
13112536Scsvaf                 if(debug_flag[2]) {dumptree(stderr,$1); fflush (stderr);}
1329683Slinton 		eval($1);
1339683Slinton 	    }
1349683Slinton 	}
135*16926Ssam 	startaliasing();
1369683Slinton }
1379683Slinton ;
1389683Slinton redirectout:
1399683Slinton     '>' shellmode NAME
1409683Slinton {
1419683Slinton 	$$ = ident($3);
1429683Slinton }
1439683Slinton |
1449683Slinton     /* empty */
1459683Slinton {
1469683Slinton 	$$ = nil;
1479683Slinton }
1489683Slinton ;
1499683Slinton 
1509683Slinton /*
1519683Slinton  * Non-redirectable commands.
1529683Slinton  */
1539683Slinton command:
1549683Slinton     alias_command
1559683Slinton {
1569683Slinton 	$$ = $1;
1579683Slinton }
1589683Slinton |
159*16926Ssam     ASSIGN stopaliasing term '=' exp
1609683Slinton {
161*16926Ssam 	$$ = build(O_ASSIGN, $3, $5);
1629683Slinton }
1639683Slinton |
164*16926Ssam     CATCH
1659683Slinton {
166*16926Ssam 	$$ = build(O_CATCH, nil);
1679683Slinton }
1689683Slinton |
169*16926Ssam     CATCH stopaliasing signal_list
170*16926Ssam {
171*16926Ssam 	$$ = build(O_CATCH, $3);
172*16926Ssam }
173*16926Ssam |
1749683Slinton     CONT
1759683Slinton {
17614673Slinton 	$$ = build(O_CONT, (long) DEFSIG);
1779683Slinton }
1789683Slinton |
17911870Slinton     CONT INT
18011870Slinton {
18111870Slinton 	$$ = build(O_CONT, $2);
18211870Slinton }
18311870Slinton |
184*16926Ssam     DELETE int_list
1859683Slinton {
1869683Slinton 	$$ = build(O_DELETE, $2);
1879683Slinton }
1889683Slinton |
18916607Ssam     DOWN
19016607Ssam {
19116607Ssam 	$$ = build(O_DOWN, build(O_LCON, (long) 1));
19216607Ssam }
19316607Ssam |
19416607Ssam     DOWN INT
19516607Ssam {
19616607Ssam 	$$ = build(O_DOWN, build(O_LCON, (long) $2));
19716607Ssam }
19816607Ssam |
1999683Slinton     EDIT shellmode opt_filename
2009683Slinton {
2019683Slinton 	$$ = build(O_EDIT, $3);
2029683Slinton }
2039683Slinton |
2049683Slinton     FILE shellmode opt_filename
2059683Slinton {
2069683Slinton 	$$ = build(O_CHFILE, $3);
2079683Slinton }
2089683Slinton |
2099683Slinton     FUNC
2109683Slinton {
2119683Slinton 	$$ = build(O_FUNC, nil);
2129683Slinton }
2139683Slinton |
214*16926Ssam     FUNC stopaliasing symbol
2159683Slinton {
216*16926Ssam 	$$ = build(O_FUNC, $3);
2179683Slinton }
2189683Slinton |
2199683Slinton     GRIPE
2209683Slinton {
2219683Slinton 	$$ = build(O_GRIPE);
2229683Slinton }
2239683Slinton |
2249683Slinton     HELP
2259683Slinton {
2269683Slinton 	$$ = build(O_HELP);
2279683Slinton }
2289683Slinton |
229*16926Ssam     IGNORE
2309683Slinton {
231*16926Ssam 	$$ = build(O_IGNORE, nil);
2329683Slinton }
2339683Slinton |
234*16926Ssam     IGNORE stopaliasing signal_list
235*16926Ssam {
236*16926Ssam 	$$ = build(O_IGNORE, $3);
237*16926Ssam }
238*16926Ssam |
2399683Slinton     list_command
2409683Slinton {
2419683Slinton 	$$ = $1;
2429683Slinton }
2439683Slinton |
244*16926Ssam     PSYM stopaliasing term
2459683Slinton {
246*16926Ssam 	$$ = build(O_PSYM, $3);
2479683Slinton }
2489683Slinton |
2499683Slinton     QUIT
2509683Slinton {
2519683Slinton 	if (not popinput()) {
2529683Slinton 	    quit(0);
2539683Slinton 	} else {
2549683Slinton 	    $$ = nil;
2559683Slinton 	}
2569683Slinton }
2579683Slinton |
25816607Ssam     RETURN
25916607Ssam {
26016607Ssam 	$$ = build(O_RETURN, nil);
26116607Ssam }
26216607Ssam |
263*16926Ssam     RETURN stopaliasing opt_qual_symbol
26416607Ssam {
265*16926Ssam 	$$ = build(O_RETURN, $3);
26616607Ssam }
26716607Ssam |
2689683Slinton     runcommand
2699683Slinton {
2709683Slinton 	run();
2719683Slinton 	/* NOTREACHED */
2729683Slinton }
2739683Slinton |
2749683Slinton     SH
2759683Slinton {
2769683Slinton 	shellline();
2779683Slinton 	$$ = nil;
2789683Slinton }
2799683Slinton |
2809683Slinton     SOURCE shellmode filename
2819683Slinton {
2829683Slinton 	$$ = build(O_SOURCE, $3);
2839683Slinton }
2849683Slinton |
2859683Slinton     step
2869683Slinton {
2879683Slinton 	$$ = $1;
2889683Slinton }
2899683Slinton |
2909683Slinton     stop where opt_cond
2919683Slinton {
2929683Slinton 	$$ = build($1, nil, $2, $3);
2939683Slinton }
2949683Slinton |
2959683Slinton     stop what opt_cond
2969683Slinton {
2979683Slinton 	$$ = build($1, $2, nil, $3);
2989683Slinton }
2999683Slinton |
3009683Slinton     stop IF boolean_exp
3019683Slinton {
3029683Slinton 	$$ = build($1, nil, nil, $3);
3039683Slinton }
3049683Slinton |
3059683Slinton     trace what where opt_cond
3069683Slinton {
3079683Slinton 	$$ = build($1, $2, $3, $4);
3089683Slinton }
3099683Slinton |
3109683Slinton     trace where opt_cond
3119683Slinton {
3129683Slinton 	$$ = build($1, nil, $2, $3);
3139683Slinton }
3149683Slinton |
3159683Slinton     trace what opt_cond
3169683Slinton {
3179683Slinton 	$$ = build($1, $2, nil, $3);
3189683Slinton }
3199683Slinton |
3209683Slinton     trace opt_cond
3219683Slinton {
3229683Slinton 	$$ = build($1, nil, nil, $2);
3239683Slinton }
3249683Slinton |
32516607Ssam     UP
3269683Slinton {
32716607Ssam 	$$ = build(O_UP, build(O_LCON, (long) 1));
3289683Slinton }
3299683Slinton |
33016607Ssam     UP INT
3319683Slinton {
33216607Ssam 	$$ = build(O_UP, build(O_LCON, (long) $2));
3339683Slinton }
3349683Slinton |
3359683Slinton     USE shellmode sourcepath
3369683Slinton {
33714673Slinton 	String dir;
33814673Slinton 
3399683Slinton 	$$ = nil;
34014673Slinton 	if (list_size($3) == 0) {
34114673Slinton 	    foreach (String, dir, sourcepath)
34214673Slinton 		printf("%s ", dir);
34314673Slinton 	    endfor
34414673Slinton 	    printf("\n");
34514673Slinton 	} else {
34614673Slinton 	    foreach (String, dir, sourcepath)
34714673Slinton 		list_delete(list_curitem(sourcepath), sourcepath);
34814673Slinton 	    endfor
34914673Slinton 	    sourcepath = $3;
3509683Slinton 	}
3519683Slinton }
35216604Ssam |
35316607Ssam     WHATIS term
35416604Ssam {
35516607Ssam 	$$ = build(O_WHATIS, $2);
35616604Ssam }
35716607Ssam |
35816607Ssam     WHEN event '{' actions '}'
35916604Ssam {
36016607Ssam 	$$ = build(O_ADDEVENT, $2, $4);
36116604Ssam }
36216604Ssam |
36316607Ssam     WHEREIS symbol
36416604Ssam {
36516607Ssam 	$$ = build(O_WHEREIS, $2);
36616604Ssam }
36716607Ssam |
36816607Ssam     WHICH symbol
36916604Ssam {
37016607Ssam 	$$ = build(O_WHICH, $2);
37116604Ssam }
37216625Ssam |
37316625Ssam     search_command
37416625Ssam {
37516625Ssam 	$$ = $1;
37616625Ssam }
37716604Ssam ;
37816625Ssam 
37916625Ssam 
38016625Ssam search_command:
38116625Ssam     '/' pattern
38216625Ssam {
38316625Ssam 	$$ = build(O_SEARCH, build(O_LCON, 1), $2);
38416625Ssam }
38516625Ssam |
38616625Ssam     '?' pattern
38716625Ssam {
38816625Ssam 	$$ = build(O_SEARCH, build(O_LCON, 0), $2);
38916625Ssam }
39016625Ssam ;
39116625Ssam 
39216625Ssam pattern:
39316625Ssam     STRING
39416625Ssam {
39516625Ssam 	$$ = build(O_SCON, $1);
39616625Ssam }
39716625Ssam ;
39816625Ssam 
399*16926Ssam int_list:
400*16926Ssam     INT
401*16926Ssam {
402*16926Ssam 	$$ = build(O_COMMA, build(O_LCON, $1), nil);
403*16926Ssam }
404*16926Ssam |
405*16926Ssam     INT int_list
406*16926Ssam {
407*16926Ssam 	$$ = build(O_COMMA, build(O_LCON, $1), $2);
408*16926Ssam }
409*16926Ssam ;
410*16926Ssam 
411*16926Ssam signal_list:
412*16926Ssam      signal
413*16926Ssam {
414*16926Ssam 	$$ = build(O_COMMA, $1, nil);
415*16926Ssam }
416*16926Ssam |
417*16926Ssam     signal signal_list
418*16926Ssam {
419*16926Ssam 	$$ = build(O_COMMA, $1, $2);
420*16926Ssam }
421*16926Ssam ;
422*16926Ssam 
423*16926Ssam signal:
424*16926Ssam     INT
425*16926Ssam {
426*16926Ssam 	if ($1 < 1 || $1 > NSIG)
427*16926Ssam 		error("Invalid signal %d.", $1);
428*16926Ssam 	$$ = build(O_LCON, $1);
429*16926Ssam }
430*16926Ssam |
431*16926Ssam     NAME
432*16926Ssam {
433*16926Ssam 	$$ = build(O_LCON, signalname(ident($1)));
434*16926Ssam }
435*16926Ssam ;
436*16926Ssam 
4379683Slinton runcommand:
43816607Ssam     run arglist
43912482Slinton |
44012524Slinton     run
4419683Slinton ;
442*16926Ssam 
4439683Slinton run:
44412524Slinton     RUN shellmode
4459683Slinton {
44616607Ssam 	arginit();
4479683Slinton 	fflush(stdout);
4489683Slinton }
44916607Ssam |
45016607Ssam     RERUN shellmode
45116607Ssam {
45216607Ssam 	fflush(stdout);
45316607Ssam }
4549683Slinton ;
4559683Slinton arglist:
4569683Slinton     arglist arg
4579683Slinton |
45812482Slinton     arg
4599683Slinton ;
4609683Slinton arg:
461*16926Ssam      NAME
4629683Slinton {
4639683Slinton 	newarg(ident($1));
4649683Slinton }
4659683Slinton |
466*16926Ssam      STRING
46716607Ssam {
46816607Ssam 	newarg($1);
46916607Ssam }
47016607Ssam |
4719683Slinton     '<' NAME
4729683Slinton {
4739683Slinton 	inarg(ident($2));
4749683Slinton }
4759683Slinton |
4769683Slinton     '>' NAME
4779683Slinton {
4789683Slinton 	outarg(ident($2));
4799683Slinton }
4809683Slinton ;
4819683Slinton step:
482*16926Ssam     STEP stopaliasing
4839683Slinton {
4849683Slinton 	$$ = build(O_STEP, true, false);
4859683Slinton }
4869683Slinton |
487*16926Ssam     STEPI stopaliasing
4889683Slinton {
4899683Slinton 	$$ = build(O_STEP, false, false);
4909683Slinton }
4919683Slinton |
492*16926Ssam     NEXT stopaliasing
4939683Slinton {
4949683Slinton 	$$ = build(O_STEP, true, true);
4959683Slinton }
4969683Slinton |
497*16926Ssam     NEXTI stopaliasing
4989683Slinton {
4999683Slinton 	$$ = build(O_STEP, false, true);
5009683Slinton }
5019683Slinton ;
5029683Slinton shellmode:
5039683Slinton     /* empty */
5049683Slinton {
5059683Slinton 	beginshellmode();
5069683Slinton }
5079683Slinton ;
5089683Slinton sourcepath:
5099683Slinton     sourcepath NAME
5109683Slinton {
51114673Slinton 	$$ = $1;
51214673Slinton 	list_append(list_item(ident($2)), nil, $$);
5139683Slinton }
5149683Slinton |
5159683Slinton     /* empty */
5169683Slinton {
51714673Slinton 	$$ = list_alloc();
5189683Slinton }
5199683Slinton ;
5209683Slinton event:
5219683Slinton     where
5229683Slinton |
5239683Slinton     exp
5249683Slinton ;
5259683Slinton actions:
5269683Slinton     actions cmd ';'
5279683Slinton {
5289683Slinton 	$$ = $1;
5299683Slinton 	cmdlist_append($2, $$);
5309683Slinton }
5319683Slinton |
5329683Slinton     cmd ';'
5339683Slinton {
5349683Slinton 	$$ = list_alloc();
5359683Slinton 	cmdlist_append($1, $$);
5369683Slinton }
5379683Slinton ;
5389683Slinton cmd:
5399683Slinton     command
5409683Slinton |
5419683Slinton     rcommand
5429683Slinton ;
5439683Slinton 
5449683Slinton /*
5459683Slinton  * Redirectable commands.
5469683Slinton  */
5479683Slinton rcommand:
548*16926Ssam     PRINT stopaliasing exp_list
5499683Slinton {
550*16926Ssam 	$$ = build(O_PRINT, $3);
5519683Slinton }
5529683Slinton |
5539683Slinton     WHERE
5549683Slinton {
5559683Slinton 	$$ = build(O_WHERE);
5569683Slinton }
5579683Slinton |
5589683Slinton     examine
5599683Slinton {
5609683Slinton 	$$ = $1;
5619683Slinton }
5629683Slinton |
563*16926Ssam     CALL stopaliasing term '(' opt_exp_list ')'
5649683Slinton {
565*16926Ssam 	$$ = build(O_CALL, $3, $5);
5669683Slinton }
5679683Slinton |
56812536Scsvaf     DEBUG INT
56912536Scsvaf {
57012536Scsvaf  	$$ = build(O_DEBUG, $2);
57112536Scsvaf }
57212536Scsvaf |
5739683Slinton     DUMP
5749683Slinton {
5759683Slinton 	$$ = build(O_DUMP);
5769683Slinton }
5779683Slinton |
5789683Slinton     STATUS
5799683Slinton {
5809683Slinton 	$$ = build(O_STATUS);
5819683Slinton }
5829683Slinton ;
5839683Slinton alias_command:
584*16926Ssam     alias name something
5859683Slinton {
586*16926Ssam 	$$ = build(O_ALIAS, build(O_NAME, $2), $3);
5879683Slinton }
5889683Slinton |
589*16926Ssam     alias name
5909683Slinton {
5919683Slinton 	$$ = build(O_ALIAS, build(O_NAME, $2), nil);
5929683Slinton }
5939683Slinton |
594*16926Ssam     alias
5959683Slinton {
5969683Slinton 	$$ = build(O_ALIAS, nil, nil);
5979683Slinton }
5989683Slinton ;
599*16926Ssam 
600*16926Ssam alias:
601*16926Ssam      ALIAS stopaliasing
602*16926Ssam ;
603*16926Ssam 
604*16926Ssam stopaliasing:
605*16926Ssam     /* empty */
606*16926Ssam {
607*16926Ssam 	stopaliasing();
608*16926Ssam }
609*16926Ssam ;
610*16926Ssam 
6119683Slinton trace:
612*16926Ssam     TRACE stopaliasing
6139683Slinton {
6149683Slinton 	$$ = O_TRACE;
6159683Slinton }
6169683Slinton |
617*16926Ssam     TRACEI stopaliasing
6189683Slinton {
6199683Slinton 	$$ = O_TRACEI;
6209683Slinton }
6219683Slinton ;
6229683Slinton stop:
623*16926Ssam     STOP stopaliasing
6249683Slinton {
6259683Slinton 	$$ = O_STOP;
6269683Slinton }
6279683Slinton |
628*16926Ssam     STOPI stopaliasing
6299683Slinton {
6309683Slinton 	$$ = O_STOPI;
6319683Slinton }
6329683Slinton ;
6339683Slinton what:
6349683Slinton     exp
6359683Slinton {
6369683Slinton 	$$ = $1;
6379683Slinton }
6389683Slinton |
6399683Slinton     STRING ':' line_number
6409683Slinton {
6419683Slinton 	$$ = build(O_QLINE, build(O_SCON, $1), $3);
6429683Slinton }
6439683Slinton ;
6449683Slinton where:
6459683Slinton     IN term
6469683Slinton {
6479683Slinton 	$$ = $2;
6489683Slinton }
6499683Slinton |
6509683Slinton     AT line_number
6519683Slinton {
6529683Slinton 	$$ = build(O_QLINE, build(O_SCON, cursource), $2);
6539683Slinton }
6549683Slinton |
6559683Slinton     AT STRING ':' line_number
6569683Slinton {
6579683Slinton 	$$ = build(O_QLINE, build(O_SCON, $2), $4);
6589683Slinton }
6599683Slinton ;
6609683Slinton filename:
6619683Slinton     NAME
6629683Slinton {
6639683Slinton 	$$ = ident($1);
6649683Slinton }
6659683Slinton ;
6669683Slinton opt_filename:
6679683Slinton     /* empty */
6689683Slinton {
6699683Slinton 	$$ = nil;
6709683Slinton }
6719683Slinton |
6729683Slinton     filename
6739683Slinton {
6749683Slinton 	$$ = $1;
6759683Slinton }
6769683Slinton ;
67712482Slinton opt_exp_list:
67812482Slinton     exp_list
6799683Slinton {
68012482Slinton 	$$ = $1;
6819683Slinton }
6829683Slinton |
68312482Slinton     /* empty */
6849683Slinton {
68512482Slinton 	$$ = nil;
6869683Slinton }
6879683Slinton ;
6889683Slinton list_command:
689*16926Ssam     list
6909683Slinton {
6919683Slinton 	$$ = build(O_LIST,
6929683Slinton 	    build(O_LCON, (long) cursrcline),
6939683Slinton 	    build(O_LCON, (long) cursrcline + 9)
6949683Slinton 	);
6959683Slinton }
6969683Slinton |
697*16926Ssam     list line_number
6989683Slinton {
6999683Slinton 	$$ = build(O_LIST, $2, $2);
7009683Slinton }
7019683Slinton |
702*16926Ssam     list line_number ',' line_number
7039683Slinton {
7049683Slinton 	$$ = build(O_LIST, $2, $4);
7059683Slinton }
7069683Slinton |
707*16926Ssam     list symbol
7089683Slinton {
709*16926Ssam 	$$ = build(O_LIST, $2, nil);
7109683Slinton }
7119683Slinton ;
712*16926Ssam 
713*16926Ssam list:
714*16926Ssam     LIST stopaliasing
71516607Ssam ;
716*16926Ssam 
7179683Slinton line_number:
7189683Slinton     INT
7199683Slinton {
7209683Slinton 	$$ = build(O_LCON, $1);
7219683Slinton }
7229683Slinton |
7239683Slinton     '$'
7249683Slinton {
7259683Slinton 	$$ = build(O_LCON, (long) LASTLINE);
7269683Slinton }
7279683Slinton ;
7289683Slinton examine:
7299683Slinton     address '/' count mode
7309683Slinton {
7319683Slinton 	$$ = build(O_EXAMINE, $4, $1, nil, $3);
7329683Slinton }
7339683Slinton |
7349683Slinton     address ',' address '/' mode
7359683Slinton {
7369683Slinton 	$$ = build(O_EXAMINE, $5, $1, $3, 0);
7379683Slinton }
7389683Slinton |
7399683Slinton     '/' count mode
7409683Slinton {
7419683Slinton 	$$ = build(O_EXAMINE, $3, build(O_LCON, (long) prtaddr), nil, $2);
7429683Slinton }
74311173Slinton |
74411173Slinton     address '=' mode
74511173Slinton {
74611173Slinton 	$$ = build(O_EXAMINE, $3, $1, nil, 0);
74711173Slinton }
7489683Slinton ;
7499683Slinton address:
7509683Slinton     INT
7519683Slinton {
7529683Slinton 	$$ = build(O_LCON, $1);
7539683Slinton }
7549683Slinton |
7559683Slinton     '&' term
7569683Slinton {
7579683Slinton 	$$ = amper($2);
7589683Slinton }
7599683Slinton |
7609683Slinton     address '+' address
7619683Slinton {
7629683Slinton 	$$ = build(O_ADD, $1, $3);
7639683Slinton }
7649683Slinton |
7659683Slinton     address '-' address
7669683Slinton {
7679683Slinton 	$$ = build(O_SUB, $1, $3);
7689683Slinton }
7699683Slinton |
7709683Slinton     address '*' address
7719683Slinton {
7729683Slinton 	$$ = build(O_MUL, $1, $3);
7739683Slinton }
7749683Slinton |
7759683Slinton     '*' address %prec UNARYSIGN
7769683Slinton {
7779683Slinton 	$$ = build(O_INDIR, $2);
7789683Slinton }
7799683Slinton |
7809683Slinton     '(' exp ')'
7819683Slinton {
7829683Slinton 	$$ = $2;
7839683Slinton }
7849683Slinton ;
7859683Slinton count:
7869683Slinton     /* empty */
7879683Slinton {
7889683Slinton 	$$ = 1;
7899683Slinton }
7909683Slinton |
7919683Slinton     INT
7929683Slinton {
7939683Slinton 	$$ = $1;
7949683Slinton }
7959683Slinton ;
7969683Slinton mode:
7979683Slinton     name
7989683Slinton {
7999683Slinton 	$$ = ident($1);
8009683Slinton 	curformat = $$;
8019683Slinton }
8029683Slinton |
8039683Slinton     /* empty */
8049683Slinton {
8059683Slinton 	$$ = curformat;
8069683Slinton }
8079683Slinton ;
8089683Slinton opt_cond:
8099683Slinton     /* empty */
8109683Slinton {
8119683Slinton 	$$ = nil;
8129683Slinton }
8139683Slinton |
8149683Slinton     IF boolean_exp
8159683Slinton {
8169683Slinton 	$$ = $2;
8179683Slinton }
8189683Slinton ;
8199683Slinton exp_list:
8209683Slinton     exp
8219683Slinton {
8229683Slinton 	$$ = build(O_COMMA, $1, nil);
8239683Slinton }
8249683Slinton |
8259683Slinton     exp ',' exp_list
8269683Slinton {
8279683Slinton 	$$ = build(O_COMMA, $1, $3);
8289683Slinton }
8299683Slinton ;
8309683Slinton exp:
8319683Slinton     term
8329683Slinton {
8339683Slinton 	$$ = build(O_RVAL, $1);
8349683Slinton }
8359683Slinton |
8369683Slinton     constant
8379683Slinton {
8389683Slinton 	$$ = $1;
8399683Slinton }
8409683Slinton |
84116607Ssam     exp '\\' opt_qual_symbol
84211173Slinton {
84311173Slinton 	$$ = build(O_TYPERENAME, $1, $3);
84411173Slinton }
84511173Slinton |
8469683Slinton     '+' exp %prec UNARYSIGN
8479683Slinton {
8489683Slinton 	$$ = $2;
8499683Slinton }
8509683Slinton |
8519683Slinton     '-' exp %prec UNARYSIGN
8529683Slinton {
8539683Slinton 	$$ = build(O_NEG, $2);
8549683Slinton }
8559683Slinton |
8569683Slinton     '&' exp %prec UNARYSIGN
8579683Slinton {
8589683Slinton 	$$ = amper($2);
8599683Slinton }
8609683Slinton |
8619683Slinton     exp '+' exp
8629683Slinton {
8639683Slinton 	$$ = build(O_ADD, $1, $3);
8649683Slinton }
8659683Slinton |
8669683Slinton     exp '-' exp
8679683Slinton {
8689683Slinton 	$$ = build(O_SUB, $1, $3);
8699683Slinton }
8709683Slinton |
8719683Slinton     exp '*' exp
8729683Slinton {
8739683Slinton 	$$ = build(O_MUL, $1, $3);
8749683Slinton }
8759683Slinton |
8769683Slinton     exp '/' exp
8779683Slinton {
8789683Slinton 	$$ = build(O_DIVF, $1, $3);
8799683Slinton }
8809683Slinton |
8819683Slinton     exp DIV exp
8829683Slinton {
8839683Slinton 	$$ = build(O_DIV, $1, $3);
8849683Slinton }
8859683Slinton |
8869683Slinton     exp MOD exp
8879683Slinton {
8889683Slinton 	$$ = build(O_MOD, $1, $3);
8899683Slinton }
8909683Slinton |
8919683Slinton     exp AND exp
8929683Slinton {
8939683Slinton 	$$ = build(O_AND, $1, $3);
8949683Slinton }
8959683Slinton |
8969683Slinton     exp OR exp
8979683Slinton {
8989683Slinton 	$$ = build(O_OR, $1, $3);
8999683Slinton }
9009683Slinton |
9019683Slinton     exp '<' exp
9029683Slinton {
9039683Slinton 	$$ = build(O_LT, $1, $3);
9049683Slinton }
9059683Slinton |
9069683Slinton     exp '<' '=' exp
9079683Slinton {
9089683Slinton 	$$ = build(O_LE, $1, $4);
9099683Slinton }
9109683Slinton |
9119683Slinton     exp '>' exp
9129683Slinton {
9139683Slinton 	$$ = build(O_GT, $1, $3);
9149683Slinton }
9159683Slinton |
9169683Slinton     exp '>' '=' exp
9179683Slinton {
9189683Slinton 	$$ = build(O_GE, $1, $4);
9199683Slinton }
9209683Slinton |
9219683Slinton     exp '=' exp
9229683Slinton {
9239683Slinton 	$$ = build(O_EQ, $1, $3);
9249683Slinton }
9259683Slinton |
9269683Slinton     exp '=' '=' exp
9279683Slinton {
9289683Slinton 	$$ = build(O_EQ, $1, $4);
9299683Slinton }
9309683Slinton |
9319683Slinton     exp '<' '>' exp
9329683Slinton {
9339683Slinton 	$$ = build(O_NE, $1, $4);
9349683Slinton }
9359683Slinton |
9369683Slinton     exp '!' '=' exp
9379683Slinton {
9389683Slinton 	$$ = build(O_NE, $1, $4);
9399683Slinton }
9409683Slinton |
9419683Slinton     '(' exp ')'
9429683Slinton {
9439683Slinton 	$$ = $2;
9449683Slinton }
9459683Slinton ;
9469683Slinton term:
9479683Slinton     symbol
9489683Slinton {
9499683Slinton 	$$ = $1;
9509683Slinton }
9519683Slinton |
9529683Slinton     term '[' exp_list ']'
9539683Slinton {
9549683Slinton 	$$ = subscript($1, $3);
9559683Slinton }
9569683Slinton |
9579683Slinton     term '.' name
9589683Slinton {
9599683Slinton 	$$ = dot($1, $3);
9609683Slinton }
9619683Slinton |
9629683Slinton     term ARROW name
9639683Slinton {
9649683Slinton 	$$ = dot($1, $3);
9659683Slinton }
9669683Slinton |
9679683Slinton     '*' term %prec UNARYSIGN
9689683Slinton {
9699683Slinton 	$$ = build(O_INDIR, $2);
9709683Slinton }
9719683Slinton |
9729683Slinton     '*' '(' exp ')' %prec UNARYSIGN
9739683Slinton {
9749683Slinton 	$$ = build(O_INDIR, $3);
9759683Slinton }
9769683Slinton |
9779683Slinton     term '^' %prec UNARYSIGN
9789683Slinton {
9799683Slinton 	$$ = build(O_INDIR, $1);
9809683Slinton }
9819683Slinton |
9829683Slinton     '#' term %prec UNARYSIGN
9839683Slinton {
9849683Slinton 	$$ = concrete($2);
9859683Slinton }
9869683Slinton |
98716607Ssam     '#' '(' exp ')' %prec UNARYSIGN
98816607Ssam {
98916607Ssam 	$$ = concrete($3);
99016607Ssam }
99116607Ssam |
99212482Slinton     term '(' opt_exp_list ')'
9939683Slinton {
9949683Slinton 	$$ = build(O_CALL, $1, $3);
9959683Slinton }
9969683Slinton ;
9979683Slinton boolean_exp:
9989683Slinton     exp
9999683Slinton {
10009683Slinton 	chkboolean($1);
10019683Slinton 	$$ = $1;
10029683Slinton }
10039683Slinton ;
10049683Slinton constant:
10059683Slinton     INT
10069683Slinton {
10079683Slinton 	$$ = build(O_LCON, $1);
10089683Slinton }
10099683Slinton |
10109683Slinton     REAL
10119683Slinton {
10129683Slinton 	$$ = build(O_FCON, $1);
10139683Slinton }
10149683Slinton |
10159683Slinton     STRING
10169683Slinton {
10179683Slinton 	$$ = build(O_SCON, $1);
10189683Slinton }
10199683Slinton ;
102016607Ssam opt_qual_symbol:
102116607Ssam     symbol
102216607Ssam {
102316607Ssam 	$$ = $1;
102416607Ssam }
102516607Ssam |
102616607Ssam     opt_qual_symbol '.' name
102716607Ssam {
102816607Ssam 	$$ = dot($1, $3);
102916607Ssam }
103016607Ssam ;
10319683Slinton symbol:
10329683Slinton     name
10339683Slinton {
10349683Slinton 	$$ = build(O_SYM, which($1));
10359683Slinton }
103616607Ssam |
103716607Ssam     '.' name
103816607Ssam {
103916607Ssam 	$$ = dot(build(O_SYM, program), $2);
104016607Ssam }
10419683Slinton ;
10429683Slinton name:
10439683Slinton     NAME
10449683Slinton {
10459683Slinton 	$$ = $1;
10469683Slinton }
10479683Slinton |
10489683Slinton     keyword
10499683Slinton {
10509683Slinton 	$$ = $1;
10519683Slinton }
10529683Slinton keyword:
105312536Scsvaf     ALIAS | AND | ASSIGN | AT | CALL | CATCH | CONT | DEBUG | DELETE | DIV |
105416607Ssam     DOWN | DUMP | EDIT | FILE | FUNC | GRIPE | HELP | IGNORE | IN | LIST |
105516607Ssam     MOD | NEXT | NEXTI | NIL | NOT | OR | PRINT | PSYM | QUIT |
105616607Ssam     RERUN | RETURN | RUN | SH | SKIP | SOURCE | STATUS | STEP | STEPI |
105716607Ssam     STOP | STOPI | TRACE | TRACEI | UP |
105813840Slinton     USE | WHATIS | WHEN | WHERE | WHEREIS | WHICH
10599683Slinton ;
1060*16926Ssam 
1061*16926Ssam something:
1062*16926Ssam     NAME
1063*16926Ssam {
1064*16926Ssam 	$$ = build(O_NAME, $1);
1065*16926Ssam }
1066*16926Ssam |
1067*16926Ssam     keyword
1068*16926Ssam {
1069*16926Ssam 	$$ = build(O_NAME, $1);
1070*16926Ssam }
1071*16926Ssam |
1072*16926Ssam     STRING
1073*16926Ssam {
1074*16926Ssam 	$$ = build(O_SCON, $1);
1075*16926Ssam }
1076*16926Ssam ;
1077