xref: /csrg-svn/old/dbx/commands.y (revision 16934)
19683Slinton %{
29683Slinton /* Copyright (c) 1982 Regents of the University of California */
39683Slinton 
4*16934Ssam static	char sccsid[] = "@(#)commands.y	1.13 (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"
1916926Ssam #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*16934Ssam %type <y_node>	    integer_list alias_command list_command line_number
7516926Ssam %type <y_node>	    something search_command pattern
7616926Ssam %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
8416926Ssam {
8516926Ssam 	endshellmode();
8616926Ssam 	startaliasing();
8716926Ssam }
889683Slinton |
899683Slinton     /* empty */
909683Slinton ;
9116926Ssam 
929683Slinton command_nl:
939683Slinton     command_line '\n'
9416926Ssam {
9516926Ssam 	if (istty()) {
9616926Ssam 		printf("(%s) ", cmdname);
9716926Ssam 		fflush(stdout);
9816926Ssam 	}
9916926Ssam }
1009683Slinton |
1019683Slinton     command_line ';'
1029683Slinton |
1039683Slinton     '\n'
10416926Ssam {
10516926Ssam 	if (istty()) {
10616926Ssam 		printf("(%s) ", cmdname);
10716926Ssam 		fflush(stdout);
10816926Ssam 	}
10916926Ssam }
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 	}
11916926Ssam 	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 	}
13516926Ssam 	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 |
15916926Ssam     ASSIGN stopaliasing term '=' exp
1609683Slinton {
16116926Ssam 	$$ = build(O_ASSIGN, $3, $5);
1629683Slinton }
1639683Slinton |
16416926Ssam     CATCH
1659683Slinton {
16616926Ssam 	$$ = build(O_CATCH, nil);
1679683Slinton }
1689683Slinton |
16916926Ssam     CATCH stopaliasing signal_list
17016926Ssam {
17116926Ssam 	$$ = build(O_CATCH, $3);
17216926Ssam }
17316926Ssam |
1749683Slinton     CONT
1759683Slinton {
17614673Slinton 	$$ = build(O_CONT, (long) DEFSIG);
1779683Slinton }
1789683Slinton |
17911870Slinton     CONT INT
18011870Slinton {
18111870Slinton 	$$ = build(O_CONT, $2);
18211870Slinton }
18311870Slinton |
184*16934Ssam     DELETE integer_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 |
21416926Ssam     FUNC stopaliasing symbol
2159683Slinton {
21616926Ssam 	$$ = build(O_FUNC, $3);
2179683Slinton }
2189683Slinton |
2199683Slinton     GRIPE
2209683Slinton {
2219683Slinton 	$$ = build(O_GRIPE);
2229683Slinton }
2239683Slinton |
2249683Slinton     HELP
2259683Slinton {
2269683Slinton 	$$ = build(O_HELP);
2279683Slinton }
2289683Slinton |
22916926Ssam     IGNORE
2309683Slinton {
23116926Ssam 	$$ = build(O_IGNORE, nil);
2329683Slinton }
2339683Slinton |
23416926Ssam     IGNORE stopaliasing signal_list
23516926Ssam {
23616926Ssam 	$$ = build(O_IGNORE, $3);
23716926Ssam }
23816926Ssam |
2399683Slinton     list_command
2409683Slinton {
2419683Slinton 	$$ = $1;
2429683Slinton }
2439683Slinton |
24416926Ssam     PSYM stopaliasing term
2459683Slinton {
24616926Ssam 	$$ = 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 |
26316926Ssam     RETURN stopaliasing opt_qual_symbol
26416607Ssam {
26516926Ssam 	$$ = 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 |
353*16934Ssam     WHATIS stopaliasing term
35416604Ssam {
355*16934Ssam 	$$ = build(O_WHATIS, $3);
35616604Ssam }
35716607Ssam |
358*16934Ssam     WHEN stopaliasing event '{' actions '}'
35916604Ssam {
360*16934Ssam 	$$ = build(O_ADDEVENT, $3, $5);
36116604Ssam }
36216604Ssam |
363*16934Ssam     WHEREIS stopaliasing symbol
36416604Ssam {
365*16934Ssam 	$$ = build(O_WHEREIS, $3);
36616604Ssam }
36716607Ssam |
368*16934Ssam     WHICH stopaliasing symbol
36916604Ssam {
370*16934Ssam 	$$ = build(O_WHICH, $3);
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*16934Ssam integer_list:
40016926Ssam     INT
40116926Ssam {
402*16934Ssam 	$$ = build(O_LCON, $1);
40316926Ssam }
40416926Ssam |
405*16934Ssam     INT integer_list
40616926Ssam {
40716926Ssam 	$$ = build(O_COMMA, build(O_LCON, $1), $2);
40816926Ssam }
40916926Ssam ;
41016926Ssam 
41116926Ssam signal_list:
41216926Ssam      signal
41316926Ssam {
41416926Ssam 	$$ = build(O_COMMA, $1, nil);
41516926Ssam }
41616926Ssam |
41716926Ssam     signal signal_list
41816926Ssam {
41916926Ssam 	$$ = build(O_COMMA, $1, $2);
42016926Ssam }
42116926Ssam ;
42216926Ssam 
42316926Ssam signal:
42416926Ssam     INT
42516926Ssam {
42616926Ssam 	if ($1 < 1 || $1 > NSIG)
42716926Ssam 		error("Invalid signal %d.", $1);
42816926Ssam 	$$ = build(O_LCON, $1);
42916926Ssam }
43016926Ssam |
43116926Ssam     NAME
43216926Ssam {
43316926Ssam 	$$ = build(O_LCON, signalname(ident($1)));
43416926Ssam }
43516926Ssam ;
43616926Ssam 
4379683Slinton runcommand:
43816607Ssam     run arglist
43912482Slinton |
44012524Slinton     run
4419683Slinton ;
44216926Ssam 
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:
46116926Ssam      NAME
4629683Slinton {
4639683Slinton 	newarg(ident($1));
4649683Slinton }
4659683Slinton |
46616926Ssam      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:
48216926Ssam     STEP stopaliasing
4839683Slinton {
4849683Slinton 	$$ = build(O_STEP, true, false);
4859683Slinton }
4869683Slinton |
48716926Ssam     STEPI stopaliasing
4889683Slinton {
4899683Slinton 	$$ = build(O_STEP, false, false);
4909683Slinton }
4919683Slinton |
49216926Ssam     NEXT stopaliasing
4939683Slinton {
4949683Slinton 	$$ = build(O_STEP, true, true);
4959683Slinton }
4969683Slinton |
49716926Ssam     NEXTI stopaliasing
4989683Slinton {
4999683Slinton 	$$ = build(O_STEP, false, true);
5009683Slinton }
5019683Slinton ;
5029683Slinton shellmode:
5039683Slinton     /* empty */
5049683Slinton {
5059683Slinton 	beginshellmode();
506*16934Ssam 	stopaliasing();
5079683Slinton }
5089683Slinton ;
5099683Slinton sourcepath:
5109683Slinton     sourcepath NAME
5119683Slinton {
51214673Slinton 	$$ = $1;
51314673Slinton 	list_append(list_item(ident($2)), nil, $$);
5149683Slinton }
5159683Slinton |
5169683Slinton     /* empty */
5179683Slinton {
51814673Slinton 	$$ = list_alloc();
5199683Slinton }
5209683Slinton ;
5219683Slinton event:
5229683Slinton     where
5239683Slinton |
5249683Slinton     exp
5259683Slinton ;
5269683Slinton actions:
5279683Slinton     actions cmd ';'
5289683Slinton {
5299683Slinton 	$$ = $1;
5309683Slinton 	cmdlist_append($2, $$);
5319683Slinton }
5329683Slinton |
5339683Slinton     cmd ';'
5349683Slinton {
5359683Slinton 	$$ = list_alloc();
5369683Slinton 	cmdlist_append($1, $$);
5379683Slinton }
5389683Slinton ;
5399683Slinton cmd:
5409683Slinton     command
5419683Slinton |
5429683Slinton     rcommand
5439683Slinton ;
5449683Slinton 
5459683Slinton /*
5469683Slinton  * Redirectable commands.
5479683Slinton  */
5489683Slinton rcommand:
54916926Ssam     PRINT stopaliasing exp_list
5509683Slinton {
55116926Ssam 	$$ = build(O_PRINT, $3);
5529683Slinton }
5539683Slinton |
5549683Slinton     WHERE
5559683Slinton {
5569683Slinton 	$$ = build(O_WHERE);
5579683Slinton }
5589683Slinton |
5599683Slinton     examine
5609683Slinton {
5619683Slinton 	$$ = $1;
5629683Slinton }
5639683Slinton |
56416926Ssam     CALL stopaliasing term '(' opt_exp_list ')'
5659683Slinton {
56616926Ssam 	$$ = build(O_CALL, $3, $5);
5679683Slinton }
5689683Slinton |
56912536Scsvaf     DEBUG INT
57012536Scsvaf {
57112536Scsvaf  	$$ = build(O_DEBUG, $2);
57212536Scsvaf }
57312536Scsvaf |
5749683Slinton     DUMP
5759683Slinton {
5769683Slinton 	$$ = build(O_DUMP);
5779683Slinton }
5789683Slinton |
5799683Slinton     STATUS
5809683Slinton {
5819683Slinton 	$$ = build(O_STATUS);
5829683Slinton }
5839683Slinton ;
5849683Slinton alias_command:
58516926Ssam     alias name something
5869683Slinton {
58716926Ssam 	$$ = build(O_ALIAS, build(O_NAME, $2), $3);
5889683Slinton }
5899683Slinton |
59016926Ssam     alias name
5919683Slinton {
5929683Slinton 	$$ = build(O_ALIAS, build(O_NAME, $2), nil);
5939683Slinton }
5949683Slinton |
59516926Ssam     alias
5969683Slinton {
5979683Slinton 	$$ = build(O_ALIAS, nil, nil);
5989683Slinton }
5999683Slinton ;
60016926Ssam 
60116926Ssam alias:
60216926Ssam      ALIAS stopaliasing
60316926Ssam ;
60416926Ssam 
60516926Ssam stopaliasing:
60616926Ssam     /* empty */
60716926Ssam {
60816926Ssam 	stopaliasing();
60916926Ssam }
61016926Ssam ;
61116926Ssam 
6129683Slinton trace:
61316926Ssam     TRACE stopaliasing
6149683Slinton {
6159683Slinton 	$$ = O_TRACE;
6169683Slinton }
6179683Slinton |
61816926Ssam     TRACEI stopaliasing
6199683Slinton {
6209683Slinton 	$$ = O_TRACEI;
6219683Slinton }
6229683Slinton ;
6239683Slinton stop:
62416926Ssam     STOP stopaliasing
6259683Slinton {
6269683Slinton 	$$ = O_STOP;
6279683Slinton }
6289683Slinton |
62916926Ssam     STOPI stopaliasing
6309683Slinton {
6319683Slinton 	$$ = O_STOPI;
6329683Slinton }
6339683Slinton ;
6349683Slinton what:
6359683Slinton     exp
6369683Slinton {
6379683Slinton 	$$ = $1;
6389683Slinton }
6399683Slinton |
6409683Slinton     STRING ':' line_number
6419683Slinton {
6429683Slinton 	$$ = build(O_QLINE, build(O_SCON, $1), $3);
6439683Slinton }
6449683Slinton ;
6459683Slinton where:
6469683Slinton     IN term
6479683Slinton {
6489683Slinton 	$$ = $2;
6499683Slinton }
6509683Slinton |
6519683Slinton     AT line_number
6529683Slinton {
6539683Slinton 	$$ = build(O_QLINE, build(O_SCON, cursource), $2);
6549683Slinton }
6559683Slinton |
6569683Slinton     AT STRING ':' line_number
6579683Slinton {
6589683Slinton 	$$ = build(O_QLINE, build(O_SCON, $2), $4);
6599683Slinton }
6609683Slinton ;
6619683Slinton filename:
6629683Slinton     NAME
6639683Slinton {
6649683Slinton 	$$ = ident($1);
6659683Slinton }
6669683Slinton ;
6679683Slinton opt_filename:
6689683Slinton     /* empty */
6699683Slinton {
6709683Slinton 	$$ = nil;
6719683Slinton }
6729683Slinton |
6739683Slinton     filename
6749683Slinton {
6759683Slinton 	$$ = $1;
6769683Slinton }
6779683Slinton ;
67812482Slinton opt_exp_list:
67912482Slinton     exp_list
6809683Slinton {
68112482Slinton 	$$ = $1;
6829683Slinton }
6839683Slinton |
68412482Slinton     /* empty */
6859683Slinton {
68612482Slinton 	$$ = nil;
6879683Slinton }
6889683Slinton ;
6899683Slinton list_command:
69016926Ssam     list
6919683Slinton {
6929683Slinton 	$$ = build(O_LIST,
6939683Slinton 	    build(O_LCON, (long) cursrcline),
6949683Slinton 	    build(O_LCON, (long) cursrcline + 9)
6959683Slinton 	);
6969683Slinton }
6979683Slinton |
69816926Ssam     list line_number
6999683Slinton {
7009683Slinton 	$$ = build(O_LIST, $2, $2);
7019683Slinton }
7029683Slinton |
70316926Ssam     list line_number ',' line_number
7049683Slinton {
7059683Slinton 	$$ = build(O_LIST, $2, $4);
7069683Slinton }
7079683Slinton |
70816926Ssam     list symbol
7099683Slinton {
71016926Ssam 	$$ = build(O_LIST, $2, nil);
7119683Slinton }
7129683Slinton ;
71316926Ssam 
71416926Ssam list:
71516926Ssam     LIST stopaliasing
71616607Ssam ;
71716926Ssam 
7189683Slinton line_number:
7199683Slinton     INT
7209683Slinton {
7219683Slinton 	$$ = build(O_LCON, $1);
7229683Slinton }
7239683Slinton |
7249683Slinton     '$'
7259683Slinton {
7269683Slinton 	$$ = build(O_LCON, (long) LASTLINE);
7279683Slinton }
7289683Slinton ;
7299683Slinton examine:
7309683Slinton     address '/' count mode
7319683Slinton {
7329683Slinton 	$$ = build(O_EXAMINE, $4, $1, nil, $3);
7339683Slinton }
7349683Slinton |
7359683Slinton     address ',' address '/' mode
7369683Slinton {
7379683Slinton 	$$ = build(O_EXAMINE, $5, $1, $3, 0);
7389683Slinton }
7399683Slinton |
740*16934Ssam     '/' stopaliasing count mode
7419683Slinton {
742*16934Ssam 	$$ = build(O_EXAMINE, $4, build(O_LCON, (long) prtaddr), nil, $3);
7439683Slinton }
74411173Slinton |
74511173Slinton     address '=' mode
74611173Slinton {
74711173Slinton 	$$ = build(O_EXAMINE, $3, $1, nil, 0);
74811173Slinton }
7499683Slinton ;
7509683Slinton address:
751*16934Ssam     INT stopaliasing
7529683Slinton {
7539683Slinton 	$$ = build(O_LCON, $1);
7549683Slinton }
7559683Slinton |
756*16934Ssam     '&' stopaliasing term
7579683Slinton {
758*16934Ssam 	$$ = amper($3);
7599683Slinton }
7609683Slinton |
7619683Slinton     address '+' address
7629683Slinton {
7639683Slinton 	$$ = build(O_ADD, $1, $3);
7649683Slinton }
7659683Slinton |
7669683Slinton     address '-' address
7679683Slinton {
7689683Slinton 	$$ = build(O_SUB, $1, $3);
7699683Slinton }
7709683Slinton |
7719683Slinton     address '*' address
7729683Slinton {
7739683Slinton 	$$ = build(O_MUL, $1, $3);
7749683Slinton }
7759683Slinton |
776*16934Ssam     '*' stopaliasing address %prec UNARYSIGN
7779683Slinton {
778*16934Ssam 	$$ = build(O_INDIR, $3);
7799683Slinton }
7809683Slinton |
781*16934Ssam     '(' stopaliasing exp ')'
7829683Slinton {
783*16934Ssam 	$$ = $3;
7849683Slinton }
7859683Slinton ;
7869683Slinton count:
7879683Slinton     /* empty */
7889683Slinton {
7899683Slinton 	$$ = 1;
7909683Slinton }
7919683Slinton |
7929683Slinton     INT
7939683Slinton {
7949683Slinton 	$$ = $1;
7959683Slinton }
7969683Slinton ;
7979683Slinton mode:
7989683Slinton     name
7999683Slinton {
8009683Slinton 	$$ = ident($1);
8019683Slinton 	curformat = $$;
8029683Slinton }
8039683Slinton |
8049683Slinton     /* empty */
8059683Slinton {
8069683Slinton 	$$ = curformat;
8079683Slinton }
8089683Slinton ;
8099683Slinton opt_cond:
8109683Slinton     /* empty */
8119683Slinton {
8129683Slinton 	$$ = nil;
8139683Slinton }
8149683Slinton |
8159683Slinton     IF boolean_exp
8169683Slinton {
8179683Slinton 	$$ = $2;
8189683Slinton }
8199683Slinton ;
8209683Slinton exp_list:
8219683Slinton     exp
8229683Slinton {
8239683Slinton 	$$ = build(O_COMMA, $1, nil);
8249683Slinton }
8259683Slinton |
8269683Slinton     exp ',' exp_list
8279683Slinton {
8289683Slinton 	$$ = build(O_COMMA, $1, $3);
8299683Slinton }
8309683Slinton ;
8319683Slinton exp:
8329683Slinton     term
8339683Slinton {
8349683Slinton 	$$ = build(O_RVAL, $1);
8359683Slinton }
8369683Slinton |
8379683Slinton     constant
8389683Slinton {
8399683Slinton 	$$ = $1;
8409683Slinton }
8419683Slinton |
84216607Ssam     exp '\\' opt_qual_symbol
84311173Slinton {
84411173Slinton 	$$ = build(O_TYPERENAME, $1, $3);
84511173Slinton }
84611173Slinton |
8479683Slinton     '+' exp %prec UNARYSIGN
8489683Slinton {
8499683Slinton 	$$ = $2;
8509683Slinton }
8519683Slinton |
8529683Slinton     '-' exp %prec UNARYSIGN
8539683Slinton {
8549683Slinton 	$$ = build(O_NEG, $2);
8559683Slinton }
8569683Slinton |
8579683Slinton     '&' exp %prec UNARYSIGN
8589683Slinton {
8599683Slinton 	$$ = amper($2);
8609683Slinton }
8619683Slinton |
8629683Slinton     exp '+' exp
8639683Slinton {
8649683Slinton 	$$ = build(O_ADD, $1, $3);
8659683Slinton }
8669683Slinton |
8679683Slinton     exp '-' exp
8689683Slinton {
8699683Slinton 	$$ = build(O_SUB, $1, $3);
8709683Slinton }
8719683Slinton |
8729683Slinton     exp '*' exp
8739683Slinton {
8749683Slinton 	$$ = build(O_MUL, $1, $3);
8759683Slinton }
8769683Slinton |
8779683Slinton     exp '/' exp
8789683Slinton {
8799683Slinton 	$$ = build(O_DIVF, $1, $3);
8809683Slinton }
8819683Slinton |
8829683Slinton     exp DIV exp
8839683Slinton {
8849683Slinton 	$$ = build(O_DIV, $1, $3);
8859683Slinton }
8869683Slinton |
8879683Slinton     exp MOD exp
8889683Slinton {
8899683Slinton 	$$ = build(O_MOD, $1, $3);
8909683Slinton }
8919683Slinton |
8929683Slinton     exp AND exp
8939683Slinton {
8949683Slinton 	$$ = build(O_AND, $1, $3);
8959683Slinton }
8969683Slinton |
8979683Slinton     exp OR exp
8989683Slinton {
8999683Slinton 	$$ = build(O_OR, $1, $3);
9009683Slinton }
9019683Slinton |
9029683Slinton     exp '<' exp
9039683Slinton {
9049683Slinton 	$$ = build(O_LT, $1, $3);
9059683Slinton }
9069683Slinton |
9079683Slinton     exp '<' '=' exp
9089683Slinton {
9099683Slinton 	$$ = build(O_LE, $1, $4);
9109683Slinton }
9119683Slinton |
9129683Slinton     exp '>' exp
9139683Slinton {
9149683Slinton 	$$ = build(O_GT, $1, $3);
9159683Slinton }
9169683Slinton |
9179683Slinton     exp '>' '=' exp
9189683Slinton {
9199683Slinton 	$$ = build(O_GE, $1, $4);
9209683Slinton }
9219683Slinton |
9229683Slinton     exp '=' exp
9239683Slinton {
9249683Slinton 	$$ = build(O_EQ, $1, $3);
9259683Slinton }
9269683Slinton |
9279683Slinton     exp '=' '=' exp
9289683Slinton {
9299683Slinton 	$$ = build(O_EQ, $1, $4);
9309683Slinton }
9319683Slinton |
9329683Slinton     exp '<' '>' exp
9339683Slinton {
9349683Slinton 	$$ = build(O_NE, $1, $4);
9359683Slinton }
9369683Slinton |
9379683Slinton     exp '!' '=' exp
9389683Slinton {
9399683Slinton 	$$ = build(O_NE, $1, $4);
9409683Slinton }
9419683Slinton |
9429683Slinton     '(' exp ')'
9439683Slinton {
9449683Slinton 	$$ = $2;
9459683Slinton }
9469683Slinton ;
9479683Slinton term:
9489683Slinton     symbol
9499683Slinton {
9509683Slinton 	$$ = $1;
9519683Slinton }
9529683Slinton |
9539683Slinton     term '[' exp_list ']'
9549683Slinton {
9559683Slinton 	$$ = subscript($1, $3);
9569683Slinton }
9579683Slinton |
9589683Slinton     term '.' name
9599683Slinton {
9609683Slinton 	$$ = dot($1, $3);
9619683Slinton }
9629683Slinton |
9639683Slinton     term ARROW name
9649683Slinton {
9659683Slinton 	$$ = dot($1, $3);
9669683Slinton }
9679683Slinton |
9689683Slinton     '*' term %prec UNARYSIGN
9699683Slinton {
9709683Slinton 	$$ = build(O_INDIR, $2);
9719683Slinton }
9729683Slinton |
9739683Slinton     '*' '(' exp ')' %prec UNARYSIGN
9749683Slinton {
9759683Slinton 	$$ = build(O_INDIR, $3);
9769683Slinton }
9779683Slinton |
9789683Slinton     term '^' %prec UNARYSIGN
9799683Slinton {
9809683Slinton 	$$ = build(O_INDIR, $1);
9819683Slinton }
9829683Slinton |
9839683Slinton     '#' term %prec UNARYSIGN
9849683Slinton {
9859683Slinton 	$$ = concrete($2);
9869683Slinton }
9879683Slinton |
98816607Ssam     '#' '(' exp ')' %prec UNARYSIGN
98916607Ssam {
99016607Ssam 	$$ = concrete($3);
99116607Ssam }
99216607Ssam |
99312482Slinton     term '(' opt_exp_list ')'
9949683Slinton {
9959683Slinton 	$$ = build(O_CALL, $1, $3);
9969683Slinton }
9979683Slinton ;
9989683Slinton boolean_exp:
9999683Slinton     exp
10009683Slinton {
10019683Slinton 	chkboolean($1);
10029683Slinton 	$$ = $1;
10039683Slinton }
10049683Slinton ;
10059683Slinton constant:
10069683Slinton     INT
10079683Slinton {
10089683Slinton 	$$ = build(O_LCON, $1);
10099683Slinton }
10109683Slinton |
10119683Slinton     REAL
10129683Slinton {
10139683Slinton 	$$ = build(O_FCON, $1);
10149683Slinton }
10159683Slinton |
10169683Slinton     STRING
10179683Slinton {
10189683Slinton 	$$ = build(O_SCON, $1);
10199683Slinton }
10209683Slinton ;
102116607Ssam opt_qual_symbol:
102216607Ssam     symbol
102316607Ssam {
102416607Ssam 	$$ = $1;
102516607Ssam }
102616607Ssam |
102716607Ssam     opt_qual_symbol '.' name
102816607Ssam {
102916607Ssam 	$$ = dot($1, $3);
103016607Ssam }
103116607Ssam ;
10329683Slinton symbol:
10339683Slinton     name
10349683Slinton {
10359683Slinton 	$$ = build(O_SYM, which($1));
10369683Slinton }
103716607Ssam |
103816607Ssam     '.' name
103916607Ssam {
104016607Ssam 	$$ = dot(build(O_SYM, program), $2);
104116607Ssam }
10429683Slinton ;
10439683Slinton name:
10449683Slinton     NAME
10459683Slinton {
10469683Slinton 	$$ = $1;
10479683Slinton }
10489683Slinton |
10499683Slinton     keyword
10509683Slinton {
10519683Slinton 	$$ = $1;
10529683Slinton }
10539683Slinton keyword:
105412536Scsvaf     ALIAS | AND | ASSIGN | AT | CALL | CATCH | CONT | DEBUG | DELETE | DIV |
105516607Ssam     DOWN | DUMP | EDIT | FILE | FUNC | GRIPE | HELP | IGNORE | IN | LIST |
105616607Ssam     MOD | NEXT | NEXTI | NIL | NOT | OR | PRINT | PSYM | QUIT |
105716607Ssam     RERUN | RETURN | RUN | SH | SKIP | SOURCE | STATUS | STEP | STEPI |
105816607Ssam     STOP | STOPI | TRACE | TRACEI | UP |
105913840Slinton     USE | WHATIS | WHEN | WHERE | WHEREIS | WHICH
10609683Slinton ;
106116926Ssam 
106216926Ssam something:
106316926Ssam     NAME
106416926Ssam {
106516926Ssam 	$$ = build(O_NAME, $1);
106616926Ssam }
106716926Ssam |
106816926Ssam     keyword
106916926Ssam {
107016926Ssam 	$$ = build(O_NAME, $1);
107116926Ssam }
107216926Ssam |
107316926Ssam     STRING
107416926Ssam {
107516926Ssam 	$$ = build(O_SCON, $1);
107616926Ssam }
107716926Ssam ;
1078