xref: /csrg-svn/old/dbx/commands.y (revision 33312)
121633Sdist %{
221633Sdist 
321631Sdist /*
421633Sdist  * Copyright (c) 1983 Regents of the University of California.
521631Sdist  * All rights reserved.  The Berkeley software License Agreement
621631Sdist  * specifies the terms and conditions for redistribution.
721631Sdist  *
8*33312Sdonn  *	@(#)commands.y	5.4 (Berkeley) 01/12/88
921631Sdist  */
1021631Sdist 
11*33312Sdonn static char rcsid[] = "$Header: commands.y,v 1.2 87/08/19 15:18:53 mike Exp $";
1218214Slinton 
139683Slinton /*
149683Slinton  * Yacc grammar for debugger commands.
159683Slinton  */
169683Slinton 
179683Slinton #include "defs.h"
189683Slinton #include "symbols.h"
199683Slinton #include "operators.h"
209683Slinton #include "tree.h"
219683Slinton #include "process.h"
229683Slinton #include "source.h"
239683Slinton #include "scanner.h"
2418214Slinton #include "keywords.h"
259683Slinton #include "names.h"
2614673Slinton #include "lists.h"
279683Slinton 
289683Slinton private String curformat = "X";
299683Slinton 
309683Slinton %}
319683Slinton 
329683Slinton %term
3316607Ssam     ALIAS AND ASSIGN AT CALL CATCH CONT DEBUG DELETE DIV DOWN DUMP
349683Slinton     EDIT FILE FUNC GRIPE HELP IF IGNORE IN LIST MOD NEXT NEXTI NIL NOT OR
3518214Slinton     PRINT PSYM QUIT RERUN RETURN RUN SET SH SKIP SOURCE STATUS STEP STEPI
3618214Slinton     STOP STOPI TRACE TRACEI UNALIAS UNSET UP USE
3718214Slinton     WHATIS WHEN WHERE WHEREIS WHICH
389683Slinton 
3918214Slinton %term INT CHAR REAL NAME STRING
4018214Slinton %term ARROW
419683Slinton 
429683Slinton %right INT
439683Slinton %binary REDIRECT
449683Slinton %binary '<' '=' '>' '!' IN
459683Slinton %left '+' '-' OR
469683Slinton %left UNARYSIGN
479683Slinton %left '*' '/' DIV MOD AND
4818214Slinton %left '\\'
499683Slinton %left NOT '(' '[' '.' '^' ARROW
509683Slinton 
519683Slinton %union {
529683Slinton     Name y_name;
539683Slinton     Symbol y_sym;
549683Slinton     Node y_node;
559683Slinton     Integer y_int;
569683Slinton     Operator y_op;
579683Slinton     long y_long;
5818214Slinton     char y_char;
599683Slinton     double y_real;
609683Slinton     String y_string;
619683Slinton     Boolean y_bool;
629683Slinton     Cmdlist y_cmdlist;
6314673Slinton     List y_list;
649683Slinton };
659683Slinton 
669683Slinton %type <y_op>	    trace stop
6718214Slinton %type <y_long>	    INT count signal
6818214Slinton %type <y_char>	    CHAR
699683Slinton %type <y_real>	    REAL
709683Slinton %type <y_string>    STRING redirectout filename opt_filename mode
7116607Ssam %type <y_name>	    ALIAS AND ASSIGN AT CALL CATCH CONT
7216607Ssam %type <y_name>	    DEBUG DELETE DIV DOWN DUMP
739683Slinton %type <y_name>	    EDIT FILE FUNC GRIPE HELP IF IGNORE IN LIST MOD
749683Slinton %type <y_name>	    NEXT NEXTI NIL NOT OR
7518214Slinton %type <y_name>	    PRINT PSYM QUIT RERUN RETURN RUN SET SH SKIP SOURCE STATUS
7616607Ssam %type <y_name>	    STEP STEPI STOP STOPI TRACE TRACEI
7718214Slinton %type <y_name>	    UNALIAS UNSET UP USE WHATIS WHEN WHERE WHEREIS WHICH
789683Slinton %type <y_name>	    name NAME keyword
7916607Ssam %type <y_node>      opt_qual_symbol symbol
809683Slinton %type <y_node>	    command rcommand cmd step what where examine
8112482Slinton %type <y_node>	    event opt_exp_list opt_cond
829683Slinton %type <y_node>	    exp_list exp term boolean_exp constant address
8316934Ssam %type <y_node>	    integer_list alias_command list_command line_number
849683Slinton %type <y_cmdlist>   actions
8518214Slinton %type <y_list>      sourcepath name_list
869683Slinton 
879683Slinton %%
889683Slinton 
899683Slinton input:
909683Slinton     input command_nl
919683Slinton |
929683Slinton     /* empty */
939683Slinton ;
949683Slinton command_nl:
959683Slinton     command_line '\n'
9618214Slinton |
9718214Slinton     command_line ';'
9816926Ssam {
9918214Slinton 	chkalias = true;
10016926Ssam }
1019683Slinton |
1029683Slinton     '\n'
1039683Slinton ;
1049683Slinton 
1059683Slinton command_line:
1069683Slinton     command
1079683Slinton {
1089683Slinton 	if ($1 != nil) {
10918214Slinton 	    topeval($1);
1109683Slinton 	}
1119683Slinton }
1129683Slinton |
1139683Slinton     rcommand redirectout
1149683Slinton {
1159683Slinton 	if ($1 != nil) {
1169683Slinton 	    if ($2 != nil) {
1179683Slinton 		setout($2);
11818214Slinton 		topeval($1);
1199683Slinton 		unsetout();
1209683Slinton 	    } else {
12118214Slinton 		topeval($1);
1229683Slinton 	    }
1239683Slinton 	}
1249683Slinton }
1259683Slinton ;
1269683Slinton redirectout:
1279683Slinton     '>' shellmode NAME
1289683Slinton {
1299683Slinton 	$$ = ident($3);
1309683Slinton }
1319683Slinton |
1329683Slinton     /* empty */
1339683Slinton {
1349683Slinton 	$$ = nil;
1359683Slinton }
1369683Slinton ;
1379683Slinton 
1389683Slinton /*
1399683Slinton  * Non-redirectable commands.
1409683Slinton  */
1419683Slinton command:
1429683Slinton     alias_command
1439683Slinton {
1449683Slinton 	$$ = $1;
1459683Slinton }
1469683Slinton |
14718214Slinton     ASSIGN exp '=' exp
1489683Slinton {
14918214Slinton 	$$ = build(O_ASSIGN, unrval($2), $4);
1509683Slinton }
1519683Slinton |
15218214Slinton     CATCH signal
1539683Slinton {
15418214Slinton 	$$ = build(O_CATCH, $2);
1559683Slinton }
1569683Slinton |
15718214Slinton     CATCH
15816926Ssam {
15918214Slinton 	$$ = build(O_CATCH, 0);
16016926Ssam }
16116926Ssam |
1629683Slinton     CONT
1639683Slinton {
16414673Slinton 	$$ = build(O_CONT, (long) DEFSIG);
1659683Slinton }
1669683Slinton |
16718214Slinton     CONT signal
16811870Slinton {
16911870Slinton 	$$ = build(O_CONT, $2);
17011870Slinton }
17111870Slinton |
17216934Ssam     DELETE integer_list
1739683Slinton {
1749683Slinton 	$$ = build(O_DELETE, $2);
1759683Slinton }
1769683Slinton |
17716607Ssam     DOWN
17816607Ssam {
17916607Ssam 	$$ = build(O_DOWN, build(O_LCON, (long) 1));
18016607Ssam }
18116607Ssam |
18216607Ssam     DOWN INT
18316607Ssam {
18416607Ssam 	$$ = build(O_DOWN, build(O_LCON, (long) $2));
18516607Ssam }
18616607Ssam |
1879683Slinton     EDIT shellmode opt_filename
1889683Slinton {
1899683Slinton 	$$ = build(O_EDIT, $3);
1909683Slinton }
1919683Slinton |
1929683Slinton     FILE shellmode opt_filename
1939683Slinton {
1949683Slinton 	$$ = build(O_CHFILE, $3);
1959683Slinton }
1969683Slinton |
1979683Slinton     FUNC
1989683Slinton {
1999683Slinton 	$$ = build(O_FUNC, nil);
2009683Slinton }
2019683Slinton |
20218214Slinton     FUNC opt_qual_symbol
2039683Slinton {
20418214Slinton 	$$ = build(O_FUNC, $2);
2059683Slinton }
2069683Slinton |
2079683Slinton     GRIPE
2089683Slinton {
2099683Slinton 	$$ = build(O_GRIPE);
2109683Slinton }
2119683Slinton |
2129683Slinton     HELP
2139683Slinton {
2149683Slinton 	$$ = build(O_HELP);
2159683Slinton }
2169683Slinton |
21718214Slinton     IGNORE signal
2189683Slinton {
21918214Slinton 	$$ = build(O_IGNORE, $2);
2209683Slinton }
2219683Slinton |
22218214Slinton     IGNORE
22316926Ssam {
22418214Slinton 	$$ = build(O_IGNORE, 0);
22516926Ssam }
22616926Ssam |
2279683Slinton     list_command
2289683Slinton {
2299683Slinton 	$$ = $1;
2309683Slinton }
2319683Slinton |
23218214Slinton     PSYM exp
2339683Slinton {
23418214Slinton 	$$ = build(O_PSYM, unrval($2));
2359683Slinton }
2369683Slinton |
2379683Slinton     QUIT
2389683Slinton {
2399683Slinton 	if (not popinput()) {
2409683Slinton 	    quit(0);
2419683Slinton 	} else {
2429683Slinton 	    $$ = nil;
2439683Slinton 	}
2449683Slinton }
2459683Slinton |
24616607Ssam     RETURN
24716607Ssam {
24816607Ssam 	$$ = build(O_RETURN, nil);
24916607Ssam }
25016607Ssam |
25118214Slinton     RETURN opt_qual_symbol
25216607Ssam {
25318214Slinton 	$$ = build(O_RETURN, $2);
25416607Ssam }
25516607Ssam |
2569683Slinton     runcommand
2579683Slinton {
2589683Slinton 	run();
2599683Slinton 	/* NOTREACHED */
2609683Slinton }
2619683Slinton |
26218214Slinton     SET name '=' exp
26318214Slinton {
26418214Slinton 	$$ = build(O_SET, build(O_NAME, $2), $4);
26518214Slinton }
26618214Slinton |
26718214Slinton     SET name
26818214Slinton {
26918214Slinton 	$$ = build(O_SET, build(O_NAME, $2), nil);
27018214Slinton }
27118214Slinton |
27218214Slinton     SET
27318214Slinton {
27418214Slinton 	$$ = build(O_SET, nil, nil);
27518214Slinton }
27618214Slinton |
2779683Slinton     SH
2789683Slinton {
2799683Slinton 	shellline();
2809683Slinton 	$$ = nil;
2819683Slinton }
2829683Slinton |
2839683Slinton     SOURCE shellmode filename
2849683Slinton {
2859683Slinton 	$$ = build(O_SOURCE, $3);
2869683Slinton }
2879683Slinton |
2889683Slinton     step
2899683Slinton {
2909683Slinton 	$$ = $1;
2919683Slinton }
2929683Slinton |
2939683Slinton     stop where opt_cond
2949683Slinton {
2959683Slinton 	$$ = build($1, nil, $2, $3);
2969683Slinton }
2979683Slinton |
2989683Slinton     stop what opt_cond
2999683Slinton {
3009683Slinton 	$$ = build($1, $2, nil, $3);
3019683Slinton }
3029683Slinton |
3039683Slinton     stop IF boolean_exp
3049683Slinton {
3059683Slinton 	$$ = build($1, nil, nil, $3);
3069683Slinton }
3079683Slinton |
3089683Slinton     trace what where opt_cond
3099683Slinton {
3109683Slinton 	$$ = build($1, $2, $3, $4);
3119683Slinton }
3129683Slinton |
3139683Slinton     trace where opt_cond
3149683Slinton {
3159683Slinton 	$$ = build($1, nil, $2, $3);
3169683Slinton }
3179683Slinton |
3189683Slinton     trace what opt_cond
3199683Slinton {
3209683Slinton 	$$ = build($1, $2, nil, $3);
3219683Slinton }
3229683Slinton |
3239683Slinton     trace opt_cond
3249683Slinton {
3259683Slinton 	$$ = build($1, nil, nil, $2);
3269683Slinton }
3279683Slinton |
32818214Slinton     UNALIAS name
32918214Slinton {
33018214Slinton 	$$ = build(O_UNALIAS, build(O_NAME, $2));
33118214Slinton }
33218214Slinton |
33318214Slinton     UNSET name
33418214Slinton {
33518214Slinton 	$$ = build(O_UNSET, build(O_NAME, $2));
33618214Slinton }
33718214Slinton |
33816607Ssam     UP
3399683Slinton {
34016607Ssam 	$$ = build(O_UP, build(O_LCON, (long) 1));
3419683Slinton }
3429683Slinton |
34316607Ssam     UP INT
3449683Slinton {
34516607Ssam 	$$ = build(O_UP, build(O_LCON, (long) $2));
3469683Slinton }
3479683Slinton |
3489683Slinton     USE shellmode sourcepath
3499683Slinton {
35014673Slinton 	String dir;
35114673Slinton 
3529683Slinton 	$$ = nil;
35314673Slinton 	if (list_size($3) == 0) {
35414673Slinton 	    foreach (String, dir, sourcepath)
35514673Slinton 		printf("%s ", dir);
35614673Slinton 	    endfor
35714673Slinton 	    printf("\n");
35814673Slinton 	} else {
35914673Slinton 	    foreach (String, dir, sourcepath)
36014673Slinton 		list_delete(list_curitem(sourcepath), sourcepath);
36114673Slinton 	    endfor
36214673Slinton 	    sourcepath = $3;
3639683Slinton 	}
3649683Slinton }
36516604Ssam |
36618214Slinton     WHATIS opt_qual_symbol
36716604Ssam {
36818214Slinton 	$$ = build(O_WHATIS, $2);
36916604Ssam }
37016607Ssam |
37118214Slinton     WHEN event '{' actions '}'
37216604Ssam {
37318214Slinton 	$$ = build(O_ADDEVENT, $2, $4);
37416604Ssam }
37516604Ssam |
37618214Slinton     WHEREIS name
37716604Ssam {
37818214Slinton 	$$ = build(O_WHEREIS, build(O_SYM, lookup($2)));
37916604Ssam }
38016607Ssam |
38118214Slinton     WHICH symbol
38216604Ssam {
38318214Slinton 	$$ = build(O_WHICH, $2);
38416604Ssam }
38516625Ssam |
38618214Slinton     '/'
38716625Ssam {
38818214Slinton 	$$ = build(O_SEARCH,
38918214Slinton 	    build(O_LCON, (long) '/'),
39018214Slinton 	    build(O_SCON, strdup(scanner_linebuf))
39118214Slinton 	);
39218214Slinton 	gobble();
39318214Slinton 	insertinput("\n");
39416625Ssam }
39516625Ssam |
39618214Slinton     '?'
39716625Ssam {
39818214Slinton 	$$ = build(O_SEARCH,
39918214Slinton 	    build(O_LCON, (long) '?'),
40018214Slinton 	    build(O_SCON, strdup(scanner_linebuf))
40118214Slinton 	);
40218214Slinton 	gobble();
40318214Slinton 	insertinput("\n");
40416625Ssam }
40516625Ssam ;
40616926Ssam signal:
40716926Ssam     INT
40816926Ssam {
40918214Slinton 	$$ = $1;
41016926Ssam }
41116926Ssam |
41218214Slinton     name
41316926Ssam {
41418214Slinton 	$$ = siglookup(ident($1));
41516926Ssam }
41616926Ssam ;
4179683Slinton runcommand:
41816607Ssam     run arglist
41912482Slinton |
42012524Slinton     run
4219683Slinton ;
4229683Slinton run:
42312524Slinton     RUN shellmode
4249683Slinton {
42516607Ssam 	arginit();
4269683Slinton 	fflush(stdout);
4279683Slinton }
42816607Ssam |
42916607Ssam     RERUN shellmode
43016607Ssam {
43116607Ssam 	fflush(stdout);
43216607Ssam }
4339683Slinton ;
4349683Slinton arglist:
4359683Slinton     arglist arg
4369683Slinton |
43712482Slinton     arg
4389683Slinton ;
4399683Slinton arg:
44018214Slinton     NAME
4419683Slinton {
4429683Slinton 	newarg(ident($1));
4439683Slinton }
4449683Slinton |
44518214Slinton     STRING
44616607Ssam {
44716607Ssam 	newarg($1);
44816607Ssam }
44916607Ssam |
4509683Slinton     '<' NAME
4519683Slinton {
4529683Slinton 	inarg(ident($2));
4539683Slinton }
4549683Slinton |
4559683Slinton     '>' NAME
4569683Slinton {
4579683Slinton 	outarg(ident($2));
4589683Slinton }
4599683Slinton ;
4609683Slinton step:
46118214Slinton     STEP
4629683Slinton {
4639683Slinton 	$$ = build(O_STEP, true, false);
4649683Slinton }
4659683Slinton |
46618214Slinton     STEPI
4679683Slinton {
4689683Slinton 	$$ = build(O_STEP, false, false);
4699683Slinton }
4709683Slinton |
47118214Slinton     NEXT
4729683Slinton {
4739683Slinton 	$$ = build(O_STEP, true, true);
4749683Slinton }
4759683Slinton |
47618214Slinton     NEXTI
4779683Slinton {
4789683Slinton 	$$ = build(O_STEP, false, true);
4799683Slinton }
4809683Slinton ;
4819683Slinton shellmode:
4829683Slinton     /* empty */
4839683Slinton {
4849683Slinton 	beginshellmode();
4859683Slinton }
4869683Slinton ;
4879683Slinton sourcepath:
4889683Slinton     sourcepath NAME
4899683Slinton {
49014673Slinton 	$$ = $1;
49114673Slinton 	list_append(list_item(ident($2)), nil, $$);
4929683Slinton }
4939683Slinton |
4949683Slinton     /* empty */
4959683Slinton {
49614673Slinton 	$$ = list_alloc();
4979683Slinton }
4989683Slinton ;
4999683Slinton event:
5009683Slinton     where
5019683Slinton |
5029683Slinton     exp
5039683Slinton ;
5049683Slinton actions:
5059683Slinton     actions cmd ';'
5069683Slinton {
5079683Slinton 	$$ = $1;
5089683Slinton 	cmdlist_append($2, $$);
5099683Slinton }
5109683Slinton |
5119683Slinton     cmd ';'
5129683Slinton {
5139683Slinton 	$$ = list_alloc();
5149683Slinton 	cmdlist_append($1, $$);
5159683Slinton }
5169683Slinton ;
5179683Slinton cmd:
5189683Slinton     command
5199683Slinton |
5209683Slinton     rcommand
5219683Slinton ;
5229683Slinton 
5239683Slinton /*
5249683Slinton  * Redirectable commands.
5259683Slinton  */
5269683Slinton rcommand:
52718214Slinton     PRINT exp_list
5289683Slinton {
52918214Slinton 	$$ = build(O_PRINT, $2);
5309683Slinton }
5319683Slinton |
5329683Slinton     WHERE
5339683Slinton {
5349683Slinton 	$$ = build(O_WHERE);
5359683Slinton }
5369683Slinton |
5379683Slinton     examine
5389683Slinton {
5399683Slinton 	$$ = $1;
5409683Slinton }
5419683Slinton |
54218214Slinton     CALL term '(' opt_exp_list ')'
5439683Slinton {
54418214Slinton 	$$ = build(O_CALLPROC, $2, $4);
5459683Slinton }
5469683Slinton |
54712536Scsvaf     DEBUG INT
54812536Scsvaf {
54912536Scsvaf  	$$ = build(O_DEBUG, $2);
55012536Scsvaf }
55112536Scsvaf |
55218214Slinton     DEBUG '-' INT
55318214Slinton {
55418214Slinton 	$$ = build(O_DEBUG, -$3);
55518214Slinton }
55618214Slinton |
55718214Slinton     DUMP opt_qual_symbol
55818214Slinton {
55918214Slinton 	$$ = build(O_DUMP, $2);
56018214Slinton }
56118214Slinton |
56218214Slinton     DUMP '.'
56318214Slinton {
56418214Slinton 	$$ = build(O_DUMP, nil);
56518214Slinton }
56618214Slinton |
5679683Slinton     DUMP
5689683Slinton {
56918214Slinton 	$$ = build(O_DUMP, build(O_SYM, curfunc));
5709683Slinton }
5719683Slinton |
5729683Slinton     STATUS
5739683Slinton {
5749683Slinton 	$$ = build(O_STATUS);
5759683Slinton }
5769683Slinton ;
5779683Slinton alias_command:
57818214Slinton     ALIAS name name
5799683Slinton {
58018214Slinton 	$$ = build(O_ALIAS, build(O_NAME, $2), build(O_NAME, $3));
5819683Slinton }
5829683Slinton |
58318214Slinton     ALIAS name STRING
5849683Slinton {
58518214Slinton 	$$ = build(O_ALIAS, build(O_NAME, $2), build(O_SCON, $3));
58618214Slinton }
58718214Slinton |
58818214Slinton     ALIAS name '(' name_list ')' STRING
58918214Slinton {
59018214Slinton 	$$ = build(O_ALIAS,
59118214Slinton 	    build(O_COMMA, build(O_NAME, $2), (Node) $4),
59218214Slinton 	    build(O_SCON, $6)
59318214Slinton 	);
59418214Slinton }
59518214Slinton |
59618214Slinton     ALIAS name
59718214Slinton {
5989683Slinton 	$$ = build(O_ALIAS, build(O_NAME, $2), nil);
5999683Slinton }
6009683Slinton |
60118214Slinton     ALIAS
6029683Slinton {
6039683Slinton 	$$ = build(O_ALIAS, nil, nil);
6049683Slinton }
6059683Slinton ;
60618214Slinton name_list:
60718214Slinton     name_list ',' name
60816926Ssam {
60918214Slinton 	$$ = $1;
61018214Slinton 	list_append(list_item($3), nil, $$);
61116926Ssam }
61218214Slinton |
61318214Slinton     name
61418214Slinton {
61518214Slinton 	$$ = list_alloc();
61618214Slinton 	list_append(list_item($1), nil, $$);
61718214Slinton }
61816926Ssam ;
6199683Slinton trace:
62018214Slinton     TRACE
6219683Slinton {
6229683Slinton 	$$ = O_TRACE;
6239683Slinton }
6249683Slinton |
62518214Slinton     TRACEI
6269683Slinton {
6279683Slinton 	$$ = O_TRACEI;
6289683Slinton }
6299683Slinton ;
6309683Slinton stop:
63118214Slinton     STOP
6329683Slinton {
6339683Slinton 	$$ = O_STOP;
6349683Slinton }
6359683Slinton |
63618214Slinton     STOPI
6379683Slinton {
6389683Slinton 	$$ = O_STOPI;
6399683Slinton }
6409683Slinton ;
6419683Slinton what:
6429683Slinton     exp
6439683Slinton {
6449683Slinton 	$$ = $1;
6459683Slinton }
6469683Slinton |
6479683Slinton     STRING ':' line_number
6489683Slinton {
6499683Slinton 	$$ = build(O_QLINE, build(O_SCON, $1), $3);
6509683Slinton }
6519683Slinton ;
6529683Slinton where:
65318214Slinton     IN exp
6549683Slinton {
65518214Slinton 	$$ = unrval($2);
6569683Slinton }
6579683Slinton |
6589683Slinton     AT line_number
6599683Slinton {
66018214Slinton 	$$ = build(O_QLINE, build(O_SCON, strdup(cursource)), $2);
6619683Slinton }
6629683Slinton |
6639683Slinton     AT STRING ':' line_number
6649683Slinton {
6659683Slinton 	$$ = build(O_QLINE, build(O_SCON, $2), $4);
6669683Slinton }
6679683Slinton ;
6689683Slinton filename:
6699683Slinton     NAME
6709683Slinton {
6719683Slinton 	$$ = ident($1);
6729683Slinton }
6739683Slinton ;
6749683Slinton opt_filename:
6759683Slinton     /* empty */
6769683Slinton {
6779683Slinton 	$$ = nil;
6789683Slinton }
6799683Slinton |
6809683Slinton     filename
6819683Slinton {
6829683Slinton 	$$ = $1;
6839683Slinton }
6849683Slinton ;
68512482Slinton opt_exp_list:
68612482Slinton     exp_list
6879683Slinton {
68812482Slinton 	$$ = $1;
6899683Slinton }
6909683Slinton |
69112482Slinton     /* empty */
6929683Slinton {
69312482Slinton 	$$ = nil;
6949683Slinton }
6959683Slinton ;
6969683Slinton list_command:
69718214Slinton     LIST
6989683Slinton {
6999683Slinton 	$$ = build(O_LIST,
7009683Slinton 	    build(O_LCON, (long) cursrcline),
701*33312Sdonn 	    build(O_LCON, (long) cursrcline + srcwindowlen() - 1)
7029683Slinton 	);
7039683Slinton }
7049683Slinton |
70518214Slinton     LIST line_number
7069683Slinton {
7079683Slinton 	$$ = build(O_LIST, $2, $2);
7089683Slinton }
7099683Slinton |
71018214Slinton     LIST line_number ',' line_number
7119683Slinton {
7129683Slinton 	$$ = build(O_LIST, $2, $4);
7139683Slinton }
7149683Slinton |
71518214Slinton     LIST opt_qual_symbol
7169683Slinton {
717*33312Sdonn 	$$ = build(O_LIST, $2, $2);
7189683Slinton }
7199683Slinton ;
72018214Slinton integer_list:
72118214Slinton     INT
72218214Slinton {
72318214Slinton 	$$ = build(O_LCON, $1);
72418214Slinton }
72518214Slinton |
72618214Slinton     INT integer_list
72718214Slinton {
72818214Slinton 	$$ = build(O_COMMA, build(O_LCON, $1), $2);
72918214Slinton }
73016607Ssam ;
7319683Slinton line_number:
7329683Slinton     INT
7339683Slinton {
7349683Slinton 	$$ = build(O_LCON, $1);
7359683Slinton }
7369683Slinton |
7379683Slinton     '$'
7389683Slinton {
7399683Slinton 	$$ = build(O_LCON, (long) LASTLINE);
7409683Slinton }
7419683Slinton ;
7429683Slinton examine:
7439683Slinton     address '/' count mode
7449683Slinton {
7459683Slinton 	$$ = build(O_EXAMINE, $4, $1, nil, $3);
7469683Slinton }
7479683Slinton |
7489683Slinton     address ',' address '/' mode
7499683Slinton {
7509683Slinton 	$$ = build(O_EXAMINE, $5, $1, $3, 0);
7519683Slinton }
7529683Slinton |
75311173Slinton     address '=' mode
75411173Slinton {
75511173Slinton 	$$ = build(O_EXAMINE, $3, $1, nil, 0);
75611173Slinton }
7579683Slinton ;
7589683Slinton address:
75918214Slinton     INT
7609683Slinton {
7619683Slinton 	$$ = build(O_LCON, $1);
7629683Slinton }
7639683Slinton |
76418214Slinton     '.'
7659683Slinton {
76618214Slinton 	$$ = build(O_LCON, (long) prtaddr);
7679683Slinton }
7689683Slinton |
76918214Slinton     '&' term
77018214Slinton {
77118214Slinton 	$$ = amper($2);
77218214Slinton }
77318214Slinton |
7749683Slinton     address '+' address
7759683Slinton {
7769683Slinton 	$$ = build(O_ADD, $1, $3);
7779683Slinton }
7789683Slinton |
7799683Slinton     address '-' address
7809683Slinton {
7819683Slinton 	$$ = build(O_SUB, $1, $3);
7829683Slinton }
7839683Slinton |
7849683Slinton     address '*' address
7859683Slinton {
7869683Slinton 	$$ = build(O_MUL, $1, $3);
7879683Slinton }
7889683Slinton |
78918214Slinton     '*' address %prec UNARYSIGN
7909683Slinton {
79118214Slinton 	$$ = build(O_INDIR, $2);
7929683Slinton }
7939683Slinton |
79418214Slinton     '-' address %prec UNARYSIGN
7959683Slinton {
79618214Slinton 	$$ = build(O_NEG, $2);
7979683Slinton }
79818214Slinton |
79918214Slinton     '(' exp ')'
80018214Slinton {
80118214Slinton 	$$ = $2;
80218214Slinton }
8039683Slinton ;
80418214Slinton term:
80518214Slinton     symbol
80618214Slinton {
80718214Slinton 	$$ = $1;
80818214Slinton }
80918214Slinton |
81018214Slinton     term '.' name
81118214Slinton {
81218214Slinton 	$$ = unrval(dot($1, $3));
81318214Slinton }
81418214Slinton |
81518214Slinton     term ARROW name
81618214Slinton {
81718214Slinton 	$$ = unrval(dot($1, $3));
81818214Slinton }
81918214Slinton |
82018214Slinton     term '[' exp_list ']'
82118214Slinton {
82218214Slinton 	$$ = unrval(subscript($1, $3));
82318214Slinton }
82418214Slinton ;
8259683Slinton count:
8269683Slinton     /* empty */
8279683Slinton {
8289683Slinton 	$$ = 1;
8299683Slinton }
8309683Slinton |
8319683Slinton     INT
8329683Slinton {
8339683Slinton 	$$ = $1;
8349683Slinton }
8359683Slinton ;
8369683Slinton mode:
8379683Slinton     name
8389683Slinton {
8399683Slinton 	$$ = ident($1);
8409683Slinton 	curformat = $$;
8419683Slinton }
8429683Slinton |
8439683Slinton     /* empty */
8449683Slinton {
8459683Slinton 	$$ = curformat;
8469683Slinton }
8479683Slinton ;
8489683Slinton opt_cond:
8499683Slinton     /* empty */
8509683Slinton {
8519683Slinton 	$$ = nil;
8529683Slinton }
8539683Slinton |
8549683Slinton     IF boolean_exp
8559683Slinton {
8569683Slinton 	$$ = $2;
8579683Slinton }
8589683Slinton ;
8599683Slinton exp_list:
8609683Slinton     exp
8619683Slinton {
8629683Slinton 	$$ = build(O_COMMA, $1, nil);
8639683Slinton }
8649683Slinton |
8659683Slinton     exp ',' exp_list
8669683Slinton {
8679683Slinton 	$$ = build(O_COMMA, $1, $3);
8689683Slinton }
8699683Slinton ;
8709683Slinton exp:
87118214Slinton     symbol
8729683Slinton {
8739683Slinton 	$$ = build(O_RVAL, $1);
8749683Slinton }
8759683Slinton |
87618214Slinton     exp '[' exp_list ']'
8779683Slinton {
87818214Slinton 	$$ = subscript(unrval($1), $3);
8799683Slinton }
8809683Slinton |
88118214Slinton     exp '.' name
88218214Slinton {
88318214Slinton 	$$ = dot($1, $3);
88418214Slinton }
88518214Slinton |
88618214Slinton     exp ARROW name
88718214Slinton {
88818214Slinton 	$$ = dot($1, $3);
88918214Slinton }
89018214Slinton |
89118214Slinton     '*' exp %prec UNARYSIGN
89218214Slinton {
89318214Slinton 	$$ = build(O_INDIR, $2);
89418214Slinton }
89518214Slinton |
89618214Slinton     exp '^' %prec UNARYSIGN
89718214Slinton {
89818214Slinton 	$$ = build(O_INDIR, $1);
89918214Slinton }
90018214Slinton |
90116607Ssam     exp '\\' opt_qual_symbol
90211173Slinton {
90311173Slinton 	$$ = build(O_TYPERENAME, $1, $3);
90411173Slinton }
90511173Slinton |
90618214Slinton     exp '\\' '&' opt_qual_symbol %prec '\\'
90718214Slinton {
90818214Slinton 	$$ = renameptr($1, $4);
90918214Slinton }
91018214Slinton |
91118214Slinton     exp '(' opt_exp_list ')'
91218214Slinton {
91318214Slinton 	$$ = build(O_CALL, unrval($1), $3);
91418214Slinton }
91518214Slinton |
91618214Slinton     constant
91718214Slinton {
91818214Slinton 	$$ = $1;
91918214Slinton }
92018214Slinton |
9219683Slinton     '+' exp %prec UNARYSIGN
9229683Slinton {
9239683Slinton 	$$ = $2;
9249683Slinton }
9259683Slinton |
9269683Slinton     '-' exp %prec UNARYSIGN
9279683Slinton {
9289683Slinton 	$$ = build(O_NEG, $2);
9299683Slinton }
9309683Slinton |
9319683Slinton     '&' exp %prec UNARYSIGN
9329683Slinton {
9339683Slinton 	$$ = amper($2);
9349683Slinton }
9359683Slinton |
9369683Slinton     exp '+' exp
9379683Slinton {
9389683Slinton 	$$ = build(O_ADD, $1, $3);
9399683Slinton }
9409683Slinton |
9419683Slinton     exp '-' exp
9429683Slinton {
9439683Slinton 	$$ = build(O_SUB, $1, $3);
9449683Slinton }
9459683Slinton |
9469683Slinton     exp '*' exp
9479683Slinton {
9489683Slinton 	$$ = build(O_MUL, $1, $3);
9499683Slinton }
9509683Slinton |
9519683Slinton     exp '/' exp
9529683Slinton {
9539683Slinton 	$$ = build(O_DIVF, $1, $3);
9549683Slinton }
9559683Slinton |
9569683Slinton     exp DIV exp
9579683Slinton {
9589683Slinton 	$$ = build(O_DIV, $1, $3);
9599683Slinton }
9609683Slinton |
9619683Slinton     exp MOD exp
9629683Slinton {
9639683Slinton 	$$ = build(O_MOD, $1, $3);
9649683Slinton }
9659683Slinton |
9669683Slinton     exp AND exp
9679683Slinton {
9689683Slinton 	$$ = build(O_AND, $1, $3);
9699683Slinton }
9709683Slinton |
9719683Slinton     exp OR exp
9729683Slinton {
9739683Slinton 	$$ = build(O_OR, $1, $3);
9749683Slinton }
9759683Slinton |
9769683Slinton     exp '<' exp
9779683Slinton {
9789683Slinton 	$$ = build(O_LT, $1, $3);
9799683Slinton }
9809683Slinton |
9819683Slinton     exp '<' '=' exp
9829683Slinton {
9839683Slinton 	$$ = build(O_LE, $1, $4);
9849683Slinton }
9859683Slinton |
9869683Slinton     exp '>' exp
9879683Slinton {
9889683Slinton 	$$ = build(O_GT, $1, $3);
9899683Slinton }
9909683Slinton |
9919683Slinton     exp '>' '=' exp
9929683Slinton {
9939683Slinton 	$$ = build(O_GE, $1, $4);
9949683Slinton }
9959683Slinton |
9969683Slinton     exp '=' exp
9979683Slinton {
9989683Slinton 	$$ = build(O_EQ, $1, $3);
9999683Slinton }
10009683Slinton |
10019683Slinton     exp '=' '=' exp
10029683Slinton {
10039683Slinton 	$$ = build(O_EQ, $1, $4);
10049683Slinton }
10059683Slinton |
10069683Slinton     exp '<' '>' exp
10079683Slinton {
10089683Slinton 	$$ = build(O_NE, $1, $4);
10099683Slinton }
10109683Slinton |
10119683Slinton     exp '!' '=' exp
10129683Slinton {
10139683Slinton 	$$ = build(O_NE, $1, $4);
10149683Slinton }
10159683Slinton |
10169683Slinton     '(' exp ')'
10179683Slinton {
10189683Slinton 	$$ = $2;
10199683Slinton }
10209683Slinton ;
10219683Slinton boolean_exp:
10229683Slinton     exp
10239683Slinton {
10249683Slinton 	chkboolean($1);
10259683Slinton 	$$ = $1;
10269683Slinton }
10279683Slinton ;
10289683Slinton constant:
10299683Slinton     INT
10309683Slinton {
10319683Slinton 	$$ = build(O_LCON, $1);
10329683Slinton }
10339683Slinton |
103418214Slinton     CHAR
103518214Slinton {
103618214Slinton 	$$ = build(O_CCON, $1);
103718214Slinton }
103818214Slinton |
10399683Slinton     REAL
10409683Slinton {
10419683Slinton 	$$ = build(O_FCON, $1);
10429683Slinton }
10439683Slinton |
10449683Slinton     STRING
10459683Slinton {
10469683Slinton 	$$ = build(O_SCON, $1);
10479683Slinton }
10489683Slinton ;
104916607Ssam opt_qual_symbol:
105016607Ssam     symbol
105116607Ssam {
105216607Ssam 	$$ = $1;
105316607Ssam }
105416607Ssam |
105516607Ssam     opt_qual_symbol '.' name
105616607Ssam {
105716607Ssam 	$$ = dot($1, $3);
105816607Ssam }
105916607Ssam ;
10609683Slinton symbol:
10619683Slinton     name
10629683Slinton {
106318214Slinton 	$$ = findvar($1);
106418214Slinton 	if ($$ == nil) {
106518214Slinton 	    $$ = build(O_SYM, which($1));
106618214Slinton 	}
10679683Slinton }
106816607Ssam |
106916607Ssam     '.' name
107016607Ssam {
107116607Ssam 	$$ = dot(build(O_SYM, program), $2);
107216607Ssam }
10739683Slinton ;
10749683Slinton name:
10759683Slinton     NAME
10769683Slinton {
10779683Slinton 	$$ = $1;
10789683Slinton }
10799683Slinton |
10809683Slinton     keyword
10819683Slinton {
10829683Slinton 	$$ = $1;
10839683Slinton }
10849683Slinton keyword:
108512536Scsvaf     ALIAS | AND | ASSIGN | AT | CALL | CATCH | CONT | DEBUG | DELETE | DIV |
108616607Ssam     DOWN | DUMP | EDIT | FILE | FUNC | GRIPE | HELP | IGNORE | IN | LIST |
108716607Ssam     MOD | NEXT | NEXTI | NIL | NOT | OR | PRINT | PSYM | QUIT |
108818214Slinton     RERUN | RETURN | RUN | SET | SH | SKIP | SOURCE | STATUS | STEP | STEPI |
108918214Slinton     STOP | STOPI | TRACE | TRACEI | UNALIAS | UNSET | UP | USE |
109018214Slinton     WHATIS | WHEN | WHERE | WHEREIS | WHICH
10919683Slinton ;
1092