xref: /csrg-svn/old/dbx/commands.y (revision 42683)
121633Sdist %{
221633Sdist 
321631Sdist /*
438105Sbostic  * Copyright (c) 1983 The Regents of the University of California.
538105Sbostic  * All rights reserved.
621631Sdist  *
7*42683Sbostic  * %sccs.include.redist.c%
821631Sdist  */
921631Sdist 
1038105Sbostic #ifndef lint
11*42683Sbostic static char sccsid[] = "@(#)commands.y	5.6 (Berkeley) 06/01/90";
1238105Sbostic #endif /* not lint */
1318214Slinton 
149683Slinton /*
159683Slinton  * Yacc grammar for debugger commands.
169683Slinton  */
179683Slinton 
189683Slinton #include "defs.h"
199683Slinton #include "symbols.h"
209683Slinton #include "operators.h"
219683Slinton #include "tree.h"
229683Slinton #include "process.h"
239683Slinton #include "source.h"
249683Slinton #include "scanner.h"
2518214Slinton #include "keywords.h"
269683Slinton #include "names.h"
2714673Slinton #include "lists.h"
289683Slinton 
299683Slinton private String curformat = "X";
309683Slinton 
319683Slinton %}
329683Slinton 
339683Slinton %term
3416607Ssam     ALIAS AND ASSIGN AT CALL CATCH CONT DEBUG DELETE DIV DOWN DUMP
359683Slinton     EDIT FILE FUNC GRIPE HELP IF IGNORE IN LIST MOD NEXT NEXTI NIL NOT OR
3618214Slinton     PRINT PSYM QUIT RERUN RETURN RUN SET SH SKIP SOURCE STATUS STEP STEPI
3718214Slinton     STOP STOPI TRACE TRACEI UNALIAS UNSET UP USE
3818214Slinton     WHATIS WHEN WHERE WHEREIS WHICH
399683Slinton 
4018214Slinton %term INT CHAR REAL NAME STRING
4118214Slinton %term ARROW
429683Slinton 
439683Slinton %right INT
449683Slinton %binary REDIRECT
459683Slinton %binary '<' '=' '>' '!' IN
469683Slinton %left '+' '-' OR
479683Slinton %left UNARYSIGN
489683Slinton %left '*' '/' DIV MOD AND
4918214Slinton %left '\\'
509683Slinton %left NOT '(' '[' '.' '^' ARROW
519683Slinton 
529683Slinton %union {
539683Slinton     Name y_name;
549683Slinton     Symbol y_sym;
559683Slinton     Node y_node;
569683Slinton     Integer y_int;
579683Slinton     Operator y_op;
589683Slinton     long y_long;
5918214Slinton     char y_char;
609683Slinton     double y_real;
619683Slinton     String y_string;
629683Slinton     Boolean y_bool;
639683Slinton     Cmdlist y_cmdlist;
6414673Slinton     List y_list;
659683Slinton };
669683Slinton 
679683Slinton %type <y_op>	    trace stop
6818214Slinton %type <y_long>	    INT count signal
6918214Slinton %type <y_char>	    CHAR
709683Slinton %type <y_real>	    REAL
719683Slinton %type <y_string>    STRING redirectout filename opt_filename mode
7216607Ssam %type <y_name>	    ALIAS AND ASSIGN AT CALL CATCH CONT
7316607Ssam %type <y_name>	    DEBUG DELETE DIV DOWN DUMP
749683Slinton %type <y_name>	    EDIT FILE FUNC GRIPE HELP IF IGNORE IN LIST MOD
759683Slinton %type <y_name>	    NEXT NEXTI NIL NOT OR
7618214Slinton %type <y_name>	    PRINT PSYM QUIT RERUN RETURN RUN SET SH SKIP SOURCE STATUS
7716607Ssam %type <y_name>	    STEP STEPI STOP STOPI TRACE TRACEI
7818214Slinton %type <y_name>	    UNALIAS UNSET UP USE WHATIS WHEN WHERE WHEREIS WHICH
799683Slinton %type <y_name>	    name NAME keyword
8016607Ssam %type <y_node>      opt_qual_symbol symbol
819683Slinton %type <y_node>	    command rcommand cmd step what where examine
8212482Slinton %type <y_node>	    event opt_exp_list opt_cond
839683Slinton %type <y_node>	    exp_list exp term boolean_exp constant address
8416934Ssam %type <y_node>	    integer_list alias_command list_command line_number
859683Slinton %type <y_cmdlist>   actions
8618214Slinton %type <y_list>      sourcepath name_list
879683Slinton 
889683Slinton %%
899683Slinton 
909683Slinton input:
919683Slinton     input command_nl
929683Slinton |
939683Slinton     /* empty */
949683Slinton ;
959683Slinton command_nl:
969683Slinton     command_line '\n'
9718214Slinton |
9818214Slinton     command_line ';'
9916926Ssam {
10018214Slinton 	chkalias = true;
10116926Ssam }
1029683Slinton |
1039683Slinton     '\n'
1049683Slinton ;
1059683Slinton 
1069683Slinton command_line:
1079683Slinton     command
1089683Slinton {
1099683Slinton 	if ($1 != nil) {
11018214Slinton 	    topeval($1);
1119683Slinton 	}
1129683Slinton }
1139683Slinton |
1149683Slinton     rcommand redirectout
1159683Slinton {
1169683Slinton 	if ($1 != nil) {
1179683Slinton 	    if ($2 != nil) {
1189683Slinton 		setout($2);
11918214Slinton 		topeval($1);
1209683Slinton 		unsetout();
1219683Slinton 	    } else {
12218214Slinton 		topeval($1);
1239683Slinton 	    }
1249683Slinton 	}
1259683Slinton }
1269683Slinton ;
1279683Slinton redirectout:
1289683Slinton     '>' shellmode NAME
1299683Slinton {
1309683Slinton 	$$ = ident($3);
1319683Slinton }
1329683Slinton |
1339683Slinton     /* empty */
1349683Slinton {
1359683Slinton 	$$ = nil;
1369683Slinton }
1379683Slinton ;
1389683Slinton 
1399683Slinton /*
1409683Slinton  * Non-redirectable commands.
1419683Slinton  */
1429683Slinton command:
1439683Slinton     alias_command
1449683Slinton {
1459683Slinton 	$$ = $1;
1469683Slinton }
1479683Slinton |
14818214Slinton     ASSIGN exp '=' exp
1499683Slinton {
15018214Slinton 	$$ = build(O_ASSIGN, unrval($2), $4);
1519683Slinton }
1529683Slinton |
15318214Slinton     CATCH signal
1549683Slinton {
15518214Slinton 	$$ = build(O_CATCH, $2);
1569683Slinton }
1579683Slinton |
15818214Slinton     CATCH
15916926Ssam {
16018214Slinton 	$$ = build(O_CATCH, 0);
16116926Ssam }
16216926Ssam |
1639683Slinton     CONT
1649683Slinton {
16514673Slinton 	$$ = build(O_CONT, (long) DEFSIG);
1669683Slinton }
1679683Slinton |
16818214Slinton     CONT signal
16911870Slinton {
17011870Slinton 	$$ = build(O_CONT, $2);
17111870Slinton }
17211870Slinton |
17316934Ssam     DELETE integer_list
1749683Slinton {
1759683Slinton 	$$ = build(O_DELETE, $2);
1769683Slinton }
1779683Slinton |
17816607Ssam     DOWN
17916607Ssam {
18016607Ssam 	$$ = build(O_DOWN, build(O_LCON, (long) 1));
18116607Ssam }
18216607Ssam |
18316607Ssam     DOWN INT
18416607Ssam {
18516607Ssam 	$$ = build(O_DOWN, build(O_LCON, (long) $2));
18616607Ssam }
18716607Ssam |
1889683Slinton     EDIT shellmode opt_filename
1899683Slinton {
1909683Slinton 	$$ = build(O_EDIT, $3);
1919683Slinton }
1929683Slinton |
1939683Slinton     FILE shellmode opt_filename
1949683Slinton {
1959683Slinton 	$$ = build(O_CHFILE, $3);
1969683Slinton }
1979683Slinton |
1989683Slinton     FUNC
1999683Slinton {
2009683Slinton 	$$ = build(O_FUNC, nil);
2019683Slinton }
2029683Slinton |
20318214Slinton     FUNC opt_qual_symbol
2049683Slinton {
20518214Slinton 	$$ = build(O_FUNC, $2);
2069683Slinton }
2079683Slinton |
2089683Slinton     GRIPE
2099683Slinton {
2109683Slinton 	$$ = build(O_GRIPE);
2119683Slinton }
2129683Slinton |
2139683Slinton     HELP
2149683Slinton {
2159683Slinton 	$$ = build(O_HELP);
2169683Slinton }
2179683Slinton |
21818214Slinton     IGNORE signal
2199683Slinton {
22018214Slinton 	$$ = build(O_IGNORE, $2);
2219683Slinton }
2229683Slinton |
22318214Slinton     IGNORE
22416926Ssam {
22518214Slinton 	$$ = build(O_IGNORE, 0);
22616926Ssam }
22716926Ssam |
2289683Slinton     list_command
2299683Slinton {
2309683Slinton 	$$ = $1;
2319683Slinton }
2329683Slinton |
23318214Slinton     PSYM exp
2349683Slinton {
23518214Slinton 	$$ = build(O_PSYM, unrval($2));
2369683Slinton }
2379683Slinton |
2389683Slinton     QUIT
2399683Slinton {
2409683Slinton 	if (not popinput()) {
2419683Slinton 	    quit(0);
2429683Slinton 	} else {
2439683Slinton 	    $$ = nil;
2449683Slinton 	}
2459683Slinton }
2469683Slinton |
24716607Ssam     RETURN
24816607Ssam {
24916607Ssam 	$$ = build(O_RETURN, nil);
25016607Ssam }
25116607Ssam |
25218214Slinton     RETURN opt_qual_symbol
25316607Ssam {
25418214Slinton 	$$ = build(O_RETURN, $2);
25516607Ssam }
25616607Ssam |
2579683Slinton     runcommand
2589683Slinton {
2599683Slinton 	run();
2609683Slinton 	/* NOTREACHED */
2619683Slinton }
2629683Slinton |
26318214Slinton     SET name '=' exp
26418214Slinton {
26518214Slinton 	$$ = build(O_SET, build(O_NAME, $2), $4);
26618214Slinton }
26718214Slinton |
26818214Slinton     SET name
26918214Slinton {
27018214Slinton 	$$ = build(O_SET, build(O_NAME, $2), nil);
27118214Slinton }
27218214Slinton |
27318214Slinton     SET
27418214Slinton {
27518214Slinton 	$$ = build(O_SET, nil, nil);
27618214Slinton }
27718214Slinton |
2789683Slinton     SH
2799683Slinton {
2809683Slinton 	shellline();
2819683Slinton 	$$ = nil;
2829683Slinton }
2839683Slinton |
2849683Slinton     SOURCE shellmode filename
2859683Slinton {
2869683Slinton 	$$ = build(O_SOURCE, $3);
2879683Slinton }
2889683Slinton |
2899683Slinton     step
2909683Slinton {
2919683Slinton 	$$ = $1;
2929683Slinton }
2939683Slinton |
2949683Slinton     stop where opt_cond
2959683Slinton {
2969683Slinton 	$$ = build($1, nil, $2, $3);
2979683Slinton }
2989683Slinton |
2999683Slinton     stop what opt_cond
3009683Slinton {
3019683Slinton 	$$ = build($1, $2, nil, $3);
3029683Slinton }
3039683Slinton |
3049683Slinton     stop IF boolean_exp
3059683Slinton {
3069683Slinton 	$$ = build($1, nil, nil, $3);
3079683Slinton }
3089683Slinton |
3099683Slinton     trace what where opt_cond
3109683Slinton {
3119683Slinton 	$$ = build($1, $2, $3, $4);
3129683Slinton }
3139683Slinton |
3149683Slinton     trace where opt_cond
3159683Slinton {
3169683Slinton 	$$ = build($1, nil, $2, $3);
3179683Slinton }
3189683Slinton |
3199683Slinton     trace what opt_cond
3209683Slinton {
3219683Slinton 	$$ = build($1, $2, nil, $3);
3229683Slinton }
3239683Slinton |
3249683Slinton     trace opt_cond
3259683Slinton {
3269683Slinton 	$$ = build($1, nil, nil, $2);
3279683Slinton }
3289683Slinton |
32918214Slinton     UNALIAS name
33018214Slinton {
33118214Slinton 	$$ = build(O_UNALIAS, build(O_NAME, $2));
33218214Slinton }
33318214Slinton |
33418214Slinton     UNSET name
33518214Slinton {
33618214Slinton 	$$ = build(O_UNSET, build(O_NAME, $2));
33718214Slinton }
33818214Slinton |
33916607Ssam     UP
3409683Slinton {
34116607Ssam 	$$ = build(O_UP, build(O_LCON, (long) 1));
3429683Slinton }
3439683Slinton |
34416607Ssam     UP INT
3459683Slinton {
34616607Ssam 	$$ = build(O_UP, build(O_LCON, (long) $2));
3479683Slinton }
3489683Slinton |
3499683Slinton     USE shellmode sourcepath
3509683Slinton {
35114673Slinton 	String dir;
35214673Slinton 
3539683Slinton 	$$ = nil;
35414673Slinton 	if (list_size($3) == 0) {
35514673Slinton 	    foreach (String, dir, sourcepath)
35614673Slinton 		printf("%s ", dir);
35714673Slinton 	    endfor
35814673Slinton 	    printf("\n");
35914673Slinton 	} else {
36014673Slinton 	    foreach (String, dir, sourcepath)
36114673Slinton 		list_delete(list_curitem(sourcepath), sourcepath);
36214673Slinton 	    endfor
36314673Slinton 	    sourcepath = $3;
3649683Slinton 	}
3659683Slinton }
36616604Ssam |
36718214Slinton     WHATIS opt_qual_symbol
36816604Ssam {
36918214Slinton 	$$ = build(O_WHATIS, $2);
37016604Ssam }
37116607Ssam |
37218214Slinton     WHEN event '{' actions '}'
37316604Ssam {
37418214Slinton 	$$ = build(O_ADDEVENT, $2, $4);
37516604Ssam }
37616604Ssam |
37718214Slinton     WHEREIS name
37816604Ssam {
37918214Slinton 	$$ = build(O_WHEREIS, build(O_SYM, lookup($2)));
38016604Ssam }
38116607Ssam |
38218214Slinton     WHICH symbol
38316604Ssam {
38418214Slinton 	$$ = build(O_WHICH, $2);
38516604Ssam }
38616625Ssam |
38718214Slinton     '/'
38816625Ssam {
38918214Slinton 	$$ = build(O_SEARCH,
39018214Slinton 	    build(O_LCON, (long) '/'),
39118214Slinton 	    build(O_SCON, strdup(scanner_linebuf))
39218214Slinton 	);
39318214Slinton 	gobble();
39418214Slinton 	insertinput("\n");
39516625Ssam }
39616625Ssam |
39718214Slinton     '?'
39816625Ssam {
39918214Slinton 	$$ = build(O_SEARCH,
40018214Slinton 	    build(O_LCON, (long) '?'),
40118214Slinton 	    build(O_SCON, strdup(scanner_linebuf))
40218214Slinton 	);
40318214Slinton 	gobble();
40418214Slinton 	insertinput("\n");
40516625Ssam }
40616625Ssam ;
40716926Ssam signal:
40816926Ssam     INT
40916926Ssam {
41018214Slinton 	$$ = $1;
41116926Ssam }
41216926Ssam |
41318214Slinton     name
41416926Ssam {
41518214Slinton 	$$ = siglookup(ident($1));
41616926Ssam }
41716926Ssam ;
4189683Slinton runcommand:
41916607Ssam     run arglist
42012482Slinton |
42112524Slinton     run
4229683Slinton ;
4239683Slinton run:
42412524Slinton     RUN shellmode
4259683Slinton {
42616607Ssam 	arginit();
4279683Slinton 	fflush(stdout);
4289683Slinton }
42916607Ssam |
43016607Ssam     RERUN shellmode
43116607Ssam {
43216607Ssam 	fflush(stdout);
43316607Ssam }
4349683Slinton ;
4359683Slinton arglist:
4369683Slinton     arglist arg
4379683Slinton |
43812482Slinton     arg
4399683Slinton ;
4409683Slinton arg:
44118214Slinton     NAME
4429683Slinton {
4439683Slinton 	newarg(ident($1));
4449683Slinton }
4459683Slinton |
44618214Slinton     STRING
44716607Ssam {
44816607Ssam 	newarg($1);
44916607Ssam }
45016607Ssam |
4519683Slinton     '<' NAME
4529683Slinton {
4539683Slinton 	inarg(ident($2));
4549683Slinton }
4559683Slinton |
4569683Slinton     '>' NAME
4579683Slinton {
4589683Slinton 	outarg(ident($2));
4599683Slinton }
4609683Slinton ;
4619683Slinton step:
46218214Slinton     STEP
4639683Slinton {
4649683Slinton 	$$ = build(O_STEP, true, false);
4659683Slinton }
4669683Slinton |
46718214Slinton     STEPI
4689683Slinton {
4699683Slinton 	$$ = build(O_STEP, false, false);
4709683Slinton }
4719683Slinton |
47218214Slinton     NEXT
4739683Slinton {
4749683Slinton 	$$ = build(O_STEP, true, true);
4759683Slinton }
4769683Slinton |
47718214Slinton     NEXTI
4789683Slinton {
4799683Slinton 	$$ = build(O_STEP, false, true);
4809683Slinton }
4819683Slinton ;
4829683Slinton shellmode:
4839683Slinton     /* empty */
4849683Slinton {
4859683Slinton 	beginshellmode();
4869683Slinton }
4879683Slinton ;
4889683Slinton sourcepath:
4899683Slinton     sourcepath NAME
4909683Slinton {
49114673Slinton 	$$ = $1;
49214673Slinton 	list_append(list_item(ident($2)), nil, $$);
4939683Slinton }
4949683Slinton |
4959683Slinton     /* empty */
4969683Slinton {
49714673Slinton 	$$ = list_alloc();
4989683Slinton }
4999683Slinton ;
5009683Slinton event:
5019683Slinton     where
5029683Slinton |
5039683Slinton     exp
5049683Slinton ;
5059683Slinton actions:
5069683Slinton     actions cmd ';'
5079683Slinton {
5089683Slinton 	$$ = $1;
5099683Slinton 	cmdlist_append($2, $$);
5109683Slinton }
5119683Slinton |
5129683Slinton     cmd ';'
5139683Slinton {
5149683Slinton 	$$ = list_alloc();
5159683Slinton 	cmdlist_append($1, $$);
5169683Slinton }
5179683Slinton ;
5189683Slinton cmd:
5199683Slinton     command
5209683Slinton |
5219683Slinton     rcommand
5229683Slinton ;
5239683Slinton 
5249683Slinton /*
5259683Slinton  * Redirectable commands.
5269683Slinton  */
5279683Slinton rcommand:
52818214Slinton     PRINT exp_list
5299683Slinton {
53018214Slinton 	$$ = build(O_PRINT, $2);
5319683Slinton }
5329683Slinton |
5339683Slinton     WHERE
5349683Slinton {
5359683Slinton 	$$ = build(O_WHERE);
5369683Slinton }
5379683Slinton |
5389683Slinton     examine
5399683Slinton {
5409683Slinton 	$$ = $1;
5419683Slinton }
5429683Slinton |
54318214Slinton     CALL term '(' opt_exp_list ')'
5449683Slinton {
54518214Slinton 	$$ = build(O_CALLPROC, $2, $4);
5469683Slinton }
5479683Slinton |
54812536Scsvaf     DEBUG INT
54912536Scsvaf {
55012536Scsvaf  	$$ = build(O_DEBUG, $2);
55112536Scsvaf }
55212536Scsvaf |
55318214Slinton     DEBUG '-' INT
55418214Slinton {
55518214Slinton 	$$ = build(O_DEBUG, -$3);
55618214Slinton }
55718214Slinton |
55818214Slinton     DUMP opt_qual_symbol
55918214Slinton {
56018214Slinton 	$$ = build(O_DUMP, $2);
56118214Slinton }
56218214Slinton |
56318214Slinton     DUMP '.'
56418214Slinton {
56518214Slinton 	$$ = build(O_DUMP, nil);
56618214Slinton }
56718214Slinton |
5689683Slinton     DUMP
5699683Slinton {
57018214Slinton 	$$ = build(O_DUMP, build(O_SYM, curfunc));
5719683Slinton }
5729683Slinton |
5739683Slinton     STATUS
5749683Slinton {
5759683Slinton 	$$ = build(O_STATUS);
5769683Slinton }
5779683Slinton ;
5789683Slinton alias_command:
57918214Slinton     ALIAS name name
5809683Slinton {
58118214Slinton 	$$ = build(O_ALIAS, build(O_NAME, $2), build(O_NAME, $3));
5829683Slinton }
5839683Slinton |
58418214Slinton     ALIAS name STRING
5859683Slinton {
58618214Slinton 	$$ = build(O_ALIAS, build(O_NAME, $2), build(O_SCON, $3));
58718214Slinton }
58818214Slinton |
58918214Slinton     ALIAS name '(' name_list ')' STRING
59018214Slinton {
59118214Slinton 	$$ = build(O_ALIAS,
59218214Slinton 	    build(O_COMMA, build(O_NAME, $2), (Node) $4),
59318214Slinton 	    build(O_SCON, $6)
59418214Slinton 	);
59518214Slinton }
59618214Slinton |
59718214Slinton     ALIAS name
59818214Slinton {
5999683Slinton 	$$ = build(O_ALIAS, build(O_NAME, $2), nil);
6009683Slinton }
6019683Slinton |
60218214Slinton     ALIAS
6039683Slinton {
6049683Slinton 	$$ = build(O_ALIAS, nil, nil);
6059683Slinton }
6069683Slinton ;
60718214Slinton name_list:
60818214Slinton     name_list ',' name
60916926Ssam {
61018214Slinton 	$$ = $1;
61118214Slinton 	list_append(list_item($3), nil, $$);
61216926Ssam }
61318214Slinton |
61418214Slinton     name
61518214Slinton {
61618214Slinton 	$$ = list_alloc();
61718214Slinton 	list_append(list_item($1), nil, $$);
61818214Slinton }
61916926Ssam ;
6209683Slinton trace:
62118214Slinton     TRACE
6229683Slinton {
6239683Slinton 	$$ = O_TRACE;
6249683Slinton }
6259683Slinton |
62618214Slinton     TRACEI
6279683Slinton {
6289683Slinton 	$$ = O_TRACEI;
6299683Slinton }
6309683Slinton ;
6319683Slinton stop:
63218214Slinton     STOP
6339683Slinton {
6349683Slinton 	$$ = O_STOP;
6359683Slinton }
6369683Slinton |
63718214Slinton     STOPI
6389683Slinton {
6399683Slinton 	$$ = O_STOPI;
6409683Slinton }
6419683Slinton ;
6429683Slinton what:
6439683Slinton     exp
6449683Slinton {
6459683Slinton 	$$ = $1;
6469683Slinton }
6479683Slinton |
6489683Slinton     STRING ':' line_number
6499683Slinton {
6509683Slinton 	$$ = build(O_QLINE, build(O_SCON, $1), $3);
6519683Slinton }
6529683Slinton ;
6539683Slinton where:
65418214Slinton     IN exp
6559683Slinton {
65618214Slinton 	$$ = unrval($2);
6579683Slinton }
6589683Slinton |
6599683Slinton     AT line_number
6609683Slinton {
66118214Slinton 	$$ = build(O_QLINE, build(O_SCON, strdup(cursource)), $2);
6629683Slinton }
6639683Slinton |
6649683Slinton     AT STRING ':' line_number
6659683Slinton {
6669683Slinton 	$$ = build(O_QLINE, build(O_SCON, $2), $4);
6679683Slinton }
6689683Slinton ;
6699683Slinton filename:
6709683Slinton     NAME
6719683Slinton {
6729683Slinton 	$$ = ident($1);
6739683Slinton }
6749683Slinton ;
6759683Slinton opt_filename:
6769683Slinton     /* empty */
6779683Slinton {
6789683Slinton 	$$ = nil;
6799683Slinton }
6809683Slinton |
6819683Slinton     filename
6829683Slinton {
6839683Slinton 	$$ = $1;
6849683Slinton }
6859683Slinton ;
68612482Slinton opt_exp_list:
68712482Slinton     exp_list
6889683Slinton {
68912482Slinton 	$$ = $1;
6909683Slinton }
6919683Slinton |
69212482Slinton     /* empty */
6939683Slinton {
69412482Slinton 	$$ = nil;
6959683Slinton }
6969683Slinton ;
6979683Slinton list_command:
69818214Slinton     LIST
6999683Slinton {
7009683Slinton 	$$ = build(O_LIST,
7019683Slinton 	    build(O_LCON, (long) cursrcline),
70233312Sdonn 	    build(O_LCON, (long) cursrcline + srcwindowlen() - 1)
7039683Slinton 	);
7049683Slinton }
7059683Slinton |
70618214Slinton     LIST line_number
7079683Slinton {
7089683Slinton 	$$ = build(O_LIST, $2, $2);
7099683Slinton }
7109683Slinton |
71118214Slinton     LIST line_number ',' line_number
7129683Slinton {
7139683Slinton 	$$ = build(O_LIST, $2, $4);
7149683Slinton }
7159683Slinton |
71618214Slinton     LIST opt_qual_symbol
7179683Slinton {
71833312Sdonn 	$$ = build(O_LIST, $2, $2);
7199683Slinton }
7209683Slinton ;
72118214Slinton integer_list:
72218214Slinton     INT
72318214Slinton {
72418214Slinton 	$$ = build(O_LCON, $1);
72518214Slinton }
72618214Slinton |
72718214Slinton     INT integer_list
72818214Slinton {
72918214Slinton 	$$ = build(O_COMMA, build(O_LCON, $1), $2);
73018214Slinton }
73116607Ssam ;
7329683Slinton line_number:
7339683Slinton     INT
7349683Slinton {
7359683Slinton 	$$ = build(O_LCON, $1);
7369683Slinton }
7379683Slinton |
7389683Slinton     '$'
7399683Slinton {
7409683Slinton 	$$ = build(O_LCON, (long) LASTLINE);
7419683Slinton }
7429683Slinton ;
7439683Slinton examine:
7449683Slinton     address '/' count mode
7459683Slinton {
7469683Slinton 	$$ = build(O_EXAMINE, $4, $1, nil, $3);
7479683Slinton }
7489683Slinton |
7499683Slinton     address ',' address '/' mode
7509683Slinton {
7519683Slinton 	$$ = build(O_EXAMINE, $5, $1, $3, 0);
7529683Slinton }
7539683Slinton |
75411173Slinton     address '=' mode
75511173Slinton {
75611173Slinton 	$$ = build(O_EXAMINE, $3, $1, nil, 0);
75711173Slinton }
7589683Slinton ;
7599683Slinton address:
76018214Slinton     INT
7619683Slinton {
7629683Slinton 	$$ = build(O_LCON, $1);
7639683Slinton }
7649683Slinton |
76518214Slinton     '.'
7669683Slinton {
76718214Slinton 	$$ = build(O_LCON, (long) prtaddr);
7689683Slinton }
7699683Slinton |
77018214Slinton     '&' term
77118214Slinton {
77218214Slinton 	$$ = amper($2);
77318214Slinton }
77418214Slinton |
7759683Slinton     address '+' address
7769683Slinton {
7779683Slinton 	$$ = build(O_ADD, $1, $3);
7789683Slinton }
7799683Slinton |
7809683Slinton     address '-' address
7819683Slinton {
7829683Slinton 	$$ = build(O_SUB, $1, $3);
7839683Slinton }
7849683Slinton |
7859683Slinton     address '*' address
7869683Slinton {
7879683Slinton 	$$ = build(O_MUL, $1, $3);
7889683Slinton }
7899683Slinton |
79018214Slinton     '*' address %prec UNARYSIGN
7919683Slinton {
79218214Slinton 	$$ = build(O_INDIR, $2);
7939683Slinton }
7949683Slinton |
79518214Slinton     '-' address %prec UNARYSIGN
7969683Slinton {
79718214Slinton 	$$ = build(O_NEG, $2);
7989683Slinton }
79918214Slinton |
80018214Slinton     '(' exp ')'
80118214Slinton {
80218214Slinton 	$$ = $2;
80318214Slinton }
8049683Slinton ;
80518214Slinton term:
80618214Slinton     symbol
80718214Slinton {
80818214Slinton 	$$ = $1;
80918214Slinton }
81018214Slinton |
81118214Slinton     term '.' name
81218214Slinton {
81318214Slinton 	$$ = unrval(dot($1, $3));
81418214Slinton }
81518214Slinton |
81618214Slinton     term ARROW name
81718214Slinton {
81818214Slinton 	$$ = unrval(dot($1, $3));
81918214Slinton }
82018214Slinton |
82118214Slinton     term '[' exp_list ']'
82218214Slinton {
82318214Slinton 	$$ = unrval(subscript($1, $3));
82418214Slinton }
82518214Slinton ;
8269683Slinton count:
8279683Slinton     /* empty */
8289683Slinton {
8299683Slinton 	$$ = 1;
8309683Slinton }
8319683Slinton |
8329683Slinton     INT
8339683Slinton {
8349683Slinton 	$$ = $1;
8359683Slinton }
8369683Slinton ;
8379683Slinton mode:
8389683Slinton     name
8399683Slinton {
8409683Slinton 	$$ = ident($1);
8419683Slinton 	curformat = $$;
8429683Slinton }
8439683Slinton |
8449683Slinton     /* empty */
8459683Slinton {
8469683Slinton 	$$ = curformat;
8479683Slinton }
8489683Slinton ;
8499683Slinton opt_cond:
8509683Slinton     /* empty */
8519683Slinton {
8529683Slinton 	$$ = nil;
8539683Slinton }
8549683Slinton |
8559683Slinton     IF boolean_exp
8569683Slinton {
8579683Slinton 	$$ = $2;
8589683Slinton }
8599683Slinton ;
8609683Slinton exp_list:
8619683Slinton     exp
8629683Slinton {
8639683Slinton 	$$ = build(O_COMMA, $1, nil);
8649683Slinton }
8659683Slinton |
8669683Slinton     exp ',' exp_list
8679683Slinton {
8689683Slinton 	$$ = build(O_COMMA, $1, $3);
8699683Slinton }
8709683Slinton ;
8719683Slinton exp:
87218214Slinton     symbol
8739683Slinton {
8749683Slinton 	$$ = build(O_RVAL, $1);
8759683Slinton }
8769683Slinton |
87718214Slinton     exp '[' exp_list ']'
8789683Slinton {
87918214Slinton 	$$ = subscript(unrval($1), $3);
8809683Slinton }
8819683Slinton |
88218214Slinton     exp '.' name
88318214Slinton {
88418214Slinton 	$$ = dot($1, $3);
88518214Slinton }
88618214Slinton |
88718214Slinton     exp ARROW name
88818214Slinton {
88918214Slinton 	$$ = dot($1, $3);
89018214Slinton }
89118214Slinton |
89218214Slinton     '*' exp %prec UNARYSIGN
89318214Slinton {
89418214Slinton 	$$ = build(O_INDIR, $2);
89518214Slinton }
89618214Slinton |
89718214Slinton     exp '^' %prec UNARYSIGN
89818214Slinton {
89918214Slinton 	$$ = build(O_INDIR, $1);
90018214Slinton }
90118214Slinton |
90216607Ssam     exp '\\' opt_qual_symbol
90311173Slinton {
90411173Slinton 	$$ = build(O_TYPERENAME, $1, $3);
90511173Slinton }
90611173Slinton |
90718214Slinton     exp '\\' '&' opt_qual_symbol %prec '\\'
90818214Slinton {
90918214Slinton 	$$ = renameptr($1, $4);
91018214Slinton }
91118214Slinton |
91218214Slinton     exp '(' opt_exp_list ')'
91318214Slinton {
91418214Slinton 	$$ = build(O_CALL, unrval($1), $3);
91518214Slinton }
91618214Slinton |
91718214Slinton     constant
91818214Slinton {
91918214Slinton 	$$ = $1;
92018214Slinton }
92118214Slinton |
9229683Slinton     '+' exp %prec UNARYSIGN
9239683Slinton {
9249683Slinton 	$$ = $2;
9259683Slinton }
9269683Slinton |
9279683Slinton     '-' exp %prec UNARYSIGN
9289683Slinton {
9299683Slinton 	$$ = build(O_NEG, $2);
9309683Slinton }
9319683Slinton |
9329683Slinton     '&' exp %prec UNARYSIGN
9339683Slinton {
9349683Slinton 	$$ = amper($2);
9359683Slinton }
9369683Slinton |
9379683Slinton     exp '+' exp
9389683Slinton {
9399683Slinton 	$$ = build(O_ADD, $1, $3);
9409683Slinton }
9419683Slinton |
9429683Slinton     exp '-' exp
9439683Slinton {
9449683Slinton 	$$ = build(O_SUB, $1, $3);
9459683Slinton }
9469683Slinton |
9479683Slinton     exp '*' exp
9489683Slinton {
9499683Slinton 	$$ = build(O_MUL, $1, $3);
9509683Slinton }
9519683Slinton |
9529683Slinton     exp '/' exp
9539683Slinton {
9549683Slinton 	$$ = build(O_DIVF, $1, $3);
9559683Slinton }
9569683Slinton |
9579683Slinton     exp DIV exp
9589683Slinton {
9599683Slinton 	$$ = build(O_DIV, $1, $3);
9609683Slinton }
9619683Slinton |
9629683Slinton     exp MOD exp
9639683Slinton {
9649683Slinton 	$$ = build(O_MOD, $1, $3);
9659683Slinton }
9669683Slinton |
9679683Slinton     exp AND exp
9689683Slinton {
9699683Slinton 	$$ = build(O_AND, $1, $3);
9709683Slinton }
9719683Slinton |
9729683Slinton     exp OR exp
9739683Slinton {
9749683Slinton 	$$ = build(O_OR, $1, $3);
9759683Slinton }
9769683Slinton |
9779683Slinton     exp '<' exp
9789683Slinton {
9799683Slinton 	$$ = build(O_LT, $1, $3);
9809683Slinton }
9819683Slinton |
9829683Slinton     exp '<' '=' exp
9839683Slinton {
9849683Slinton 	$$ = build(O_LE, $1, $4);
9859683Slinton }
9869683Slinton |
9879683Slinton     exp '>' exp
9889683Slinton {
9899683Slinton 	$$ = build(O_GT, $1, $3);
9909683Slinton }
9919683Slinton |
9929683Slinton     exp '>' '=' exp
9939683Slinton {
9949683Slinton 	$$ = build(O_GE, $1, $4);
9959683Slinton }
9969683Slinton |
9979683Slinton     exp '=' exp
9989683Slinton {
9999683Slinton 	$$ = build(O_EQ, $1, $3);
10009683Slinton }
10019683Slinton |
10029683Slinton     exp '=' '=' exp
10039683Slinton {
10049683Slinton 	$$ = build(O_EQ, $1, $4);
10059683Slinton }
10069683Slinton |
10079683Slinton     exp '<' '>' exp
10089683Slinton {
10099683Slinton 	$$ = build(O_NE, $1, $4);
10109683Slinton }
10119683Slinton |
10129683Slinton     exp '!' '=' exp
10139683Slinton {
10149683Slinton 	$$ = build(O_NE, $1, $4);
10159683Slinton }
10169683Slinton |
10179683Slinton     '(' exp ')'
10189683Slinton {
10199683Slinton 	$$ = $2;
10209683Slinton }
10219683Slinton ;
10229683Slinton boolean_exp:
10239683Slinton     exp
10249683Slinton {
10259683Slinton 	chkboolean($1);
10269683Slinton 	$$ = $1;
10279683Slinton }
10289683Slinton ;
10299683Slinton constant:
10309683Slinton     INT
10319683Slinton {
10329683Slinton 	$$ = build(O_LCON, $1);
10339683Slinton }
10349683Slinton |
103518214Slinton     CHAR
103618214Slinton {
103718214Slinton 	$$ = build(O_CCON, $1);
103818214Slinton }
103918214Slinton |
10409683Slinton     REAL
10419683Slinton {
10429683Slinton 	$$ = build(O_FCON, $1);
10439683Slinton }
10449683Slinton |
10459683Slinton     STRING
10469683Slinton {
10479683Slinton 	$$ = build(O_SCON, $1);
10489683Slinton }
10499683Slinton ;
105016607Ssam opt_qual_symbol:
105116607Ssam     symbol
105216607Ssam {
105316607Ssam 	$$ = $1;
105416607Ssam }
105516607Ssam |
105616607Ssam     opt_qual_symbol '.' name
105716607Ssam {
105816607Ssam 	$$ = dot($1, $3);
105916607Ssam }
106016607Ssam ;
10619683Slinton symbol:
10629683Slinton     name
10639683Slinton {
106418214Slinton 	$$ = findvar($1);
106518214Slinton 	if ($$ == nil) {
106618214Slinton 	    $$ = build(O_SYM, which($1));
106718214Slinton 	}
10689683Slinton }
106916607Ssam |
107016607Ssam     '.' name
107116607Ssam {
107216607Ssam 	$$ = dot(build(O_SYM, program), $2);
107316607Ssam }
10749683Slinton ;
10759683Slinton name:
10769683Slinton     NAME
10779683Slinton {
10789683Slinton 	$$ = $1;
10799683Slinton }
10809683Slinton |
10819683Slinton     keyword
10829683Slinton {
10839683Slinton 	$$ = $1;
10849683Slinton }
10859683Slinton keyword:
108612536Scsvaf     ALIAS | AND | ASSIGN | AT | CALL | CATCH | CONT | DEBUG | DELETE | DIV |
108716607Ssam     DOWN | DUMP | EDIT | FILE | FUNC | GRIPE | HELP | IGNORE | IN | LIST |
108816607Ssam     MOD | NEXT | NEXTI | NIL | NOT | OR | PRINT | PSYM | QUIT |
108918214Slinton     RERUN | RETURN | RUN | SET | SH | SKIP | SOURCE | STATUS | STEP | STEPI |
109018214Slinton     STOP | STOPI | TRACE | TRACEI | UNALIAS | UNSET | UP | USE |
109118214Slinton     WHATIS | WHEN | WHERE | WHEREIS | WHICH
10929683Slinton ;
1093