xref: /csrg-svn/old/dbx/commands.y (revision 16607)
19683Slinton %{
29683Slinton 
39683Slinton /* Copyright (c) 1982 Regents of the University of California */
49683Slinton 
5*16607Ssam static char sccsid[] = "@(#)commands.y 1.9 8/17/83";
69683Slinton 
7*16607Ssam static char rcsid[] = "$Header: commands.y,v 1.3 84/03/27 10:19:59 linton Exp $";
8*16607Ssam 
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"
209683Slinton #include "names.h"
2114673Slinton #include "lists.h"
229683Slinton 
239683Slinton private String curformat = "X";
249683Slinton 
259683Slinton %}
269683Slinton 
279683Slinton %term
28*16607Ssam     ALIAS AND ASSIGN AT CALL CATCH CONT DEBUG DELETE DIV DOWN DUMP
299683Slinton     EDIT FILE FUNC GRIPE HELP IF IGNORE IN LIST MOD NEXT NEXTI NIL NOT OR
30*16607Ssam     PRINT PSYM QUIT RERUN RETURN RUN SH SKIP SOURCE STATUS STEP STEPI
31*16607Ssam     STOP STOPI TRACE TRACEI UP
329683Slinton     USE WHATIS WHEN WHERE WHEREIS WHICH
339683Slinton 
349683Slinton %term INT REAL NAME STRING
359683Slinton %term LFORMER RFORMER ABSTRACTION ARROW
369683Slinton 
379683Slinton %right INT
389683Slinton %binary REDIRECT
399683Slinton %binary '<' '=' '>' '!' IN
409683Slinton %left '+' '-' OR
419683Slinton %left UNARYSIGN
429683Slinton %left '*' '/' DIV MOD AND
439683Slinton %left NOT '(' '[' '.' '^' ARROW
4411173Slinton %left '\\'
459683Slinton 
469683Slinton %union {
479683Slinton     Name y_name;
489683Slinton     Symbol y_sym;
499683Slinton     Node y_node;
509683Slinton     Integer y_int;
519683Slinton     Operator y_op;
529683Slinton     long y_long;
539683Slinton     double y_real;
549683Slinton     String y_string;
559683Slinton     Boolean y_bool;
569683Slinton     Cmdlist y_cmdlist;
5714673Slinton     List y_list;
589683Slinton };
599683Slinton 
609683Slinton %type <y_op>	    trace stop
619683Slinton %type <y_long>	    INT count
629683Slinton %type <y_real>	    REAL
639683Slinton %type <y_string>    STRING redirectout filename opt_filename mode
64*16607Ssam %type <y_name>	    ALIAS AND ASSIGN AT CALL CATCH CONT
65*16607Ssam %type <y_name>	    DEBUG DELETE DIV DOWN DUMP
669683Slinton %type <y_name>	    EDIT FILE FUNC GRIPE HELP IF IGNORE IN LIST MOD
679683Slinton %type <y_name>	    NEXT NEXTI NIL NOT OR
68*16607Ssam %type <y_name>	    PRINT PSYM QUIT RERUN RETURN RUN SH SKIP SOURCE STATUS
69*16607Ssam %type <y_name>	    STEP STEPI STOP STOPI TRACE TRACEI
70*16607Ssam %type <y_name>	    UP USE WHATIS WHEN WHERE WHEREIS WHICH
719683Slinton %type <y_name>	    name NAME keyword
72*16607Ssam %type <y_node>      opt_qual_symbol symbol
739683Slinton %type <y_node>	    command rcommand cmd step what where examine
7412482Slinton %type <y_node>	    event opt_exp_list opt_cond
759683Slinton %type <y_node>	    exp_list exp term boolean_exp constant address
76*16607Ssam %type <y_node>	    integer_list alias_command list_command line_number
779683Slinton %type <y_cmdlist>   actions
7814673Slinton %type <y_list>      sourcepath
799683Slinton 
809683Slinton %%
819683Slinton 
829683Slinton input:
839683Slinton     input command_nl
849683Slinton |
859683Slinton     /* empty */
869683Slinton ;
879683Slinton command_nl:
889683Slinton     command_line '\n'
899683Slinton |
909683Slinton     command_line ';'
919683Slinton |
929683Slinton     '\n'
939683Slinton ;
949683Slinton 
959683Slinton command_line:
969683Slinton     command
979683Slinton {
989683Slinton 	if ($1 != nil) {
9912536Scsvaf             if(debug_flag[2]) {dumptree(stderr,$1); fflush (stderr);}
1009683Slinton 	    eval($1);
1019683Slinton 	}
1029683Slinton }
1039683Slinton |
1049683Slinton     rcommand redirectout
1059683Slinton {
1069683Slinton 	if ($1 != nil) {
1079683Slinton 	    if ($2 != nil) {
1089683Slinton 		setout($2);
10912536Scsvaf                 if(debug_flag[2]) {dumptree(stderr,$1); fflush (stderr);}
1109683Slinton 		eval($1);
1119683Slinton 		unsetout();
1129683Slinton 	    } else {
11312536Scsvaf                 if(debug_flag[2]) {dumptree(stderr,$1); fflush (stderr);}
1149683Slinton 		eval($1);
1159683Slinton 	    }
1169683Slinton 	}
1179683Slinton }
1189683Slinton ;
1199683Slinton redirectout:
1209683Slinton     '>' shellmode NAME
1219683Slinton {
1229683Slinton 	$$ = ident($3);
1239683Slinton }
1249683Slinton |
1259683Slinton     /* empty */
1269683Slinton {
1279683Slinton 	$$ = nil;
1289683Slinton }
1299683Slinton ;
1309683Slinton 
1319683Slinton /*
1329683Slinton  * Non-redirectable commands.
1339683Slinton  */
1349683Slinton command:
1359683Slinton     alias_command
1369683Slinton {
1379683Slinton 	$$ = $1;
1389683Slinton }
1399683Slinton |
1409683Slinton     ASSIGN term '=' exp
1419683Slinton {
1429683Slinton 	$$ = build(O_ASSIGN, $2, $4);
1439683Slinton }
1449683Slinton |
1459683Slinton     CATCH INT
1469683Slinton {
1479683Slinton 	$$ = build(O_CATCH, $2);
1489683Slinton }
1499683Slinton |
1509683Slinton     CONT
1519683Slinton {
15214673Slinton 	$$ = build(O_CONT, (long) DEFSIG);
1539683Slinton }
1549683Slinton |
15511870Slinton     CONT INT
15611870Slinton {
15711870Slinton 	$$ = build(O_CONT, $2);
15811870Slinton }
15911870Slinton |
160*16607Ssam     DELETE integer_list
1619683Slinton {
1629683Slinton 	$$ = build(O_DELETE, $2);
1639683Slinton }
1649683Slinton |
165*16607Ssam     DOWN
166*16607Ssam {
167*16607Ssam 	$$ = build(O_DOWN, build(O_LCON, (long) 1));
168*16607Ssam }
169*16607Ssam |
170*16607Ssam     DOWN INT
171*16607Ssam {
172*16607Ssam 	$$ = build(O_DOWN, build(O_LCON, (long) $2));
173*16607Ssam }
174*16607Ssam |
1759683Slinton     EDIT shellmode opt_filename
1769683Slinton {
1779683Slinton 	$$ = build(O_EDIT, $3);
1789683Slinton }
1799683Slinton |
1809683Slinton     FILE shellmode opt_filename
1819683Slinton {
1829683Slinton 	$$ = build(O_CHFILE, $3);
1839683Slinton }
1849683Slinton |
1859683Slinton     FUNC
1869683Slinton {
1879683Slinton 	$$ = build(O_FUNC, nil);
1889683Slinton }
1899683Slinton |
190*16607Ssam     FUNC opt_qual_symbol
1919683Slinton {
1929683Slinton 	$$ = build(O_FUNC, $2);
1939683Slinton }
1949683Slinton |
1959683Slinton     GRIPE
1969683Slinton {
1979683Slinton 	$$ = build(O_GRIPE);
1989683Slinton }
1999683Slinton |
2009683Slinton     HELP
2019683Slinton {
2029683Slinton 	$$ = build(O_HELP);
2039683Slinton }
2049683Slinton |
2059683Slinton     IGNORE INT
2069683Slinton {
2079683Slinton 	$$ = build(O_IGNORE, $2);
2089683Slinton }
2099683Slinton |
2109683Slinton     list_command
2119683Slinton {
2129683Slinton 	$$ = $1;
2139683Slinton }
2149683Slinton |
2159683Slinton     PSYM term
2169683Slinton {
2179683Slinton 	$$ = build(O_PSYM, $2);
2189683Slinton }
2199683Slinton |
2209683Slinton     QUIT
2219683Slinton {
2229683Slinton 	if (not popinput()) {
2239683Slinton 	    quit(0);
2249683Slinton 	} else {
2259683Slinton 	    $$ = nil;
2269683Slinton 	}
2279683Slinton }
2289683Slinton |
229*16607Ssam     RETURN
230*16607Ssam {
231*16607Ssam 	$$ = build(O_RETURN, nil);
232*16607Ssam }
233*16607Ssam |
234*16607Ssam     RETURN opt_qual_symbol
235*16607Ssam {
236*16607Ssam 	$$ = build(O_RETURN, $2);
237*16607Ssam }
238*16607Ssam |
2399683Slinton     runcommand
2409683Slinton {
2419683Slinton 	run();
2429683Slinton 	/* NOTREACHED */
2439683Slinton }
2449683Slinton |
2459683Slinton     SH
2469683Slinton {
2479683Slinton 	shellline();
2489683Slinton 	$$ = nil;
2499683Slinton }
2509683Slinton |
2519683Slinton     SOURCE shellmode filename
2529683Slinton {
2539683Slinton 	$$ = build(O_SOURCE, $3);
2549683Slinton }
2559683Slinton |
2569683Slinton     step
2579683Slinton {
2589683Slinton 	$$ = $1;
2599683Slinton }
2609683Slinton |
2619683Slinton     stop where opt_cond
2629683Slinton {
2639683Slinton 	$$ = build($1, nil, $2, $3);
2649683Slinton }
2659683Slinton |
2669683Slinton     stop what opt_cond
2679683Slinton {
2689683Slinton 	$$ = build($1, $2, nil, $3);
2699683Slinton }
2709683Slinton |
2719683Slinton     stop IF boolean_exp
2729683Slinton {
2739683Slinton 	$$ = build($1, nil, nil, $3);
2749683Slinton }
2759683Slinton |
2769683Slinton     trace what where opt_cond
2779683Slinton {
2789683Slinton 	$$ = build($1, $2, $3, $4);
2799683Slinton }
2809683Slinton |
2819683Slinton     trace where opt_cond
2829683Slinton {
2839683Slinton 	$$ = build($1, nil, $2, $3);
2849683Slinton }
2859683Slinton |
2869683Slinton     trace what opt_cond
2879683Slinton {
2889683Slinton 	$$ = build($1, $2, nil, $3);
2899683Slinton }
2909683Slinton |
2919683Slinton     trace opt_cond
2929683Slinton {
2939683Slinton 	$$ = build($1, nil, nil, $2);
2949683Slinton }
2959683Slinton |
296*16607Ssam     UP
2979683Slinton {
298*16607Ssam 	$$ = build(O_UP, build(O_LCON, (long) 1));
2999683Slinton }
3009683Slinton |
301*16607Ssam     UP INT
3029683Slinton {
303*16607Ssam 	$$ = build(O_UP, build(O_LCON, (long) $2));
3049683Slinton }
3059683Slinton |
3069683Slinton     USE shellmode sourcepath
3079683Slinton {
30814673Slinton 	String dir;
30914673Slinton 
3109683Slinton 	$$ = nil;
31114673Slinton 	if (list_size($3) == 0) {
31214673Slinton 	    foreach (String, dir, sourcepath)
31314673Slinton 		printf("%s ", dir);
31414673Slinton 	    endfor
31514673Slinton 	    printf("\n");
31614673Slinton 	} else {
31714673Slinton 	    foreach (String, dir, sourcepath)
31814673Slinton 		list_delete(list_curitem(sourcepath), sourcepath);
31914673Slinton 	    endfor
32014673Slinton 	    sourcepath = $3;
3219683Slinton 	}
3229683Slinton }
32316604Ssam |
324*16607Ssam     WHATIS term
32516604Ssam {
326*16607Ssam 	$$ = build(O_WHATIS, $2);
32716604Ssam }
328*16607Ssam |
329*16607Ssam     WHEN event '{' actions '}'
33016604Ssam {
331*16607Ssam 	$$ = build(O_ADDEVENT, $2, $4);
33216604Ssam }
33316604Ssam |
334*16607Ssam     WHEREIS symbol
33516604Ssam {
336*16607Ssam 	$$ = build(O_WHEREIS, $2);
33716604Ssam }
338*16607Ssam |
339*16607Ssam     WHICH symbol
34016604Ssam {
341*16607Ssam 	$$ = build(O_WHICH, $2);
34216604Ssam }
34316604Ssam ;
3449683Slinton runcommand:
345*16607Ssam     run arglist
34612482Slinton |
34712524Slinton     run
3489683Slinton ;
3499683Slinton run:
35012524Slinton     RUN shellmode
3519683Slinton {
352*16607Ssam 	arginit();
3539683Slinton 	fflush(stdout);
3549683Slinton }
355*16607Ssam |
356*16607Ssam     RERUN shellmode
357*16607Ssam {
358*16607Ssam 	fflush(stdout);
359*16607Ssam }
3609683Slinton ;
3619683Slinton arglist:
3629683Slinton     arglist arg
3639683Slinton |
36412482Slinton     arg
3659683Slinton ;
3669683Slinton arg:
3679683Slinton     NAME
3689683Slinton {
3699683Slinton 	newarg(ident($1));
3709683Slinton }
3719683Slinton |
372*16607Ssam     STRING
373*16607Ssam {
374*16607Ssam 	newarg($1);
375*16607Ssam }
376*16607Ssam |
3779683Slinton     '<' NAME
3789683Slinton {
3799683Slinton 	inarg(ident($2));
3809683Slinton }
3819683Slinton |
3829683Slinton     '>' NAME
3839683Slinton {
3849683Slinton 	outarg(ident($2));
3859683Slinton }
3869683Slinton ;
3879683Slinton step:
3889683Slinton     STEP
3899683Slinton {
3909683Slinton 	$$ = build(O_STEP, true, false);
3919683Slinton }
3929683Slinton |
3939683Slinton     STEPI
3949683Slinton {
3959683Slinton 	$$ = build(O_STEP, false, false);
3969683Slinton }
3979683Slinton |
3989683Slinton     NEXT
3999683Slinton {
4009683Slinton 	$$ = build(O_STEP, true, true);
4019683Slinton }
4029683Slinton |
4039683Slinton     NEXTI
4049683Slinton {
4059683Slinton 	$$ = build(O_STEP, false, true);
4069683Slinton }
4079683Slinton ;
4089683Slinton shellmode:
4099683Slinton     /* empty */
4109683Slinton {
4119683Slinton 	beginshellmode();
4129683Slinton }
4139683Slinton ;
4149683Slinton sourcepath:
4159683Slinton     sourcepath NAME
4169683Slinton {
41714673Slinton 	$$ = $1;
41814673Slinton 	list_append(list_item(ident($2)), nil, $$);
4199683Slinton }
4209683Slinton |
4219683Slinton     /* empty */
4229683Slinton {
42314673Slinton 	$$ = list_alloc();
4249683Slinton }
4259683Slinton ;
4269683Slinton event:
4279683Slinton     where
4289683Slinton |
4299683Slinton     exp
4309683Slinton ;
4319683Slinton actions:
4329683Slinton     actions cmd ';'
4339683Slinton {
4349683Slinton 	$$ = $1;
4359683Slinton 	cmdlist_append($2, $$);
4369683Slinton }
4379683Slinton |
4389683Slinton     cmd ';'
4399683Slinton {
4409683Slinton 	$$ = list_alloc();
4419683Slinton 	cmdlist_append($1, $$);
4429683Slinton }
4439683Slinton ;
4449683Slinton cmd:
4459683Slinton     command
4469683Slinton |
4479683Slinton     rcommand
4489683Slinton ;
4499683Slinton 
4509683Slinton /*
4519683Slinton  * Redirectable commands.
4529683Slinton  */
4539683Slinton rcommand:
4549683Slinton     PRINT exp_list
4559683Slinton {
4569683Slinton 	$$ = build(O_PRINT, $2);
4579683Slinton }
4589683Slinton |
4599683Slinton     WHERE
4609683Slinton {
4619683Slinton 	$$ = build(O_WHERE);
4629683Slinton }
4639683Slinton |
4649683Slinton     examine
4659683Slinton {
4669683Slinton 	$$ = $1;
4679683Slinton }
4689683Slinton |
469*16607Ssam     CALL term '(' opt_exp_list ')'
4709683Slinton {
471*16607Ssam 	$$ = build(O_CALL, $2, $4);
4729683Slinton }
4739683Slinton |
47412536Scsvaf     DEBUG INT
47512536Scsvaf {
47612536Scsvaf  	$$ = build(O_DEBUG, $2);
47712536Scsvaf }
47812536Scsvaf |
4799683Slinton     DUMP
4809683Slinton {
4819683Slinton 	$$ = build(O_DUMP);
4829683Slinton }
4839683Slinton |
4849683Slinton     STATUS
4859683Slinton {
4869683Slinton 	$$ = build(O_STATUS);
4879683Slinton }
4889683Slinton ;
4899683Slinton alias_command:
4909683Slinton     ALIAS name name
4919683Slinton {
4929683Slinton 	$$ = build(O_ALIAS, build(O_NAME, $2), build(O_NAME, $3));
4939683Slinton }
4949683Slinton |
4959683Slinton     ALIAS name
4969683Slinton {
4979683Slinton 	$$ = build(O_ALIAS, build(O_NAME, $2), nil);
4989683Slinton }
4999683Slinton |
5009683Slinton     ALIAS
5019683Slinton {
5029683Slinton 	$$ = build(O_ALIAS, nil, nil);
5039683Slinton }
5049683Slinton ;
5059683Slinton trace:
5069683Slinton     TRACE
5079683Slinton {
5089683Slinton 	$$ = O_TRACE;
5099683Slinton }
5109683Slinton |
5119683Slinton     TRACEI
5129683Slinton {
5139683Slinton 	$$ = O_TRACEI;
5149683Slinton }
5159683Slinton ;
5169683Slinton stop:
5179683Slinton     STOP
5189683Slinton {
5199683Slinton 	$$ = O_STOP;
5209683Slinton }
5219683Slinton |
5229683Slinton     STOPI
5239683Slinton {
5249683Slinton 	$$ = O_STOPI;
5259683Slinton }
5269683Slinton ;
5279683Slinton what:
5289683Slinton     exp
5299683Slinton {
5309683Slinton 	$$ = $1;
5319683Slinton }
5329683Slinton |
5339683Slinton     STRING ':' line_number
5349683Slinton {
5359683Slinton 	$$ = build(O_QLINE, build(O_SCON, $1), $3);
5369683Slinton }
5379683Slinton ;
5389683Slinton where:
5399683Slinton     IN term
5409683Slinton {
5419683Slinton 	$$ = $2;
5429683Slinton }
5439683Slinton |
5449683Slinton     AT line_number
5459683Slinton {
5469683Slinton 	$$ = build(O_QLINE, build(O_SCON, cursource), $2);
5479683Slinton }
5489683Slinton |
5499683Slinton     AT STRING ':' line_number
5509683Slinton {
5519683Slinton 	$$ = build(O_QLINE, build(O_SCON, $2), $4);
5529683Slinton }
5539683Slinton ;
5549683Slinton filename:
5559683Slinton     NAME
5569683Slinton {
5579683Slinton 	$$ = ident($1);
5589683Slinton }
5599683Slinton ;
5609683Slinton opt_filename:
5619683Slinton     /* empty */
5629683Slinton {
5639683Slinton 	$$ = nil;
5649683Slinton }
5659683Slinton |
5669683Slinton     filename
5679683Slinton {
5689683Slinton 	$$ = $1;
5699683Slinton }
5709683Slinton ;
57112482Slinton opt_exp_list:
57212482Slinton     exp_list
5739683Slinton {
57412482Slinton 	$$ = $1;
5759683Slinton }
5769683Slinton |
57712482Slinton     /* empty */
5789683Slinton {
57912482Slinton 	$$ = nil;
5809683Slinton }
5819683Slinton ;
5829683Slinton list_command:
5839683Slinton     LIST
5849683Slinton {
5859683Slinton 	$$ = build(O_LIST,
5869683Slinton 	    build(O_LCON, (long) cursrcline),
5879683Slinton 	    build(O_LCON, (long) cursrcline + 9)
5889683Slinton 	);
5899683Slinton }
5909683Slinton |
5919683Slinton     LIST line_number
5929683Slinton {
5939683Slinton 	$$ = build(O_LIST, $2, $2);
5949683Slinton }
5959683Slinton |
5969683Slinton     LIST line_number ',' line_number
5979683Slinton {
5989683Slinton 	$$ = build(O_LIST, $2, $4);
5999683Slinton }
6009683Slinton |
601*16607Ssam     LIST opt_qual_symbol
6029683Slinton {
6039683Slinton 	$$ = build(O_LIST, $2);
6049683Slinton }
6059683Slinton ;
606*16607Ssam integer_list:
607*16607Ssam     INT
608*16607Ssam {
609*16607Ssam 	$$ = build(O_LCON, $1);
610*16607Ssam }
611*16607Ssam |
612*16607Ssam     INT integer_list
613*16607Ssam {
614*16607Ssam 	$$ = build(O_COMMA, build(O_LCON, $1), $2);
615*16607Ssam }
616*16607Ssam ;
6179683Slinton line_number:
6189683Slinton     INT
6199683Slinton {
6209683Slinton 	$$ = build(O_LCON, $1);
6219683Slinton }
6229683Slinton |
6239683Slinton     '$'
6249683Slinton {
6259683Slinton 	$$ = build(O_LCON, (long) LASTLINE);
6269683Slinton }
6279683Slinton ;
6289683Slinton examine:
6299683Slinton     address '/' count mode
6309683Slinton {
6319683Slinton 	$$ = build(O_EXAMINE, $4, $1, nil, $3);
6329683Slinton }
6339683Slinton |
6349683Slinton     address ',' address '/' mode
6359683Slinton {
6369683Slinton 	$$ = build(O_EXAMINE, $5, $1, $3, 0);
6379683Slinton }
6389683Slinton |
6399683Slinton     '/' count mode
6409683Slinton {
6419683Slinton 	$$ = build(O_EXAMINE, $3, build(O_LCON, (long) prtaddr), nil, $2);
6429683Slinton }
64311173Slinton |
64411173Slinton     address '=' mode
64511173Slinton {
64611173Slinton 	$$ = build(O_EXAMINE, $3, $1, nil, 0);
64711173Slinton }
6489683Slinton ;
6499683Slinton address:
6509683Slinton     INT
6519683Slinton {
6529683Slinton 	$$ = build(O_LCON, $1);
6539683Slinton }
6549683Slinton |
6559683Slinton     '&' term
6569683Slinton {
6579683Slinton 	$$ = amper($2);
6589683Slinton }
6599683Slinton |
6609683Slinton     address '+' address
6619683Slinton {
6629683Slinton 	$$ = build(O_ADD, $1, $3);
6639683Slinton }
6649683Slinton |
6659683Slinton     address '-' address
6669683Slinton {
6679683Slinton 	$$ = build(O_SUB, $1, $3);
6689683Slinton }
6699683Slinton |
6709683Slinton     address '*' address
6719683Slinton {
6729683Slinton 	$$ = build(O_MUL, $1, $3);
6739683Slinton }
6749683Slinton |
6759683Slinton     '*' address %prec UNARYSIGN
6769683Slinton {
6779683Slinton 	$$ = build(O_INDIR, $2);
6789683Slinton }
6799683Slinton |
6809683Slinton     '(' exp ')'
6819683Slinton {
6829683Slinton 	$$ = $2;
6839683Slinton }
6849683Slinton ;
6859683Slinton count:
6869683Slinton     /* empty */
6879683Slinton {
6889683Slinton 	$$ = 1;
6899683Slinton }
6909683Slinton |
6919683Slinton     INT
6929683Slinton {
6939683Slinton 	$$ = $1;
6949683Slinton }
6959683Slinton ;
6969683Slinton mode:
6979683Slinton     name
6989683Slinton {
6999683Slinton 	$$ = ident($1);
7009683Slinton 	curformat = $$;
7019683Slinton }
7029683Slinton |
7039683Slinton     /* empty */
7049683Slinton {
7059683Slinton 	$$ = curformat;
7069683Slinton }
7079683Slinton ;
7089683Slinton opt_cond:
7099683Slinton     /* empty */
7109683Slinton {
7119683Slinton 	$$ = nil;
7129683Slinton }
7139683Slinton |
7149683Slinton     IF boolean_exp
7159683Slinton {
7169683Slinton 	$$ = $2;
7179683Slinton }
7189683Slinton ;
7199683Slinton exp_list:
7209683Slinton     exp
7219683Slinton {
7229683Slinton 	$$ = build(O_COMMA, $1, nil);
7239683Slinton }
7249683Slinton |
7259683Slinton     exp ',' exp_list
7269683Slinton {
7279683Slinton 	$$ = build(O_COMMA, $1, $3);
7289683Slinton }
7299683Slinton ;
7309683Slinton exp:
7319683Slinton     term
7329683Slinton {
7339683Slinton 	$$ = build(O_RVAL, $1);
7349683Slinton }
7359683Slinton |
7369683Slinton     constant
7379683Slinton {
7389683Slinton 	$$ = $1;
7399683Slinton }
7409683Slinton |
741*16607Ssam     exp '\\' opt_qual_symbol
74211173Slinton {
74311173Slinton 	$$ = build(O_TYPERENAME, $1, $3);
74411173Slinton }
74511173Slinton |
7469683Slinton     '+' exp %prec UNARYSIGN
7479683Slinton {
7489683Slinton 	$$ = $2;
7499683Slinton }
7509683Slinton |
7519683Slinton     '-' exp %prec UNARYSIGN
7529683Slinton {
7539683Slinton 	$$ = build(O_NEG, $2);
7549683Slinton }
7559683Slinton |
7569683Slinton     '&' exp %prec UNARYSIGN
7579683Slinton {
7589683Slinton 	$$ = amper($2);
7599683Slinton }
7609683Slinton |
7619683Slinton     exp '+' exp
7629683Slinton {
7639683Slinton 	$$ = build(O_ADD, $1, $3);
7649683Slinton }
7659683Slinton |
7669683Slinton     exp '-' exp
7679683Slinton {
7689683Slinton 	$$ = build(O_SUB, $1, $3);
7699683Slinton }
7709683Slinton |
7719683Slinton     exp '*' exp
7729683Slinton {
7739683Slinton 	$$ = build(O_MUL, $1, $3);
7749683Slinton }
7759683Slinton |
7769683Slinton     exp '/' exp
7779683Slinton {
7789683Slinton 	$$ = build(O_DIVF, $1, $3);
7799683Slinton }
7809683Slinton |
7819683Slinton     exp DIV exp
7829683Slinton {
7839683Slinton 	$$ = build(O_DIV, $1, $3);
7849683Slinton }
7859683Slinton |
7869683Slinton     exp MOD exp
7879683Slinton {
7889683Slinton 	$$ = build(O_MOD, $1, $3);
7899683Slinton }
7909683Slinton |
7919683Slinton     exp AND exp
7929683Slinton {
7939683Slinton 	$$ = build(O_AND, $1, $3);
7949683Slinton }
7959683Slinton |
7969683Slinton     exp OR exp
7979683Slinton {
7989683Slinton 	$$ = build(O_OR, $1, $3);
7999683Slinton }
8009683Slinton |
8019683Slinton     exp '<' exp
8029683Slinton {
8039683Slinton 	$$ = build(O_LT, $1, $3);
8049683Slinton }
8059683Slinton |
8069683Slinton     exp '<' '=' exp
8079683Slinton {
8089683Slinton 	$$ = build(O_LE, $1, $4);
8099683Slinton }
8109683Slinton |
8119683Slinton     exp '>' exp
8129683Slinton {
8139683Slinton 	$$ = build(O_GT, $1, $3);
8149683Slinton }
8159683Slinton |
8169683Slinton     exp '>' '=' exp
8179683Slinton {
8189683Slinton 	$$ = build(O_GE, $1, $4);
8199683Slinton }
8209683Slinton |
8219683Slinton     exp '=' exp
8229683Slinton {
8239683Slinton 	$$ = build(O_EQ, $1, $3);
8249683Slinton }
8259683Slinton |
8269683Slinton     exp '=' '=' exp
8279683Slinton {
8289683Slinton 	$$ = build(O_EQ, $1, $4);
8299683Slinton }
8309683Slinton |
8319683Slinton     exp '<' '>' exp
8329683Slinton {
8339683Slinton 	$$ = build(O_NE, $1, $4);
8349683Slinton }
8359683Slinton |
8369683Slinton     exp '!' '=' exp
8379683Slinton {
8389683Slinton 	$$ = build(O_NE, $1, $4);
8399683Slinton }
8409683Slinton |
8419683Slinton     '(' exp ')'
8429683Slinton {
8439683Slinton 	$$ = $2;
8449683Slinton }
8459683Slinton ;
8469683Slinton term:
8479683Slinton     symbol
8489683Slinton {
8499683Slinton 	$$ = $1;
8509683Slinton }
8519683Slinton |
8529683Slinton     term '[' exp_list ']'
8539683Slinton {
8549683Slinton 	$$ = subscript($1, $3);
8559683Slinton }
8569683Slinton |
8579683Slinton     term '.' name
8589683Slinton {
8599683Slinton 	$$ = dot($1, $3);
8609683Slinton }
8619683Slinton |
8629683Slinton     term ARROW name
8639683Slinton {
8649683Slinton 	$$ = dot($1, $3);
8659683Slinton }
8669683Slinton |
8679683Slinton     '*' term %prec UNARYSIGN
8689683Slinton {
8699683Slinton 	$$ = build(O_INDIR, $2);
8709683Slinton }
8719683Slinton |
8729683Slinton     '*' '(' exp ')' %prec UNARYSIGN
8739683Slinton {
8749683Slinton 	$$ = build(O_INDIR, $3);
8759683Slinton }
8769683Slinton |
8779683Slinton     term '^' %prec UNARYSIGN
8789683Slinton {
8799683Slinton 	$$ = build(O_INDIR, $1);
8809683Slinton }
8819683Slinton |
8829683Slinton     '#' term %prec UNARYSIGN
8839683Slinton {
8849683Slinton 	$$ = concrete($2);
8859683Slinton }
8869683Slinton |
887*16607Ssam     '#' '(' exp ')' %prec UNARYSIGN
888*16607Ssam {
889*16607Ssam 	$$ = concrete($3);
890*16607Ssam }
891*16607Ssam |
89212482Slinton     term '(' opt_exp_list ')'
8939683Slinton {
8949683Slinton 	$$ = build(O_CALL, $1, $3);
8959683Slinton }
8969683Slinton ;
8979683Slinton boolean_exp:
8989683Slinton     exp
8999683Slinton {
9009683Slinton 	chkboolean($1);
9019683Slinton 	$$ = $1;
9029683Slinton }
9039683Slinton ;
9049683Slinton constant:
9059683Slinton     INT
9069683Slinton {
9079683Slinton 	$$ = build(O_LCON, $1);
9089683Slinton }
9099683Slinton |
9109683Slinton     REAL
9119683Slinton {
9129683Slinton 	$$ = build(O_FCON, $1);
9139683Slinton }
9149683Slinton |
9159683Slinton     STRING
9169683Slinton {
9179683Slinton 	$$ = build(O_SCON, $1);
9189683Slinton }
9199683Slinton ;
920*16607Ssam opt_qual_symbol:
921*16607Ssam     symbol
922*16607Ssam {
923*16607Ssam 	$$ = $1;
924*16607Ssam }
925*16607Ssam |
926*16607Ssam     opt_qual_symbol '.' name
927*16607Ssam {
928*16607Ssam 	$$ = dot($1, $3);
929*16607Ssam }
930*16607Ssam ;
9319683Slinton symbol:
9329683Slinton     name
9339683Slinton {
9349683Slinton 	$$ = build(O_SYM, which($1));
9359683Slinton }
936*16607Ssam |
937*16607Ssam     '.' name
938*16607Ssam {
939*16607Ssam 	$$ = dot(build(O_SYM, program), $2);
940*16607Ssam }
9419683Slinton ;
9429683Slinton name:
9439683Slinton     NAME
9449683Slinton {
9459683Slinton 	$$ = $1;
9469683Slinton }
9479683Slinton |
9489683Slinton     keyword
9499683Slinton {
9509683Slinton 	$$ = $1;
9519683Slinton }
9529683Slinton keyword:
95312536Scsvaf     ALIAS | AND | ASSIGN | AT | CALL | CATCH | CONT | DEBUG | DELETE | DIV |
954*16607Ssam     DOWN | DUMP | EDIT | FILE | FUNC | GRIPE | HELP | IGNORE | IN | LIST |
955*16607Ssam     MOD | NEXT | NEXTI | NIL | NOT | OR | PRINT | PSYM | QUIT |
956*16607Ssam     RERUN | RETURN | RUN | SH | SKIP | SOURCE | STATUS | STEP | STEPI |
957*16607Ssam     STOP | STOPI | TRACE | TRACEI | UP |
95813840Slinton     USE | WHATIS | WHEN | WHERE | WHEREIS | WHICH
9599683Slinton ;
960