xref: /csrg-svn/old/dbx/commands.y (revision 18214)
19683Slinton %{
2*18214Slinton 
39683Slinton /* Copyright (c) 1982 Regents of the University of California */
49683Slinton 
5*18214Slinton static	char sccsid[] = "@(#)commands.y	1.14 (Berkeley) 03/01/85";
69683Slinton 
7*18214Slinton static char rcsid[] = "$Header: commands.y,v 1.5 84/12/26 10:38:41 linton Exp $";
8*18214Slinton 
99683Slinton /*
109683Slinton  * Yacc grammar for debugger commands.
119683Slinton  */
129683Slinton 
139683Slinton #include "defs.h"
149683Slinton #include "symbols.h"
159683Slinton #include "operators.h"
169683Slinton #include "tree.h"
179683Slinton #include "process.h"
189683Slinton #include "source.h"
199683Slinton #include "scanner.h"
20*18214Slinton #include "keywords.h"
219683Slinton #include "names.h"
2214673Slinton #include "lists.h"
239683Slinton 
249683Slinton private String curformat = "X";
259683Slinton 
269683Slinton %}
279683Slinton 
289683Slinton %term
2916607Ssam     ALIAS AND ASSIGN AT CALL CATCH CONT DEBUG DELETE DIV DOWN DUMP
309683Slinton     EDIT FILE FUNC GRIPE HELP IF IGNORE IN LIST MOD NEXT NEXTI NIL NOT OR
31*18214Slinton     PRINT PSYM QUIT RERUN RETURN RUN SET SH SKIP SOURCE STATUS STEP STEPI
32*18214Slinton     STOP STOPI TRACE TRACEI UNALIAS UNSET UP USE
33*18214Slinton     WHATIS WHEN WHERE WHEREIS WHICH
349683Slinton 
35*18214Slinton %term INT CHAR REAL NAME STRING
36*18214Slinton %term ARROW
379683Slinton 
389683Slinton %right INT
399683Slinton %binary REDIRECT
409683Slinton %binary '<' '=' '>' '!' IN
419683Slinton %left '+' '-' OR
429683Slinton %left UNARYSIGN
439683Slinton %left '*' '/' DIV MOD AND
44*18214Slinton %left '\\'
459683Slinton %left NOT '(' '[' '.' '^' ARROW
469683Slinton 
479683Slinton %union {
489683Slinton     Name y_name;
499683Slinton     Symbol y_sym;
509683Slinton     Node y_node;
519683Slinton     Integer y_int;
529683Slinton     Operator y_op;
539683Slinton     long y_long;
54*18214Slinton     char y_char;
559683Slinton     double y_real;
569683Slinton     String y_string;
579683Slinton     Boolean y_bool;
589683Slinton     Cmdlist y_cmdlist;
5914673Slinton     List y_list;
609683Slinton };
619683Slinton 
629683Slinton %type <y_op>	    trace stop
63*18214Slinton %type <y_long>	    INT count signal
64*18214Slinton %type <y_char>	    CHAR
659683Slinton %type <y_real>	    REAL
669683Slinton %type <y_string>    STRING redirectout filename opt_filename mode
6716607Ssam %type <y_name>	    ALIAS AND ASSIGN AT CALL CATCH CONT
6816607Ssam %type <y_name>	    DEBUG DELETE DIV DOWN DUMP
699683Slinton %type <y_name>	    EDIT FILE FUNC GRIPE HELP IF IGNORE IN LIST MOD
709683Slinton %type <y_name>	    NEXT NEXTI NIL NOT OR
71*18214Slinton %type <y_name>	    PRINT PSYM QUIT RERUN RETURN RUN SET SH SKIP SOURCE STATUS
7216607Ssam %type <y_name>	    STEP STEPI STOP STOPI TRACE TRACEI
73*18214Slinton %type <y_name>	    UNALIAS UNSET UP USE WHATIS WHEN WHERE WHEREIS WHICH
749683Slinton %type <y_name>	    name NAME keyword
7516607Ssam %type <y_node>      opt_qual_symbol symbol
769683Slinton %type <y_node>	    command rcommand cmd step what where examine
7712482Slinton %type <y_node>	    event opt_exp_list opt_cond
789683Slinton %type <y_node>	    exp_list exp term boolean_exp constant address
7916934Ssam %type <y_node>	    integer_list alias_command list_command line_number
809683Slinton %type <y_cmdlist>   actions
81*18214Slinton %type <y_list>      sourcepath name_list
829683Slinton 
839683Slinton %%
849683Slinton 
859683Slinton input:
869683Slinton     input command_nl
879683Slinton |
889683Slinton     /* empty */
899683Slinton ;
909683Slinton command_nl:
919683Slinton     command_line '\n'
92*18214Slinton |
93*18214Slinton     command_line ';'
9416926Ssam {
95*18214Slinton 	chkalias = true;
9616926Ssam }
979683Slinton |
989683Slinton     '\n'
999683Slinton ;
1009683Slinton 
1019683Slinton command_line:
1029683Slinton     command
1039683Slinton {
1049683Slinton 	if ($1 != nil) {
105*18214Slinton 	    topeval($1);
1069683Slinton 	}
1079683Slinton }
1089683Slinton |
1099683Slinton     rcommand redirectout
1109683Slinton {
1119683Slinton 	if ($1 != nil) {
1129683Slinton 	    if ($2 != nil) {
1139683Slinton 		setout($2);
114*18214Slinton 		topeval($1);
1159683Slinton 		unsetout();
1169683Slinton 	    } else {
117*18214Slinton 		topeval($1);
1189683Slinton 	    }
1199683Slinton 	}
1209683Slinton }
1219683Slinton ;
1229683Slinton redirectout:
1239683Slinton     '>' shellmode NAME
1249683Slinton {
1259683Slinton 	$$ = ident($3);
1269683Slinton }
1279683Slinton |
1289683Slinton     /* empty */
1299683Slinton {
1309683Slinton 	$$ = nil;
1319683Slinton }
1329683Slinton ;
1339683Slinton 
1349683Slinton /*
1359683Slinton  * Non-redirectable commands.
1369683Slinton  */
1379683Slinton command:
1389683Slinton     alias_command
1399683Slinton {
1409683Slinton 	$$ = $1;
1419683Slinton }
1429683Slinton |
143*18214Slinton     ASSIGN exp '=' exp
1449683Slinton {
145*18214Slinton 	$$ = build(O_ASSIGN, unrval($2), $4);
1469683Slinton }
1479683Slinton |
148*18214Slinton     CATCH signal
1499683Slinton {
150*18214Slinton 	$$ = build(O_CATCH, $2);
1519683Slinton }
1529683Slinton |
153*18214Slinton     CATCH
15416926Ssam {
155*18214Slinton 	$$ = build(O_CATCH, 0);
15616926Ssam }
15716926Ssam |
1589683Slinton     CONT
1599683Slinton {
16014673Slinton 	$$ = build(O_CONT, (long) DEFSIG);
1619683Slinton }
1629683Slinton |
163*18214Slinton     CONT signal
16411870Slinton {
16511870Slinton 	$$ = build(O_CONT, $2);
16611870Slinton }
16711870Slinton |
16816934Ssam     DELETE integer_list
1699683Slinton {
1709683Slinton 	$$ = build(O_DELETE, $2);
1719683Slinton }
1729683Slinton |
17316607Ssam     DOWN
17416607Ssam {
17516607Ssam 	$$ = build(O_DOWN, build(O_LCON, (long) 1));
17616607Ssam }
17716607Ssam |
17816607Ssam     DOWN INT
17916607Ssam {
18016607Ssam 	$$ = build(O_DOWN, build(O_LCON, (long) $2));
18116607Ssam }
18216607Ssam |
1839683Slinton     EDIT shellmode opt_filename
1849683Slinton {
1859683Slinton 	$$ = build(O_EDIT, $3);
1869683Slinton }
1879683Slinton |
1889683Slinton     FILE shellmode opt_filename
1899683Slinton {
1909683Slinton 	$$ = build(O_CHFILE, $3);
1919683Slinton }
1929683Slinton |
1939683Slinton     FUNC
1949683Slinton {
1959683Slinton 	$$ = build(O_FUNC, nil);
1969683Slinton }
1979683Slinton |
198*18214Slinton     FUNC opt_qual_symbol
1999683Slinton {
200*18214Slinton 	$$ = build(O_FUNC, $2);
2019683Slinton }
2029683Slinton |
2039683Slinton     GRIPE
2049683Slinton {
2059683Slinton 	$$ = build(O_GRIPE);
2069683Slinton }
2079683Slinton |
2089683Slinton     HELP
2099683Slinton {
2109683Slinton 	$$ = build(O_HELP);
2119683Slinton }
2129683Slinton |
213*18214Slinton     IGNORE signal
2149683Slinton {
215*18214Slinton 	$$ = build(O_IGNORE, $2);
2169683Slinton }
2179683Slinton |
218*18214Slinton     IGNORE
21916926Ssam {
220*18214Slinton 	$$ = build(O_IGNORE, 0);
22116926Ssam }
22216926Ssam |
2239683Slinton     list_command
2249683Slinton {
2259683Slinton 	$$ = $1;
2269683Slinton }
2279683Slinton |
228*18214Slinton     PSYM exp
2299683Slinton {
230*18214Slinton 	$$ = build(O_PSYM, unrval($2));
2319683Slinton }
2329683Slinton |
2339683Slinton     QUIT
2349683Slinton {
2359683Slinton 	if (not popinput()) {
2369683Slinton 	    quit(0);
2379683Slinton 	} else {
2389683Slinton 	    $$ = nil;
2399683Slinton 	}
2409683Slinton }
2419683Slinton |
24216607Ssam     RETURN
24316607Ssam {
24416607Ssam 	$$ = build(O_RETURN, nil);
24516607Ssam }
24616607Ssam |
247*18214Slinton     RETURN opt_qual_symbol
24816607Ssam {
249*18214Slinton 	$$ = build(O_RETURN, $2);
25016607Ssam }
25116607Ssam |
2529683Slinton     runcommand
2539683Slinton {
2549683Slinton 	run();
2559683Slinton 	/* NOTREACHED */
2569683Slinton }
2579683Slinton |
258*18214Slinton     SET name '=' exp
259*18214Slinton {
260*18214Slinton 	$$ = build(O_SET, build(O_NAME, $2), $4);
261*18214Slinton }
262*18214Slinton |
263*18214Slinton     SET name
264*18214Slinton {
265*18214Slinton 	$$ = build(O_SET, build(O_NAME, $2), nil);
266*18214Slinton }
267*18214Slinton |
268*18214Slinton     SET
269*18214Slinton {
270*18214Slinton 	$$ = build(O_SET, nil, nil);
271*18214Slinton }
272*18214Slinton |
2739683Slinton     SH
2749683Slinton {
2759683Slinton 	shellline();
2769683Slinton 	$$ = nil;
2779683Slinton }
2789683Slinton |
2799683Slinton     SOURCE shellmode filename
2809683Slinton {
2819683Slinton 	$$ = build(O_SOURCE, $3);
2829683Slinton }
2839683Slinton |
2849683Slinton     step
2859683Slinton {
2869683Slinton 	$$ = $1;
2879683Slinton }
2889683Slinton |
2899683Slinton     stop where opt_cond
2909683Slinton {
2919683Slinton 	$$ = build($1, nil, $2, $3);
2929683Slinton }
2939683Slinton |
2949683Slinton     stop what opt_cond
2959683Slinton {
2969683Slinton 	$$ = build($1, $2, nil, $3);
2979683Slinton }
2989683Slinton |
2999683Slinton     stop IF boolean_exp
3009683Slinton {
3019683Slinton 	$$ = build($1, nil, nil, $3);
3029683Slinton }
3039683Slinton |
3049683Slinton     trace what where opt_cond
3059683Slinton {
3069683Slinton 	$$ = build($1, $2, $3, $4);
3079683Slinton }
3089683Slinton |
3099683Slinton     trace where opt_cond
3109683Slinton {
3119683Slinton 	$$ = build($1, nil, $2, $3);
3129683Slinton }
3139683Slinton |
3149683Slinton     trace what opt_cond
3159683Slinton {
3169683Slinton 	$$ = build($1, $2, nil, $3);
3179683Slinton }
3189683Slinton |
3199683Slinton     trace opt_cond
3209683Slinton {
3219683Slinton 	$$ = build($1, nil, nil, $2);
3229683Slinton }
3239683Slinton |
324*18214Slinton     UNALIAS name
325*18214Slinton {
326*18214Slinton 	$$ = build(O_UNALIAS, build(O_NAME, $2));
327*18214Slinton }
328*18214Slinton |
329*18214Slinton     UNSET name
330*18214Slinton {
331*18214Slinton 	$$ = build(O_UNSET, build(O_NAME, $2));
332*18214Slinton }
333*18214Slinton |
33416607Ssam     UP
3359683Slinton {
33616607Ssam 	$$ = build(O_UP, build(O_LCON, (long) 1));
3379683Slinton }
3389683Slinton |
33916607Ssam     UP INT
3409683Slinton {
34116607Ssam 	$$ = build(O_UP, build(O_LCON, (long) $2));
3429683Slinton }
3439683Slinton |
3449683Slinton     USE shellmode sourcepath
3459683Slinton {
34614673Slinton 	String dir;
34714673Slinton 
3489683Slinton 	$$ = nil;
34914673Slinton 	if (list_size($3) == 0) {
35014673Slinton 	    foreach (String, dir, sourcepath)
35114673Slinton 		printf("%s ", dir);
35214673Slinton 	    endfor
35314673Slinton 	    printf("\n");
35414673Slinton 	} else {
35514673Slinton 	    foreach (String, dir, sourcepath)
35614673Slinton 		list_delete(list_curitem(sourcepath), sourcepath);
35714673Slinton 	    endfor
35814673Slinton 	    sourcepath = $3;
3599683Slinton 	}
3609683Slinton }
36116604Ssam |
362*18214Slinton     WHATIS opt_qual_symbol
36316604Ssam {
364*18214Slinton 	$$ = build(O_WHATIS, $2);
36516604Ssam }
36616607Ssam |
367*18214Slinton     WHEN event '{' actions '}'
36816604Ssam {
369*18214Slinton 	$$ = build(O_ADDEVENT, $2, $4);
37016604Ssam }
37116604Ssam |
372*18214Slinton     WHEREIS name
37316604Ssam {
374*18214Slinton 	$$ = build(O_WHEREIS, build(O_SYM, lookup($2)));
37516604Ssam }
37616607Ssam |
377*18214Slinton     WHICH symbol
37816604Ssam {
379*18214Slinton 	$$ = build(O_WHICH, $2);
38016604Ssam }
38116625Ssam |
382*18214Slinton     '/'
38316625Ssam {
384*18214Slinton 	$$ = build(O_SEARCH,
385*18214Slinton 	    build(O_LCON, (long) '/'),
386*18214Slinton 	    build(O_SCON, strdup(scanner_linebuf))
387*18214Slinton 	);
388*18214Slinton 	gobble();
389*18214Slinton 	insertinput("\n");
39016625Ssam }
39116625Ssam |
392*18214Slinton     '?'
39316625Ssam {
394*18214Slinton 	$$ = build(O_SEARCH,
395*18214Slinton 	    build(O_LCON, (long) '?'),
396*18214Slinton 	    build(O_SCON, strdup(scanner_linebuf))
397*18214Slinton 	);
398*18214Slinton 	gobble();
399*18214Slinton 	insertinput("\n");
40016625Ssam }
40116625Ssam ;
40216926Ssam signal:
40316926Ssam     INT
40416926Ssam {
405*18214Slinton 	$$ = $1;
40616926Ssam }
40716926Ssam |
408*18214Slinton     name
40916926Ssam {
410*18214Slinton 	$$ = siglookup(ident($1));
41116926Ssam }
41216926Ssam ;
4139683Slinton runcommand:
41416607Ssam     run arglist
41512482Slinton |
41612524Slinton     run
4179683Slinton ;
4189683Slinton run:
41912524Slinton     RUN shellmode
4209683Slinton {
42116607Ssam 	arginit();
4229683Slinton 	fflush(stdout);
4239683Slinton }
42416607Ssam |
42516607Ssam     RERUN shellmode
42616607Ssam {
42716607Ssam 	fflush(stdout);
42816607Ssam }
4299683Slinton ;
4309683Slinton arglist:
4319683Slinton     arglist arg
4329683Slinton |
43312482Slinton     arg
4349683Slinton ;
4359683Slinton arg:
436*18214Slinton     NAME
4379683Slinton {
4389683Slinton 	newarg(ident($1));
4399683Slinton }
4409683Slinton |
441*18214Slinton     STRING
44216607Ssam {
44316607Ssam 	newarg($1);
44416607Ssam }
44516607Ssam |
4469683Slinton     '<' NAME
4479683Slinton {
4489683Slinton 	inarg(ident($2));
4499683Slinton }
4509683Slinton |
4519683Slinton     '>' NAME
4529683Slinton {
4539683Slinton 	outarg(ident($2));
4549683Slinton }
4559683Slinton ;
4569683Slinton step:
457*18214Slinton     STEP
4589683Slinton {
4599683Slinton 	$$ = build(O_STEP, true, false);
4609683Slinton }
4619683Slinton |
462*18214Slinton     STEPI
4639683Slinton {
4649683Slinton 	$$ = build(O_STEP, false, false);
4659683Slinton }
4669683Slinton |
467*18214Slinton     NEXT
4689683Slinton {
4699683Slinton 	$$ = build(O_STEP, true, true);
4709683Slinton }
4719683Slinton |
472*18214Slinton     NEXTI
4739683Slinton {
4749683Slinton 	$$ = build(O_STEP, false, true);
4759683Slinton }
4769683Slinton ;
4779683Slinton shellmode:
4789683Slinton     /* empty */
4799683Slinton {
4809683Slinton 	beginshellmode();
4819683Slinton }
4829683Slinton ;
4839683Slinton sourcepath:
4849683Slinton     sourcepath NAME
4859683Slinton {
48614673Slinton 	$$ = $1;
48714673Slinton 	list_append(list_item(ident($2)), nil, $$);
4889683Slinton }
4899683Slinton |
4909683Slinton     /* empty */
4919683Slinton {
49214673Slinton 	$$ = list_alloc();
4939683Slinton }
4949683Slinton ;
4959683Slinton event:
4969683Slinton     where
4979683Slinton |
4989683Slinton     exp
4999683Slinton ;
5009683Slinton actions:
5019683Slinton     actions cmd ';'
5029683Slinton {
5039683Slinton 	$$ = $1;
5049683Slinton 	cmdlist_append($2, $$);
5059683Slinton }
5069683Slinton |
5079683Slinton     cmd ';'
5089683Slinton {
5099683Slinton 	$$ = list_alloc();
5109683Slinton 	cmdlist_append($1, $$);
5119683Slinton }
5129683Slinton ;
5139683Slinton cmd:
5149683Slinton     command
5159683Slinton |
5169683Slinton     rcommand
5179683Slinton ;
5189683Slinton 
5199683Slinton /*
5209683Slinton  * Redirectable commands.
5219683Slinton  */
5229683Slinton rcommand:
523*18214Slinton     PRINT exp_list
5249683Slinton {
525*18214Slinton 	$$ = build(O_PRINT, $2);
5269683Slinton }
5279683Slinton |
5289683Slinton     WHERE
5299683Slinton {
5309683Slinton 	$$ = build(O_WHERE);
5319683Slinton }
5329683Slinton |
5339683Slinton     examine
5349683Slinton {
5359683Slinton 	$$ = $1;
5369683Slinton }
5379683Slinton |
538*18214Slinton     CALL term '(' opt_exp_list ')'
5399683Slinton {
540*18214Slinton 	$$ = build(O_CALLPROC, $2, $4);
5419683Slinton }
5429683Slinton |
54312536Scsvaf     DEBUG INT
54412536Scsvaf {
54512536Scsvaf  	$$ = build(O_DEBUG, $2);
54612536Scsvaf }
54712536Scsvaf |
548*18214Slinton     DEBUG '-' INT
549*18214Slinton {
550*18214Slinton 	$$ = build(O_DEBUG, -$3);
551*18214Slinton }
552*18214Slinton |
553*18214Slinton     DUMP opt_qual_symbol
554*18214Slinton {
555*18214Slinton 	$$ = build(O_DUMP, $2);
556*18214Slinton }
557*18214Slinton |
558*18214Slinton     DUMP '.'
559*18214Slinton {
560*18214Slinton 	$$ = build(O_DUMP, nil);
561*18214Slinton }
562*18214Slinton |
5639683Slinton     DUMP
5649683Slinton {
565*18214Slinton 	$$ = build(O_DUMP, build(O_SYM, curfunc));
5669683Slinton }
5679683Slinton |
5689683Slinton     STATUS
5699683Slinton {
5709683Slinton 	$$ = build(O_STATUS);
5719683Slinton }
5729683Slinton ;
5739683Slinton alias_command:
574*18214Slinton     ALIAS name name
5759683Slinton {
576*18214Slinton 	$$ = build(O_ALIAS, build(O_NAME, $2), build(O_NAME, $3));
5779683Slinton }
5789683Slinton |
579*18214Slinton     ALIAS name STRING
5809683Slinton {
581*18214Slinton 	$$ = build(O_ALIAS, build(O_NAME, $2), build(O_SCON, $3));
582*18214Slinton }
583*18214Slinton |
584*18214Slinton     ALIAS name '(' name_list ')' STRING
585*18214Slinton {
586*18214Slinton 	$$ = build(O_ALIAS,
587*18214Slinton 	    build(O_COMMA, build(O_NAME, $2), (Node) $4),
588*18214Slinton 	    build(O_SCON, $6)
589*18214Slinton 	);
590*18214Slinton }
591*18214Slinton |
592*18214Slinton     ALIAS name
593*18214Slinton {
5949683Slinton 	$$ = build(O_ALIAS, build(O_NAME, $2), nil);
5959683Slinton }
5969683Slinton |
597*18214Slinton     ALIAS
5989683Slinton {
5999683Slinton 	$$ = build(O_ALIAS, nil, nil);
6009683Slinton }
6019683Slinton ;
602*18214Slinton name_list:
603*18214Slinton     name_list ',' name
60416926Ssam {
605*18214Slinton 	$$ = $1;
606*18214Slinton 	list_append(list_item($3), nil, $$);
60716926Ssam }
608*18214Slinton |
609*18214Slinton     name
610*18214Slinton {
611*18214Slinton 	$$ = list_alloc();
612*18214Slinton 	list_append(list_item($1), nil, $$);
613*18214Slinton }
61416926Ssam ;
6159683Slinton trace:
616*18214Slinton     TRACE
6179683Slinton {
6189683Slinton 	$$ = O_TRACE;
6199683Slinton }
6209683Slinton |
621*18214Slinton     TRACEI
6229683Slinton {
6239683Slinton 	$$ = O_TRACEI;
6249683Slinton }
6259683Slinton ;
6269683Slinton stop:
627*18214Slinton     STOP
6289683Slinton {
6299683Slinton 	$$ = O_STOP;
6309683Slinton }
6319683Slinton |
632*18214Slinton     STOPI
6339683Slinton {
6349683Slinton 	$$ = O_STOPI;
6359683Slinton }
6369683Slinton ;
6379683Slinton what:
6389683Slinton     exp
6399683Slinton {
6409683Slinton 	$$ = $1;
6419683Slinton }
6429683Slinton |
6439683Slinton     STRING ':' line_number
6449683Slinton {
6459683Slinton 	$$ = build(O_QLINE, build(O_SCON, $1), $3);
6469683Slinton }
6479683Slinton ;
6489683Slinton where:
649*18214Slinton     IN exp
6509683Slinton {
651*18214Slinton 	$$ = unrval($2);
6529683Slinton }
6539683Slinton |
6549683Slinton     AT line_number
6559683Slinton {
656*18214Slinton 	$$ = build(O_QLINE, build(O_SCON, strdup(cursource)), $2);
6579683Slinton }
6589683Slinton |
6599683Slinton     AT STRING ':' line_number
6609683Slinton {
6619683Slinton 	$$ = build(O_QLINE, build(O_SCON, $2), $4);
6629683Slinton }
6639683Slinton ;
6649683Slinton filename:
6659683Slinton     NAME
6669683Slinton {
6679683Slinton 	$$ = ident($1);
6689683Slinton }
6699683Slinton ;
6709683Slinton opt_filename:
6719683Slinton     /* empty */
6729683Slinton {
6739683Slinton 	$$ = nil;
6749683Slinton }
6759683Slinton |
6769683Slinton     filename
6779683Slinton {
6789683Slinton 	$$ = $1;
6799683Slinton }
6809683Slinton ;
68112482Slinton opt_exp_list:
68212482Slinton     exp_list
6839683Slinton {
68412482Slinton 	$$ = $1;
6859683Slinton }
6869683Slinton |
68712482Slinton     /* empty */
6889683Slinton {
68912482Slinton 	$$ = nil;
6909683Slinton }
6919683Slinton ;
6929683Slinton list_command:
693*18214Slinton     LIST
6949683Slinton {
6959683Slinton 	$$ = build(O_LIST,
6969683Slinton 	    build(O_LCON, (long) cursrcline),
6979683Slinton 	    build(O_LCON, (long) cursrcline + 9)
6989683Slinton 	);
6999683Slinton }
7009683Slinton |
701*18214Slinton     LIST line_number
7029683Slinton {
7039683Slinton 	$$ = build(O_LIST, $2, $2);
7049683Slinton }
7059683Slinton |
706*18214Slinton     LIST line_number ',' line_number
7079683Slinton {
7089683Slinton 	$$ = build(O_LIST, $2, $4);
7099683Slinton }
7109683Slinton |
711*18214Slinton     LIST opt_qual_symbol
7129683Slinton {
713*18214Slinton 	$$ = build(O_LIST, $2);
7149683Slinton }
7159683Slinton ;
716*18214Slinton integer_list:
717*18214Slinton     INT
718*18214Slinton {
719*18214Slinton 	$$ = build(O_LCON, $1);
720*18214Slinton }
721*18214Slinton |
722*18214Slinton     INT integer_list
723*18214Slinton {
724*18214Slinton 	$$ = build(O_COMMA, build(O_LCON, $1), $2);
725*18214Slinton }
72616607Ssam ;
7279683Slinton line_number:
7289683Slinton     INT
7299683Slinton {
7309683Slinton 	$$ = build(O_LCON, $1);
7319683Slinton }
7329683Slinton |
7339683Slinton     '$'
7349683Slinton {
7359683Slinton 	$$ = build(O_LCON, (long) LASTLINE);
7369683Slinton }
7379683Slinton ;
7389683Slinton examine:
7399683Slinton     address '/' count mode
7409683Slinton {
7419683Slinton 	$$ = build(O_EXAMINE, $4, $1, nil, $3);
7429683Slinton }
7439683Slinton |
7449683Slinton     address ',' address '/' mode
7459683Slinton {
7469683Slinton 	$$ = build(O_EXAMINE, $5, $1, $3, 0);
7479683Slinton }
7489683Slinton |
74911173Slinton     address '=' mode
75011173Slinton {
75111173Slinton 	$$ = build(O_EXAMINE, $3, $1, nil, 0);
75211173Slinton }
7539683Slinton ;
7549683Slinton address:
755*18214Slinton     INT
7569683Slinton {
7579683Slinton 	$$ = build(O_LCON, $1);
7589683Slinton }
7599683Slinton |
760*18214Slinton     '.'
7619683Slinton {
762*18214Slinton 	$$ = build(O_LCON, (long) prtaddr);
7639683Slinton }
7649683Slinton |
765*18214Slinton     '&' term
766*18214Slinton {
767*18214Slinton 	$$ = amper($2);
768*18214Slinton }
769*18214Slinton |
7709683Slinton     address '+' address
7719683Slinton {
7729683Slinton 	$$ = build(O_ADD, $1, $3);
7739683Slinton }
7749683Slinton |
7759683Slinton     address '-' address
7769683Slinton {
7779683Slinton 	$$ = build(O_SUB, $1, $3);
7789683Slinton }
7799683Slinton |
7809683Slinton     address '*' address
7819683Slinton {
7829683Slinton 	$$ = build(O_MUL, $1, $3);
7839683Slinton }
7849683Slinton |
785*18214Slinton     '*' address %prec UNARYSIGN
7869683Slinton {
787*18214Slinton 	$$ = build(O_INDIR, $2);
7889683Slinton }
7899683Slinton |
790*18214Slinton     '-' address %prec UNARYSIGN
7919683Slinton {
792*18214Slinton 	$$ = build(O_NEG, $2);
7939683Slinton }
794*18214Slinton |
795*18214Slinton     '(' exp ')'
796*18214Slinton {
797*18214Slinton 	$$ = $2;
798*18214Slinton }
7999683Slinton ;
800*18214Slinton term:
801*18214Slinton     symbol
802*18214Slinton {
803*18214Slinton 	$$ = $1;
804*18214Slinton }
805*18214Slinton |
806*18214Slinton     term '.' name
807*18214Slinton {
808*18214Slinton 	$$ = unrval(dot($1, $3));
809*18214Slinton }
810*18214Slinton |
811*18214Slinton     term ARROW name
812*18214Slinton {
813*18214Slinton 	$$ = unrval(dot($1, $3));
814*18214Slinton }
815*18214Slinton |
816*18214Slinton     term '[' exp_list ']'
817*18214Slinton {
818*18214Slinton 	$$ = unrval(subscript($1, $3));
819*18214Slinton }
820*18214Slinton ;
8219683Slinton count:
8229683Slinton     /* empty */
8239683Slinton {
8249683Slinton 	$$ = 1;
8259683Slinton }
8269683Slinton |
8279683Slinton     INT
8289683Slinton {
8299683Slinton 	$$ = $1;
8309683Slinton }
8319683Slinton ;
8329683Slinton mode:
8339683Slinton     name
8349683Slinton {
8359683Slinton 	$$ = ident($1);
8369683Slinton 	curformat = $$;
8379683Slinton }
8389683Slinton |
8399683Slinton     /* empty */
8409683Slinton {
8419683Slinton 	$$ = curformat;
8429683Slinton }
8439683Slinton ;
8449683Slinton opt_cond:
8459683Slinton     /* empty */
8469683Slinton {
8479683Slinton 	$$ = nil;
8489683Slinton }
8499683Slinton |
8509683Slinton     IF boolean_exp
8519683Slinton {
8529683Slinton 	$$ = $2;
8539683Slinton }
8549683Slinton ;
8559683Slinton exp_list:
8569683Slinton     exp
8579683Slinton {
8589683Slinton 	$$ = build(O_COMMA, $1, nil);
8599683Slinton }
8609683Slinton |
8619683Slinton     exp ',' exp_list
8629683Slinton {
8639683Slinton 	$$ = build(O_COMMA, $1, $3);
8649683Slinton }
8659683Slinton ;
8669683Slinton exp:
867*18214Slinton     symbol
8689683Slinton {
8699683Slinton 	$$ = build(O_RVAL, $1);
8709683Slinton }
8719683Slinton |
872*18214Slinton     exp '[' exp_list ']'
8739683Slinton {
874*18214Slinton 	$$ = subscript(unrval($1), $3);
8759683Slinton }
8769683Slinton |
877*18214Slinton     exp '.' name
878*18214Slinton {
879*18214Slinton 	$$ = dot($1, $3);
880*18214Slinton }
881*18214Slinton |
882*18214Slinton     exp ARROW name
883*18214Slinton {
884*18214Slinton 	$$ = dot($1, $3);
885*18214Slinton }
886*18214Slinton |
887*18214Slinton     '*' exp %prec UNARYSIGN
888*18214Slinton {
889*18214Slinton 	$$ = build(O_INDIR, $2);
890*18214Slinton }
891*18214Slinton |
892*18214Slinton     exp '^' %prec UNARYSIGN
893*18214Slinton {
894*18214Slinton 	$$ = build(O_INDIR, $1);
895*18214Slinton }
896*18214Slinton |
89716607Ssam     exp '\\' opt_qual_symbol
89811173Slinton {
89911173Slinton 	$$ = build(O_TYPERENAME, $1, $3);
90011173Slinton }
90111173Slinton |
902*18214Slinton     exp '\\' '&' opt_qual_symbol %prec '\\'
903*18214Slinton {
904*18214Slinton 	$$ = renameptr($1, $4);
905*18214Slinton }
906*18214Slinton |
907*18214Slinton     exp '(' opt_exp_list ')'
908*18214Slinton {
909*18214Slinton 	$$ = build(O_CALL, unrval($1), $3);
910*18214Slinton }
911*18214Slinton |
912*18214Slinton     constant
913*18214Slinton {
914*18214Slinton 	$$ = $1;
915*18214Slinton }
916*18214Slinton |
9179683Slinton     '+' exp %prec UNARYSIGN
9189683Slinton {
9199683Slinton 	$$ = $2;
9209683Slinton }
9219683Slinton |
9229683Slinton     '-' exp %prec UNARYSIGN
9239683Slinton {
9249683Slinton 	$$ = build(O_NEG, $2);
9259683Slinton }
9269683Slinton |
9279683Slinton     '&' exp %prec UNARYSIGN
9289683Slinton {
9299683Slinton 	$$ = amper($2);
9309683Slinton }
9319683Slinton |
9329683Slinton     exp '+' exp
9339683Slinton {
9349683Slinton 	$$ = build(O_ADD, $1, $3);
9359683Slinton }
9369683Slinton |
9379683Slinton     exp '-' exp
9389683Slinton {
9399683Slinton 	$$ = build(O_SUB, $1, $3);
9409683Slinton }
9419683Slinton |
9429683Slinton     exp '*' exp
9439683Slinton {
9449683Slinton 	$$ = build(O_MUL, $1, $3);
9459683Slinton }
9469683Slinton |
9479683Slinton     exp '/' exp
9489683Slinton {
9499683Slinton 	$$ = build(O_DIVF, $1, $3);
9509683Slinton }
9519683Slinton |
9529683Slinton     exp DIV exp
9539683Slinton {
9549683Slinton 	$$ = build(O_DIV, $1, $3);
9559683Slinton }
9569683Slinton |
9579683Slinton     exp MOD exp
9589683Slinton {
9599683Slinton 	$$ = build(O_MOD, $1, $3);
9609683Slinton }
9619683Slinton |
9629683Slinton     exp AND exp
9639683Slinton {
9649683Slinton 	$$ = build(O_AND, $1, $3);
9659683Slinton }
9669683Slinton |
9679683Slinton     exp OR exp
9689683Slinton {
9699683Slinton 	$$ = build(O_OR, $1, $3);
9709683Slinton }
9719683Slinton |
9729683Slinton     exp '<' exp
9739683Slinton {
9749683Slinton 	$$ = build(O_LT, $1, $3);
9759683Slinton }
9769683Slinton |
9779683Slinton     exp '<' '=' exp
9789683Slinton {
9799683Slinton 	$$ = build(O_LE, $1, $4);
9809683Slinton }
9819683Slinton |
9829683Slinton     exp '>' exp
9839683Slinton {
9849683Slinton 	$$ = build(O_GT, $1, $3);
9859683Slinton }
9869683Slinton |
9879683Slinton     exp '>' '=' exp
9889683Slinton {
9899683Slinton 	$$ = build(O_GE, $1, $4);
9909683Slinton }
9919683Slinton |
9929683Slinton     exp '=' exp
9939683Slinton {
9949683Slinton 	$$ = build(O_EQ, $1, $3);
9959683Slinton }
9969683Slinton |
9979683Slinton     exp '=' '=' exp
9989683Slinton {
9999683Slinton 	$$ = build(O_EQ, $1, $4);
10009683Slinton }
10019683Slinton |
10029683Slinton     exp '<' '>' exp
10039683Slinton {
10049683Slinton 	$$ = build(O_NE, $1, $4);
10059683Slinton }
10069683Slinton |
10079683Slinton     exp '!' '=' exp
10089683Slinton {
10099683Slinton 	$$ = build(O_NE, $1, $4);
10109683Slinton }
10119683Slinton |
10129683Slinton     '(' exp ')'
10139683Slinton {
10149683Slinton 	$$ = $2;
10159683Slinton }
10169683Slinton ;
10179683Slinton boolean_exp:
10189683Slinton     exp
10199683Slinton {
10209683Slinton 	chkboolean($1);
10219683Slinton 	$$ = $1;
10229683Slinton }
10239683Slinton ;
10249683Slinton constant:
10259683Slinton     INT
10269683Slinton {
10279683Slinton 	$$ = build(O_LCON, $1);
10289683Slinton }
10299683Slinton |
1030*18214Slinton     CHAR
1031*18214Slinton {
1032*18214Slinton 	$$ = build(O_CCON, $1);
1033*18214Slinton }
1034*18214Slinton |
10359683Slinton     REAL
10369683Slinton {
10379683Slinton 	$$ = build(O_FCON, $1);
10389683Slinton }
10399683Slinton |
10409683Slinton     STRING
10419683Slinton {
10429683Slinton 	$$ = build(O_SCON, $1);
10439683Slinton }
10449683Slinton ;
104516607Ssam opt_qual_symbol:
104616607Ssam     symbol
104716607Ssam {
104816607Ssam 	$$ = $1;
104916607Ssam }
105016607Ssam |
105116607Ssam     opt_qual_symbol '.' name
105216607Ssam {
105316607Ssam 	$$ = dot($1, $3);
105416607Ssam }
105516607Ssam ;
10569683Slinton symbol:
10579683Slinton     name
10589683Slinton {
1059*18214Slinton 	$$ = findvar($1);
1060*18214Slinton 	if ($$ == nil) {
1061*18214Slinton 	    $$ = build(O_SYM, which($1));
1062*18214Slinton 	}
10639683Slinton }
106416607Ssam |
106516607Ssam     '.' name
106616607Ssam {
106716607Ssam 	$$ = dot(build(O_SYM, program), $2);
106816607Ssam }
10699683Slinton ;
10709683Slinton name:
10719683Slinton     NAME
10729683Slinton {
10739683Slinton 	$$ = $1;
10749683Slinton }
10759683Slinton |
10769683Slinton     keyword
10779683Slinton {
10789683Slinton 	$$ = $1;
10799683Slinton }
10809683Slinton keyword:
108112536Scsvaf     ALIAS | AND | ASSIGN | AT | CALL | CATCH | CONT | DEBUG | DELETE | DIV |
108216607Ssam     DOWN | DUMP | EDIT | FILE | FUNC | GRIPE | HELP | IGNORE | IN | LIST |
108316607Ssam     MOD | NEXT | NEXTI | NIL | NOT | OR | PRINT | PSYM | QUIT |
1084*18214Slinton     RERUN | RETURN | RUN | SET | SH | SKIP | SOURCE | STATUS | STEP | STEPI |
1085*18214Slinton     STOP | STOPI | TRACE | TRACEI | UNALIAS | UNSET | UP | USE |
1086*18214Slinton     WHATIS | WHEN | WHERE | WHEREIS | WHICH
10879683Slinton ;
1088