xref: /csrg-svn/old/dbx/commands.y (revision 21631)
1*21631Sdist /*
2*21631Sdist  * Copyright (c) 1980 Regents of the University of California.
3*21631Sdist  * All rights reserved.  The Berkeley software License Agreement
4*21631Sdist  * specifies the terms and conditions for redistribution.
5*21631Sdist  *
6*21631Sdist  *	@(#)commands.y	5.1 (Berkeley) 05/31/85
7*21631Sdist  */
8*21631Sdist 
99683Slinton %{
1018214Slinton 
119683Slinton /* Copyright (c) 1982 Regents of the University of California */
129683Slinton 
13*21631Sdist static	char sccsid[] = "@(#)commands.y	5.1 (Berkeley) 05/31/85";
149683Slinton 
1518214Slinton static char rcsid[] = "$Header: commands.y,v 1.5 84/12/26 10:38:41 linton Exp $";
1618214Slinton 
179683Slinton /*
189683Slinton  * Yacc grammar for debugger commands.
199683Slinton  */
209683Slinton 
219683Slinton #include "defs.h"
229683Slinton #include "symbols.h"
239683Slinton #include "operators.h"
249683Slinton #include "tree.h"
259683Slinton #include "process.h"
269683Slinton #include "source.h"
279683Slinton #include "scanner.h"
2818214Slinton #include "keywords.h"
299683Slinton #include "names.h"
3014673Slinton #include "lists.h"
319683Slinton 
329683Slinton private String curformat = "X";
339683Slinton 
349683Slinton %}
359683Slinton 
369683Slinton %term
3716607Ssam     ALIAS AND ASSIGN AT CALL CATCH CONT DEBUG DELETE DIV DOWN DUMP
389683Slinton     EDIT FILE FUNC GRIPE HELP IF IGNORE IN LIST MOD NEXT NEXTI NIL NOT OR
3918214Slinton     PRINT PSYM QUIT RERUN RETURN RUN SET SH SKIP SOURCE STATUS STEP STEPI
4018214Slinton     STOP STOPI TRACE TRACEI UNALIAS UNSET UP USE
4118214Slinton     WHATIS WHEN WHERE WHEREIS WHICH
429683Slinton 
4318214Slinton %term INT CHAR REAL NAME STRING
4418214Slinton %term ARROW
459683Slinton 
469683Slinton %right INT
479683Slinton %binary REDIRECT
489683Slinton %binary '<' '=' '>' '!' IN
499683Slinton %left '+' '-' OR
509683Slinton %left UNARYSIGN
519683Slinton %left '*' '/' DIV MOD AND
5218214Slinton %left '\\'
539683Slinton %left NOT '(' '[' '.' '^' ARROW
549683Slinton 
559683Slinton %union {
569683Slinton     Name y_name;
579683Slinton     Symbol y_sym;
589683Slinton     Node y_node;
599683Slinton     Integer y_int;
609683Slinton     Operator y_op;
619683Slinton     long y_long;
6218214Slinton     char y_char;
639683Slinton     double y_real;
649683Slinton     String y_string;
659683Slinton     Boolean y_bool;
669683Slinton     Cmdlist y_cmdlist;
6714673Slinton     List y_list;
689683Slinton };
699683Slinton 
709683Slinton %type <y_op>	    trace stop
7118214Slinton %type <y_long>	    INT count signal
7218214Slinton %type <y_char>	    CHAR
739683Slinton %type <y_real>	    REAL
749683Slinton %type <y_string>    STRING redirectout filename opt_filename mode
7516607Ssam %type <y_name>	    ALIAS AND ASSIGN AT CALL CATCH CONT
7616607Ssam %type <y_name>	    DEBUG DELETE DIV DOWN DUMP
779683Slinton %type <y_name>	    EDIT FILE FUNC GRIPE HELP IF IGNORE IN LIST MOD
789683Slinton %type <y_name>	    NEXT NEXTI NIL NOT OR
7918214Slinton %type <y_name>	    PRINT PSYM QUIT RERUN RETURN RUN SET SH SKIP SOURCE STATUS
8016607Ssam %type <y_name>	    STEP STEPI STOP STOPI TRACE TRACEI
8118214Slinton %type <y_name>	    UNALIAS UNSET UP USE WHATIS WHEN WHERE WHEREIS WHICH
829683Slinton %type <y_name>	    name NAME keyword
8316607Ssam %type <y_node>      opt_qual_symbol symbol
849683Slinton %type <y_node>	    command rcommand cmd step what where examine
8512482Slinton %type <y_node>	    event opt_exp_list opt_cond
869683Slinton %type <y_node>	    exp_list exp term boolean_exp constant address
8716934Ssam %type <y_node>	    integer_list alias_command list_command line_number
889683Slinton %type <y_cmdlist>   actions
8918214Slinton %type <y_list>      sourcepath name_list
909683Slinton 
919683Slinton %%
929683Slinton 
939683Slinton input:
949683Slinton     input command_nl
959683Slinton |
969683Slinton     /* empty */
979683Slinton ;
989683Slinton command_nl:
999683Slinton     command_line '\n'
10018214Slinton |
10118214Slinton     command_line ';'
10216926Ssam {
10318214Slinton 	chkalias = true;
10416926Ssam }
1059683Slinton |
1069683Slinton     '\n'
1079683Slinton ;
1089683Slinton 
1099683Slinton command_line:
1109683Slinton     command
1119683Slinton {
1129683Slinton 	if ($1 != nil) {
11318214Slinton 	    topeval($1);
1149683Slinton 	}
1159683Slinton }
1169683Slinton |
1179683Slinton     rcommand redirectout
1189683Slinton {
1199683Slinton 	if ($1 != nil) {
1209683Slinton 	    if ($2 != nil) {
1219683Slinton 		setout($2);
12218214Slinton 		topeval($1);
1239683Slinton 		unsetout();
1249683Slinton 	    } else {
12518214Slinton 		topeval($1);
1269683Slinton 	    }
1279683Slinton 	}
1289683Slinton }
1299683Slinton ;
1309683Slinton redirectout:
1319683Slinton     '>' shellmode NAME
1329683Slinton {
1339683Slinton 	$$ = ident($3);
1349683Slinton }
1359683Slinton |
1369683Slinton     /* empty */
1379683Slinton {
1389683Slinton 	$$ = nil;
1399683Slinton }
1409683Slinton ;
1419683Slinton 
1429683Slinton /*
1439683Slinton  * Non-redirectable commands.
1449683Slinton  */
1459683Slinton command:
1469683Slinton     alias_command
1479683Slinton {
1489683Slinton 	$$ = $1;
1499683Slinton }
1509683Slinton |
15118214Slinton     ASSIGN exp '=' exp
1529683Slinton {
15318214Slinton 	$$ = build(O_ASSIGN, unrval($2), $4);
1549683Slinton }
1559683Slinton |
15618214Slinton     CATCH signal
1579683Slinton {
15818214Slinton 	$$ = build(O_CATCH, $2);
1599683Slinton }
1609683Slinton |
16118214Slinton     CATCH
16216926Ssam {
16318214Slinton 	$$ = build(O_CATCH, 0);
16416926Ssam }
16516926Ssam |
1669683Slinton     CONT
1679683Slinton {
16814673Slinton 	$$ = build(O_CONT, (long) DEFSIG);
1699683Slinton }
1709683Slinton |
17118214Slinton     CONT signal
17211870Slinton {
17311870Slinton 	$$ = build(O_CONT, $2);
17411870Slinton }
17511870Slinton |
17616934Ssam     DELETE integer_list
1779683Slinton {
1789683Slinton 	$$ = build(O_DELETE, $2);
1799683Slinton }
1809683Slinton |
18116607Ssam     DOWN
18216607Ssam {
18316607Ssam 	$$ = build(O_DOWN, build(O_LCON, (long) 1));
18416607Ssam }
18516607Ssam |
18616607Ssam     DOWN INT
18716607Ssam {
18816607Ssam 	$$ = build(O_DOWN, build(O_LCON, (long) $2));
18916607Ssam }
19016607Ssam |
1919683Slinton     EDIT shellmode opt_filename
1929683Slinton {
1939683Slinton 	$$ = build(O_EDIT, $3);
1949683Slinton }
1959683Slinton |
1969683Slinton     FILE shellmode opt_filename
1979683Slinton {
1989683Slinton 	$$ = build(O_CHFILE, $3);
1999683Slinton }
2009683Slinton |
2019683Slinton     FUNC
2029683Slinton {
2039683Slinton 	$$ = build(O_FUNC, nil);
2049683Slinton }
2059683Slinton |
20618214Slinton     FUNC opt_qual_symbol
2079683Slinton {
20818214Slinton 	$$ = build(O_FUNC, $2);
2099683Slinton }
2109683Slinton |
2119683Slinton     GRIPE
2129683Slinton {
2139683Slinton 	$$ = build(O_GRIPE);
2149683Slinton }
2159683Slinton |
2169683Slinton     HELP
2179683Slinton {
2189683Slinton 	$$ = build(O_HELP);
2199683Slinton }
2209683Slinton |
22118214Slinton     IGNORE signal
2229683Slinton {
22318214Slinton 	$$ = build(O_IGNORE, $2);
2249683Slinton }
2259683Slinton |
22618214Slinton     IGNORE
22716926Ssam {
22818214Slinton 	$$ = build(O_IGNORE, 0);
22916926Ssam }
23016926Ssam |
2319683Slinton     list_command
2329683Slinton {
2339683Slinton 	$$ = $1;
2349683Slinton }
2359683Slinton |
23618214Slinton     PSYM exp
2379683Slinton {
23818214Slinton 	$$ = build(O_PSYM, unrval($2));
2399683Slinton }
2409683Slinton |
2419683Slinton     QUIT
2429683Slinton {
2439683Slinton 	if (not popinput()) {
2449683Slinton 	    quit(0);
2459683Slinton 	} else {
2469683Slinton 	    $$ = nil;
2479683Slinton 	}
2489683Slinton }
2499683Slinton |
25016607Ssam     RETURN
25116607Ssam {
25216607Ssam 	$$ = build(O_RETURN, nil);
25316607Ssam }
25416607Ssam |
25518214Slinton     RETURN opt_qual_symbol
25616607Ssam {
25718214Slinton 	$$ = build(O_RETURN, $2);
25816607Ssam }
25916607Ssam |
2609683Slinton     runcommand
2619683Slinton {
2629683Slinton 	run();
2639683Slinton 	/* NOTREACHED */
2649683Slinton }
2659683Slinton |
26618214Slinton     SET name '=' exp
26718214Slinton {
26818214Slinton 	$$ = build(O_SET, build(O_NAME, $2), $4);
26918214Slinton }
27018214Slinton |
27118214Slinton     SET name
27218214Slinton {
27318214Slinton 	$$ = build(O_SET, build(O_NAME, $2), nil);
27418214Slinton }
27518214Slinton |
27618214Slinton     SET
27718214Slinton {
27818214Slinton 	$$ = build(O_SET, nil, nil);
27918214Slinton }
28018214Slinton |
2819683Slinton     SH
2829683Slinton {
2839683Slinton 	shellline();
2849683Slinton 	$$ = nil;
2859683Slinton }
2869683Slinton |
2879683Slinton     SOURCE shellmode filename
2889683Slinton {
2899683Slinton 	$$ = build(O_SOURCE, $3);
2909683Slinton }
2919683Slinton |
2929683Slinton     step
2939683Slinton {
2949683Slinton 	$$ = $1;
2959683Slinton }
2969683Slinton |
2979683Slinton     stop where opt_cond
2989683Slinton {
2999683Slinton 	$$ = build($1, nil, $2, $3);
3009683Slinton }
3019683Slinton |
3029683Slinton     stop what opt_cond
3039683Slinton {
3049683Slinton 	$$ = build($1, $2, nil, $3);
3059683Slinton }
3069683Slinton |
3079683Slinton     stop IF boolean_exp
3089683Slinton {
3099683Slinton 	$$ = build($1, nil, nil, $3);
3109683Slinton }
3119683Slinton |
3129683Slinton     trace what where opt_cond
3139683Slinton {
3149683Slinton 	$$ = build($1, $2, $3, $4);
3159683Slinton }
3169683Slinton |
3179683Slinton     trace where opt_cond
3189683Slinton {
3199683Slinton 	$$ = build($1, nil, $2, $3);
3209683Slinton }
3219683Slinton |
3229683Slinton     trace what opt_cond
3239683Slinton {
3249683Slinton 	$$ = build($1, $2, nil, $3);
3259683Slinton }
3269683Slinton |
3279683Slinton     trace opt_cond
3289683Slinton {
3299683Slinton 	$$ = build($1, nil, nil, $2);
3309683Slinton }
3319683Slinton |
33218214Slinton     UNALIAS name
33318214Slinton {
33418214Slinton 	$$ = build(O_UNALIAS, build(O_NAME, $2));
33518214Slinton }
33618214Slinton |
33718214Slinton     UNSET name
33818214Slinton {
33918214Slinton 	$$ = build(O_UNSET, build(O_NAME, $2));
34018214Slinton }
34118214Slinton |
34216607Ssam     UP
3439683Slinton {
34416607Ssam 	$$ = build(O_UP, build(O_LCON, (long) 1));
3459683Slinton }
3469683Slinton |
34716607Ssam     UP INT
3489683Slinton {
34916607Ssam 	$$ = build(O_UP, build(O_LCON, (long) $2));
3509683Slinton }
3519683Slinton |
3529683Slinton     USE shellmode sourcepath
3539683Slinton {
35414673Slinton 	String dir;
35514673Slinton 
3569683Slinton 	$$ = nil;
35714673Slinton 	if (list_size($3) == 0) {
35814673Slinton 	    foreach (String, dir, sourcepath)
35914673Slinton 		printf("%s ", dir);
36014673Slinton 	    endfor
36114673Slinton 	    printf("\n");
36214673Slinton 	} else {
36314673Slinton 	    foreach (String, dir, sourcepath)
36414673Slinton 		list_delete(list_curitem(sourcepath), sourcepath);
36514673Slinton 	    endfor
36614673Slinton 	    sourcepath = $3;
3679683Slinton 	}
3689683Slinton }
36916604Ssam |
37018214Slinton     WHATIS opt_qual_symbol
37116604Ssam {
37218214Slinton 	$$ = build(O_WHATIS, $2);
37316604Ssam }
37416607Ssam |
37518214Slinton     WHEN event '{' actions '}'
37616604Ssam {
37718214Slinton 	$$ = build(O_ADDEVENT, $2, $4);
37816604Ssam }
37916604Ssam |
38018214Slinton     WHEREIS name
38116604Ssam {
38218214Slinton 	$$ = build(O_WHEREIS, build(O_SYM, lookup($2)));
38316604Ssam }
38416607Ssam |
38518214Slinton     WHICH symbol
38616604Ssam {
38718214Slinton 	$$ = build(O_WHICH, $2);
38816604Ssam }
38916625Ssam |
39018214Slinton     '/'
39116625Ssam {
39218214Slinton 	$$ = build(O_SEARCH,
39318214Slinton 	    build(O_LCON, (long) '/'),
39418214Slinton 	    build(O_SCON, strdup(scanner_linebuf))
39518214Slinton 	);
39618214Slinton 	gobble();
39718214Slinton 	insertinput("\n");
39816625Ssam }
39916625Ssam |
40018214Slinton     '?'
40116625Ssam {
40218214Slinton 	$$ = build(O_SEARCH,
40318214Slinton 	    build(O_LCON, (long) '?'),
40418214Slinton 	    build(O_SCON, strdup(scanner_linebuf))
40518214Slinton 	);
40618214Slinton 	gobble();
40718214Slinton 	insertinput("\n");
40816625Ssam }
40916625Ssam ;
41016926Ssam signal:
41116926Ssam     INT
41216926Ssam {
41318214Slinton 	$$ = $1;
41416926Ssam }
41516926Ssam |
41618214Slinton     name
41716926Ssam {
41818214Slinton 	$$ = siglookup(ident($1));
41916926Ssam }
42016926Ssam ;
4219683Slinton runcommand:
42216607Ssam     run arglist
42312482Slinton |
42412524Slinton     run
4259683Slinton ;
4269683Slinton run:
42712524Slinton     RUN shellmode
4289683Slinton {
42916607Ssam 	arginit();
4309683Slinton 	fflush(stdout);
4319683Slinton }
43216607Ssam |
43316607Ssam     RERUN shellmode
43416607Ssam {
43516607Ssam 	fflush(stdout);
43616607Ssam }
4379683Slinton ;
4389683Slinton arglist:
4399683Slinton     arglist arg
4409683Slinton |
44112482Slinton     arg
4429683Slinton ;
4439683Slinton arg:
44418214Slinton     NAME
4459683Slinton {
4469683Slinton 	newarg(ident($1));
4479683Slinton }
4489683Slinton |
44918214Slinton     STRING
45016607Ssam {
45116607Ssam 	newarg($1);
45216607Ssam }
45316607Ssam |
4549683Slinton     '<' NAME
4559683Slinton {
4569683Slinton 	inarg(ident($2));
4579683Slinton }
4589683Slinton |
4599683Slinton     '>' NAME
4609683Slinton {
4619683Slinton 	outarg(ident($2));
4629683Slinton }
4639683Slinton ;
4649683Slinton step:
46518214Slinton     STEP
4669683Slinton {
4679683Slinton 	$$ = build(O_STEP, true, false);
4689683Slinton }
4699683Slinton |
47018214Slinton     STEPI
4719683Slinton {
4729683Slinton 	$$ = build(O_STEP, false, false);
4739683Slinton }
4749683Slinton |
47518214Slinton     NEXT
4769683Slinton {
4779683Slinton 	$$ = build(O_STEP, true, true);
4789683Slinton }
4799683Slinton |
48018214Slinton     NEXTI
4819683Slinton {
4829683Slinton 	$$ = build(O_STEP, false, true);
4839683Slinton }
4849683Slinton ;
4859683Slinton shellmode:
4869683Slinton     /* empty */
4879683Slinton {
4889683Slinton 	beginshellmode();
4899683Slinton }
4909683Slinton ;
4919683Slinton sourcepath:
4929683Slinton     sourcepath NAME
4939683Slinton {
49414673Slinton 	$$ = $1;
49514673Slinton 	list_append(list_item(ident($2)), nil, $$);
4969683Slinton }
4979683Slinton |
4989683Slinton     /* empty */
4999683Slinton {
50014673Slinton 	$$ = list_alloc();
5019683Slinton }
5029683Slinton ;
5039683Slinton event:
5049683Slinton     where
5059683Slinton |
5069683Slinton     exp
5079683Slinton ;
5089683Slinton actions:
5099683Slinton     actions cmd ';'
5109683Slinton {
5119683Slinton 	$$ = $1;
5129683Slinton 	cmdlist_append($2, $$);
5139683Slinton }
5149683Slinton |
5159683Slinton     cmd ';'
5169683Slinton {
5179683Slinton 	$$ = list_alloc();
5189683Slinton 	cmdlist_append($1, $$);
5199683Slinton }
5209683Slinton ;
5219683Slinton cmd:
5229683Slinton     command
5239683Slinton |
5249683Slinton     rcommand
5259683Slinton ;
5269683Slinton 
5279683Slinton /*
5289683Slinton  * Redirectable commands.
5299683Slinton  */
5309683Slinton rcommand:
53118214Slinton     PRINT exp_list
5329683Slinton {
53318214Slinton 	$$ = build(O_PRINT, $2);
5349683Slinton }
5359683Slinton |
5369683Slinton     WHERE
5379683Slinton {
5389683Slinton 	$$ = build(O_WHERE);
5399683Slinton }
5409683Slinton |
5419683Slinton     examine
5429683Slinton {
5439683Slinton 	$$ = $1;
5449683Slinton }
5459683Slinton |
54618214Slinton     CALL term '(' opt_exp_list ')'
5479683Slinton {
54818214Slinton 	$$ = build(O_CALLPROC, $2, $4);
5499683Slinton }
5509683Slinton |
55112536Scsvaf     DEBUG INT
55212536Scsvaf {
55312536Scsvaf  	$$ = build(O_DEBUG, $2);
55412536Scsvaf }
55512536Scsvaf |
55618214Slinton     DEBUG '-' INT
55718214Slinton {
55818214Slinton 	$$ = build(O_DEBUG, -$3);
55918214Slinton }
56018214Slinton |
56118214Slinton     DUMP opt_qual_symbol
56218214Slinton {
56318214Slinton 	$$ = build(O_DUMP, $2);
56418214Slinton }
56518214Slinton |
56618214Slinton     DUMP '.'
56718214Slinton {
56818214Slinton 	$$ = build(O_DUMP, nil);
56918214Slinton }
57018214Slinton |
5719683Slinton     DUMP
5729683Slinton {
57318214Slinton 	$$ = build(O_DUMP, build(O_SYM, curfunc));
5749683Slinton }
5759683Slinton |
5769683Slinton     STATUS
5779683Slinton {
5789683Slinton 	$$ = build(O_STATUS);
5799683Slinton }
5809683Slinton ;
5819683Slinton alias_command:
58218214Slinton     ALIAS name name
5839683Slinton {
58418214Slinton 	$$ = build(O_ALIAS, build(O_NAME, $2), build(O_NAME, $3));
5859683Slinton }
5869683Slinton |
58718214Slinton     ALIAS name STRING
5889683Slinton {
58918214Slinton 	$$ = build(O_ALIAS, build(O_NAME, $2), build(O_SCON, $3));
59018214Slinton }
59118214Slinton |
59218214Slinton     ALIAS name '(' name_list ')' STRING
59318214Slinton {
59418214Slinton 	$$ = build(O_ALIAS,
59518214Slinton 	    build(O_COMMA, build(O_NAME, $2), (Node) $4),
59618214Slinton 	    build(O_SCON, $6)
59718214Slinton 	);
59818214Slinton }
59918214Slinton |
60018214Slinton     ALIAS name
60118214Slinton {
6029683Slinton 	$$ = build(O_ALIAS, build(O_NAME, $2), nil);
6039683Slinton }
6049683Slinton |
60518214Slinton     ALIAS
6069683Slinton {
6079683Slinton 	$$ = build(O_ALIAS, nil, nil);
6089683Slinton }
6099683Slinton ;
61018214Slinton name_list:
61118214Slinton     name_list ',' name
61216926Ssam {
61318214Slinton 	$$ = $1;
61418214Slinton 	list_append(list_item($3), nil, $$);
61516926Ssam }
61618214Slinton |
61718214Slinton     name
61818214Slinton {
61918214Slinton 	$$ = list_alloc();
62018214Slinton 	list_append(list_item($1), nil, $$);
62118214Slinton }
62216926Ssam ;
6239683Slinton trace:
62418214Slinton     TRACE
6259683Slinton {
6269683Slinton 	$$ = O_TRACE;
6279683Slinton }
6289683Slinton |
62918214Slinton     TRACEI
6309683Slinton {
6319683Slinton 	$$ = O_TRACEI;
6329683Slinton }
6339683Slinton ;
6349683Slinton stop:
63518214Slinton     STOP
6369683Slinton {
6379683Slinton 	$$ = O_STOP;
6389683Slinton }
6399683Slinton |
64018214Slinton     STOPI
6419683Slinton {
6429683Slinton 	$$ = O_STOPI;
6439683Slinton }
6449683Slinton ;
6459683Slinton what:
6469683Slinton     exp
6479683Slinton {
6489683Slinton 	$$ = $1;
6499683Slinton }
6509683Slinton |
6519683Slinton     STRING ':' line_number
6529683Slinton {
6539683Slinton 	$$ = build(O_QLINE, build(O_SCON, $1), $3);
6549683Slinton }
6559683Slinton ;
6569683Slinton where:
65718214Slinton     IN exp
6589683Slinton {
65918214Slinton 	$$ = unrval($2);
6609683Slinton }
6619683Slinton |
6629683Slinton     AT line_number
6639683Slinton {
66418214Slinton 	$$ = build(O_QLINE, build(O_SCON, strdup(cursource)), $2);
6659683Slinton }
6669683Slinton |
6679683Slinton     AT STRING ':' line_number
6689683Slinton {
6699683Slinton 	$$ = build(O_QLINE, build(O_SCON, $2), $4);
6709683Slinton }
6719683Slinton ;
6729683Slinton filename:
6739683Slinton     NAME
6749683Slinton {
6759683Slinton 	$$ = ident($1);
6769683Slinton }
6779683Slinton ;
6789683Slinton opt_filename:
6799683Slinton     /* empty */
6809683Slinton {
6819683Slinton 	$$ = nil;
6829683Slinton }
6839683Slinton |
6849683Slinton     filename
6859683Slinton {
6869683Slinton 	$$ = $1;
6879683Slinton }
6889683Slinton ;
68912482Slinton opt_exp_list:
69012482Slinton     exp_list
6919683Slinton {
69212482Slinton 	$$ = $1;
6939683Slinton }
6949683Slinton |
69512482Slinton     /* empty */
6969683Slinton {
69712482Slinton 	$$ = nil;
6989683Slinton }
6999683Slinton ;
7009683Slinton list_command:
70118214Slinton     LIST
7029683Slinton {
7039683Slinton 	$$ = build(O_LIST,
7049683Slinton 	    build(O_LCON, (long) cursrcline),
7059683Slinton 	    build(O_LCON, (long) cursrcline + 9)
7069683Slinton 	);
7079683Slinton }
7089683Slinton |
70918214Slinton     LIST line_number
7109683Slinton {
7119683Slinton 	$$ = build(O_LIST, $2, $2);
7129683Slinton }
7139683Slinton |
71418214Slinton     LIST line_number ',' line_number
7159683Slinton {
7169683Slinton 	$$ = build(O_LIST, $2, $4);
7179683Slinton }
7189683Slinton |
71918214Slinton     LIST opt_qual_symbol
7209683Slinton {
72118214Slinton 	$$ = build(O_LIST, $2);
7229683Slinton }
7239683Slinton ;
72418214Slinton integer_list:
72518214Slinton     INT
72618214Slinton {
72718214Slinton 	$$ = build(O_LCON, $1);
72818214Slinton }
72918214Slinton |
73018214Slinton     INT integer_list
73118214Slinton {
73218214Slinton 	$$ = build(O_COMMA, build(O_LCON, $1), $2);
73318214Slinton }
73416607Ssam ;
7359683Slinton line_number:
7369683Slinton     INT
7379683Slinton {
7389683Slinton 	$$ = build(O_LCON, $1);
7399683Slinton }
7409683Slinton |
7419683Slinton     '$'
7429683Slinton {
7439683Slinton 	$$ = build(O_LCON, (long) LASTLINE);
7449683Slinton }
7459683Slinton ;
7469683Slinton examine:
7479683Slinton     address '/' count mode
7489683Slinton {
7499683Slinton 	$$ = build(O_EXAMINE, $4, $1, nil, $3);
7509683Slinton }
7519683Slinton |
7529683Slinton     address ',' address '/' mode
7539683Slinton {
7549683Slinton 	$$ = build(O_EXAMINE, $5, $1, $3, 0);
7559683Slinton }
7569683Slinton |
75711173Slinton     address '=' mode
75811173Slinton {
75911173Slinton 	$$ = build(O_EXAMINE, $3, $1, nil, 0);
76011173Slinton }
7619683Slinton ;
7629683Slinton address:
76318214Slinton     INT
7649683Slinton {
7659683Slinton 	$$ = build(O_LCON, $1);
7669683Slinton }
7679683Slinton |
76818214Slinton     '.'
7699683Slinton {
77018214Slinton 	$$ = build(O_LCON, (long) prtaddr);
7719683Slinton }
7729683Slinton |
77318214Slinton     '&' term
77418214Slinton {
77518214Slinton 	$$ = amper($2);
77618214Slinton }
77718214Slinton |
7789683Slinton     address '+' address
7799683Slinton {
7809683Slinton 	$$ = build(O_ADD, $1, $3);
7819683Slinton }
7829683Slinton |
7839683Slinton     address '-' address
7849683Slinton {
7859683Slinton 	$$ = build(O_SUB, $1, $3);
7869683Slinton }
7879683Slinton |
7889683Slinton     address '*' address
7899683Slinton {
7909683Slinton 	$$ = build(O_MUL, $1, $3);
7919683Slinton }
7929683Slinton |
79318214Slinton     '*' address %prec UNARYSIGN
7949683Slinton {
79518214Slinton 	$$ = build(O_INDIR, $2);
7969683Slinton }
7979683Slinton |
79818214Slinton     '-' address %prec UNARYSIGN
7999683Slinton {
80018214Slinton 	$$ = build(O_NEG, $2);
8019683Slinton }
80218214Slinton |
80318214Slinton     '(' exp ')'
80418214Slinton {
80518214Slinton 	$$ = $2;
80618214Slinton }
8079683Slinton ;
80818214Slinton term:
80918214Slinton     symbol
81018214Slinton {
81118214Slinton 	$$ = $1;
81218214Slinton }
81318214Slinton |
81418214Slinton     term '.' name
81518214Slinton {
81618214Slinton 	$$ = unrval(dot($1, $3));
81718214Slinton }
81818214Slinton |
81918214Slinton     term ARROW name
82018214Slinton {
82118214Slinton 	$$ = unrval(dot($1, $3));
82218214Slinton }
82318214Slinton |
82418214Slinton     term '[' exp_list ']'
82518214Slinton {
82618214Slinton 	$$ = unrval(subscript($1, $3));
82718214Slinton }
82818214Slinton ;
8299683Slinton count:
8309683Slinton     /* empty */
8319683Slinton {
8329683Slinton 	$$ = 1;
8339683Slinton }
8349683Slinton |
8359683Slinton     INT
8369683Slinton {
8379683Slinton 	$$ = $1;
8389683Slinton }
8399683Slinton ;
8409683Slinton mode:
8419683Slinton     name
8429683Slinton {
8439683Slinton 	$$ = ident($1);
8449683Slinton 	curformat = $$;
8459683Slinton }
8469683Slinton |
8479683Slinton     /* empty */
8489683Slinton {
8499683Slinton 	$$ = curformat;
8509683Slinton }
8519683Slinton ;
8529683Slinton opt_cond:
8539683Slinton     /* empty */
8549683Slinton {
8559683Slinton 	$$ = nil;
8569683Slinton }
8579683Slinton |
8589683Slinton     IF boolean_exp
8599683Slinton {
8609683Slinton 	$$ = $2;
8619683Slinton }
8629683Slinton ;
8639683Slinton exp_list:
8649683Slinton     exp
8659683Slinton {
8669683Slinton 	$$ = build(O_COMMA, $1, nil);
8679683Slinton }
8689683Slinton |
8699683Slinton     exp ',' exp_list
8709683Slinton {
8719683Slinton 	$$ = build(O_COMMA, $1, $3);
8729683Slinton }
8739683Slinton ;
8749683Slinton exp:
87518214Slinton     symbol
8769683Slinton {
8779683Slinton 	$$ = build(O_RVAL, $1);
8789683Slinton }
8799683Slinton |
88018214Slinton     exp '[' exp_list ']'
8819683Slinton {
88218214Slinton 	$$ = subscript(unrval($1), $3);
8839683Slinton }
8849683Slinton |
88518214Slinton     exp '.' name
88618214Slinton {
88718214Slinton 	$$ = dot($1, $3);
88818214Slinton }
88918214Slinton |
89018214Slinton     exp ARROW name
89118214Slinton {
89218214Slinton 	$$ = dot($1, $3);
89318214Slinton }
89418214Slinton |
89518214Slinton     '*' exp %prec UNARYSIGN
89618214Slinton {
89718214Slinton 	$$ = build(O_INDIR, $2);
89818214Slinton }
89918214Slinton |
90018214Slinton     exp '^' %prec UNARYSIGN
90118214Slinton {
90218214Slinton 	$$ = build(O_INDIR, $1);
90318214Slinton }
90418214Slinton |
90516607Ssam     exp '\\' opt_qual_symbol
90611173Slinton {
90711173Slinton 	$$ = build(O_TYPERENAME, $1, $3);
90811173Slinton }
90911173Slinton |
91018214Slinton     exp '\\' '&' opt_qual_symbol %prec '\\'
91118214Slinton {
91218214Slinton 	$$ = renameptr($1, $4);
91318214Slinton }
91418214Slinton |
91518214Slinton     exp '(' opt_exp_list ')'
91618214Slinton {
91718214Slinton 	$$ = build(O_CALL, unrval($1), $3);
91818214Slinton }
91918214Slinton |
92018214Slinton     constant
92118214Slinton {
92218214Slinton 	$$ = $1;
92318214Slinton }
92418214Slinton |
9259683Slinton     '+' exp %prec UNARYSIGN
9269683Slinton {
9279683Slinton 	$$ = $2;
9289683Slinton }
9299683Slinton |
9309683Slinton     '-' exp %prec UNARYSIGN
9319683Slinton {
9329683Slinton 	$$ = build(O_NEG, $2);
9339683Slinton }
9349683Slinton |
9359683Slinton     '&' exp %prec UNARYSIGN
9369683Slinton {
9379683Slinton 	$$ = amper($2);
9389683Slinton }
9399683Slinton |
9409683Slinton     exp '+' exp
9419683Slinton {
9429683Slinton 	$$ = build(O_ADD, $1, $3);
9439683Slinton }
9449683Slinton |
9459683Slinton     exp '-' exp
9469683Slinton {
9479683Slinton 	$$ = build(O_SUB, $1, $3);
9489683Slinton }
9499683Slinton |
9509683Slinton     exp '*' exp
9519683Slinton {
9529683Slinton 	$$ = build(O_MUL, $1, $3);
9539683Slinton }
9549683Slinton |
9559683Slinton     exp '/' exp
9569683Slinton {
9579683Slinton 	$$ = build(O_DIVF, $1, $3);
9589683Slinton }
9599683Slinton |
9609683Slinton     exp DIV exp
9619683Slinton {
9629683Slinton 	$$ = build(O_DIV, $1, $3);
9639683Slinton }
9649683Slinton |
9659683Slinton     exp MOD exp
9669683Slinton {
9679683Slinton 	$$ = build(O_MOD, $1, $3);
9689683Slinton }
9699683Slinton |
9709683Slinton     exp AND exp
9719683Slinton {
9729683Slinton 	$$ = build(O_AND, $1, $3);
9739683Slinton }
9749683Slinton |
9759683Slinton     exp OR exp
9769683Slinton {
9779683Slinton 	$$ = build(O_OR, $1, $3);
9789683Slinton }
9799683Slinton |
9809683Slinton     exp '<' exp
9819683Slinton {
9829683Slinton 	$$ = build(O_LT, $1, $3);
9839683Slinton }
9849683Slinton |
9859683Slinton     exp '<' '=' exp
9869683Slinton {
9879683Slinton 	$$ = build(O_LE, $1, $4);
9889683Slinton }
9899683Slinton |
9909683Slinton     exp '>' exp
9919683Slinton {
9929683Slinton 	$$ = build(O_GT, $1, $3);
9939683Slinton }
9949683Slinton |
9959683Slinton     exp '>' '=' exp
9969683Slinton {
9979683Slinton 	$$ = build(O_GE, $1, $4);
9989683Slinton }
9999683Slinton |
10009683Slinton     exp '=' exp
10019683Slinton {
10029683Slinton 	$$ = build(O_EQ, $1, $3);
10039683Slinton }
10049683Slinton |
10059683Slinton     exp '=' '=' exp
10069683Slinton {
10079683Slinton 	$$ = build(O_EQ, $1, $4);
10089683Slinton }
10099683Slinton |
10109683Slinton     exp '<' '>' exp
10119683Slinton {
10129683Slinton 	$$ = build(O_NE, $1, $4);
10139683Slinton }
10149683Slinton |
10159683Slinton     exp '!' '=' exp
10169683Slinton {
10179683Slinton 	$$ = build(O_NE, $1, $4);
10189683Slinton }
10199683Slinton |
10209683Slinton     '(' exp ')'
10219683Slinton {
10229683Slinton 	$$ = $2;
10239683Slinton }
10249683Slinton ;
10259683Slinton boolean_exp:
10269683Slinton     exp
10279683Slinton {
10289683Slinton 	chkboolean($1);
10299683Slinton 	$$ = $1;
10309683Slinton }
10319683Slinton ;
10329683Slinton constant:
10339683Slinton     INT
10349683Slinton {
10359683Slinton 	$$ = build(O_LCON, $1);
10369683Slinton }
10379683Slinton |
103818214Slinton     CHAR
103918214Slinton {
104018214Slinton 	$$ = build(O_CCON, $1);
104118214Slinton }
104218214Slinton |
10439683Slinton     REAL
10449683Slinton {
10459683Slinton 	$$ = build(O_FCON, $1);
10469683Slinton }
10479683Slinton |
10489683Slinton     STRING
10499683Slinton {
10509683Slinton 	$$ = build(O_SCON, $1);
10519683Slinton }
10529683Slinton ;
105316607Ssam opt_qual_symbol:
105416607Ssam     symbol
105516607Ssam {
105616607Ssam 	$$ = $1;
105716607Ssam }
105816607Ssam |
105916607Ssam     opt_qual_symbol '.' name
106016607Ssam {
106116607Ssam 	$$ = dot($1, $3);
106216607Ssam }
106316607Ssam ;
10649683Slinton symbol:
10659683Slinton     name
10669683Slinton {
106718214Slinton 	$$ = findvar($1);
106818214Slinton 	if ($$ == nil) {
106918214Slinton 	    $$ = build(O_SYM, which($1));
107018214Slinton 	}
10719683Slinton }
107216607Ssam |
107316607Ssam     '.' name
107416607Ssam {
107516607Ssam 	$$ = dot(build(O_SYM, program), $2);
107616607Ssam }
10779683Slinton ;
10789683Slinton name:
10799683Slinton     NAME
10809683Slinton {
10819683Slinton 	$$ = $1;
10829683Slinton }
10839683Slinton |
10849683Slinton     keyword
10859683Slinton {
10869683Slinton 	$$ = $1;
10879683Slinton }
10889683Slinton keyword:
108912536Scsvaf     ALIAS | AND | ASSIGN | AT | CALL | CATCH | CONT | DEBUG | DELETE | DIV |
109016607Ssam     DOWN | DUMP | EDIT | FILE | FUNC | GRIPE | HELP | IGNORE | IN | LIST |
109116607Ssam     MOD | NEXT | NEXTI | NIL | NOT | OR | PRINT | PSYM | QUIT |
109218214Slinton     RERUN | RETURN | RUN | SET | SH | SKIP | SOURCE | STATUS | STEP | STEPI |
109318214Slinton     STOP | STOPI | TRACE | TRACEI | UNALIAS | UNSET | UP | USE |
109418214Slinton     WHATIS | WHEN | WHERE | WHEREIS | WHICH
10959683Slinton ;
1096