19683Slinton %{ 29683Slinton /* Copyright (c) 1982 Regents of the University of California */ 39683Slinton 4*16934Ssam static char sccsid[] = "@(#)commands.y 1.13 (Berkeley) 08/12/84"; 59683Slinton 69683Slinton /* 79683Slinton * Yacc grammar for debugger commands. 89683Slinton */ 99683Slinton 109683Slinton #include "defs.h" 119683Slinton #include "symbols.h" 129683Slinton #include "operators.h" 139683Slinton #include "tree.h" 149683Slinton #include "process.h" 159683Slinton #include "source.h" 169683Slinton #include "scanner.h" 179683Slinton #include "names.h" 1814673Slinton #include "lists.h" 1916926Ssam #include <signal.h> 209683Slinton 219683Slinton private String curformat = "X"; 229683Slinton 239683Slinton %} 249683Slinton 259683Slinton %term 2616607Ssam ALIAS AND ASSIGN AT CALL CATCH CONT DEBUG DELETE DIV DOWN DUMP 279683Slinton EDIT FILE FUNC GRIPE HELP IF IGNORE IN LIST MOD NEXT NEXTI NIL NOT OR 2816607Ssam PRINT PSYM QUIT RERUN RETURN RUN SH SKIP SOURCE STATUS STEP STEPI 2916607Ssam STOP STOPI TRACE TRACEI UP 309683Slinton USE WHATIS WHEN WHERE WHEREIS WHICH 319683Slinton 329683Slinton %term INT REAL NAME STRING 339683Slinton %term LFORMER RFORMER ABSTRACTION ARROW 349683Slinton 359683Slinton %right INT 369683Slinton %binary REDIRECT 379683Slinton %binary '<' '=' '>' '!' IN 389683Slinton %left '+' '-' OR 399683Slinton %left UNARYSIGN 409683Slinton %left '*' '/' DIV MOD AND 419683Slinton %left NOT '(' '[' '.' '^' ARROW 4211173Slinton %left '\\' 439683Slinton 449683Slinton %union { 459683Slinton Name y_name; 469683Slinton Symbol y_sym; 479683Slinton Node y_node; 489683Slinton Integer y_int; 499683Slinton Operator y_op; 509683Slinton long y_long; 519683Slinton double y_real; 529683Slinton String y_string; 539683Slinton Boolean y_bool; 549683Slinton Cmdlist y_cmdlist; 5514673Slinton List y_list; 569683Slinton }; 579683Slinton 589683Slinton %type <y_op> trace stop 599683Slinton %type <y_long> INT count 609683Slinton %type <y_real> REAL 619683Slinton %type <y_string> STRING redirectout filename opt_filename mode 6216607Ssam %type <y_name> ALIAS AND ASSIGN AT CALL CATCH CONT 6316607Ssam %type <y_name> DEBUG DELETE DIV DOWN DUMP 649683Slinton %type <y_name> EDIT FILE FUNC GRIPE HELP IF IGNORE IN LIST MOD 659683Slinton %type <y_name> NEXT NEXTI NIL NOT OR 6616607Ssam %type <y_name> PRINT PSYM QUIT RERUN RETURN RUN SH SKIP SOURCE STATUS 6716607Ssam %type <y_name> STEP STEPI STOP STOPI TRACE TRACEI 6816607Ssam %type <y_name> UP USE WHATIS WHEN WHERE WHEREIS WHICH 699683Slinton %type <y_name> name NAME keyword 7016607Ssam %type <y_node> opt_qual_symbol symbol 719683Slinton %type <y_node> command rcommand cmd step what where examine 7212482Slinton %type <y_node> event opt_exp_list opt_cond 739683Slinton %type <y_node> exp_list exp term boolean_exp constant address 74*16934Ssam %type <y_node> integer_list alias_command list_command line_number 7516926Ssam %type <y_node> something search_command pattern 7616926Ssam %type <y_node> signal_list signal 779683Slinton %type <y_cmdlist> actions 7814673Slinton %type <y_list> sourcepath 799683Slinton 809683Slinton %% 819683Slinton 829683Slinton input: 839683Slinton input command_nl 8416926Ssam { 8516926Ssam endshellmode(); 8616926Ssam startaliasing(); 8716926Ssam } 889683Slinton | 899683Slinton /* empty */ 909683Slinton ; 9116926Ssam 929683Slinton command_nl: 939683Slinton command_line '\n' 9416926Ssam { 9516926Ssam if (istty()) { 9616926Ssam printf("(%s) ", cmdname); 9716926Ssam fflush(stdout); 9816926Ssam } 9916926Ssam } 1009683Slinton | 1019683Slinton command_line ';' 1029683Slinton | 1039683Slinton '\n' 10416926Ssam { 10516926Ssam if (istty()) { 10616926Ssam printf("(%s) ", cmdname); 10716926Ssam fflush(stdout); 10816926Ssam } 10916926Ssam } 1109683Slinton ; 1119683Slinton 1129683Slinton command_line: 1139683Slinton command 1149683Slinton { 1159683Slinton if ($1 != nil) { 11612536Scsvaf if(debug_flag[2]) {dumptree(stderr,$1); fflush (stderr);} 1179683Slinton eval($1); 1189683Slinton } 11916926Ssam startaliasing(); 1209683Slinton } 1219683Slinton | 1229683Slinton rcommand redirectout 1239683Slinton { 1249683Slinton if ($1 != nil) { 1259683Slinton if ($2 != nil) { 1269683Slinton setout($2); 12712536Scsvaf if(debug_flag[2]) {dumptree(stderr,$1); fflush (stderr);} 1289683Slinton eval($1); 1299683Slinton unsetout(); 1309683Slinton } else { 13112536Scsvaf if(debug_flag[2]) {dumptree(stderr,$1); fflush (stderr);} 1329683Slinton eval($1); 1339683Slinton } 1349683Slinton } 13516926Ssam startaliasing(); 1369683Slinton } 1379683Slinton ; 1389683Slinton redirectout: 1399683Slinton '>' shellmode NAME 1409683Slinton { 1419683Slinton $$ = ident($3); 1429683Slinton } 1439683Slinton | 1449683Slinton /* empty */ 1459683Slinton { 1469683Slinton $$ = nil; 1479683Slinton } 1489683Slinton ; 1499683Slinton 1509683Slinton /* 1519683Slinton * Non-redirectable commands. 1529683Slinton */ 1539683Slinton command: 1549683Slinton alias_command 1559683Slinton { 1569683Slinton $$ = $1; 1579683Slinton } 1589683Slinton | 15916926Ssam ASSIGN stopaliasing term '=' exp 1609683Slinton { 16116926Ssam $$ = build(O_ASSIGN, $3, $5); 1629683Slinton } 1639683Slinton | 16416926Ssam CATCH 1659683Slinton { 16616926Ssam $$ = build(O_CATCH, nil); 1679683Slinton } 1689683Slinton | 16916926Ssam CATCH stopaliasing signal_list 17016926Ssam { 17116926Ssam $$ = build(O_CATCH, $3); 17216926Ssam } 17316926Ssam | 1749683Slinton CONT 1759683Slinton { 17614673Slinton $$ = build(O_CONT, (long) DEFSIG); 1779683Slinton } 1789683Slinton | 17911870Slinton CONT INT 18011870Slinton { 18111870Slinton $$ = build(O_CONT, $2); 18211870Slinton } 18311870Slinton | 184*16934Ssam DELETE integer_list 1859683Slinton { 1869683Slinton $$ = build(O_DELETE, $2); 1879683Slinton } 1889683Slinton | 18916607Ssam DOWN 19016607Ssam { 19116607Ssam $$ = build(O_DOWN, build(O_LCON, (long) 1)); 19216607Ssam } 19316607Ssam | 19416607Ssam DOWN INT 19516607Ssam { 19616607Ssam $$ = build(O_DOWN, build(O_LCON, (long) $2)); 19716607Ssam } 19816607Ssam | 1999683Slinton EDIT shellmode opt_filename 2009683Slinton { 2019683Slinton $$ = build(O_EDIT, $3); 2029683Slinton } 2039683Slinton | 2049683Slinton FILE shellmode opt_filename 2059683Slinton { 2069683Slinton $$ = build(O_CHFILE, $3); 2079683Slinton } 2089683Slinton | 2099683Slinton FUNC 2109683Slinton { 2119683Slinton $$ = build(O_FUNC, nil); 2129683Slinton } 2139683Slinton | 21416926Ssam FUNC stopaliasing symbol 2159683Slinton { 21616926Ssam $$ = build(O_FUNC, $3); 2179683Slinton } 2189683Slinton | 2199683Slinton GRIPE 2209683Slinton { 2219683Slinton $$ = build(O_GRIPE); 2229683Slinton } 2239683Slinton | 2249683Slinton HELP 2259683Slinton { 2269683Slinton $$ = build(O_HELP); 2279683Slinton } 2289683Slinton | 22916926Ssam IGNORE 2309683Slinton { 23116926Ssam $$ = build(O_IGNORE, nil); 2329683Slinton } 2339683Slinton | 23416926Ssam IGNORE stopaliasing signal_list 23516926Ssam { 23616926Ssam $$ = build(O_IGNORE, $3); 23716926Ssam } 23816926Ssam | 2399683Slinton list_command 2409683Slinton { 2419683Slinton $$ = $1; 2429683Slinton } 2439683Slinton | 24416926Ssam PSYM stopaliasing term 2459683Slinton { 24616926Ssam $$ = build(O_PSYM, $3); 2479683Slinton } 2489683Slinton | 2499683Slinton QUIT 2509683Slinton { 2519683Slinton if (not popinput()) { 2529683Slinton quit(0); 2539683Slinton } else { 2549683Slinton $$ = nil; 2559683Slinton } 2569683Slinton } 2579683Slinton | 25816607Ssam RETURN 25916607Ssam { 26016607Ssam $$ = build(O_RETURN, nil); 26116607Ssam } 26216607Ssam | 26316926Ssam RETURN stopaliasing opt_qual_symbol 26416607Ssam { 26516926Ssam $$ = build(O_RETURN, $3); 26616607Ssam } 26716607Ssam | 2689683Slinton runcommand 2699683Slinton { 2709683Slinton run(); 2719683Slinton /* NOTREACHED */ 2729683Slinton } 2739683Slinton | 2749683Slinton SH 2759683Slinton { 2769683Slinton shellline(); 2779683Slinton $$ = nil; 2789683Slinton } 2799683Slinton | 2809683Slinton SOURCE shellmode filename 2819683Slinton { 2829683Slinton $$ = build(O_SOURCE, $3); 2839683Slinton } 2849683Slinton | 2859683Slinton step 2869683Slinton { 2879683Slinton $$ = $1; 2889683Slinton } 2899683Slinton | 2909683Slinton stop where opt_cond 2919683Slinton { 2929683Slinton $$ = build($1, nil, $2, $3); 2939683Slinton } 2949683Slinton | 2959683Slinton stop what opt_cond 2969683Slinton { 2979683Slinton $$ = build($1, $2, nil, $3); 2989683Slinton } 2999683Slinton | 3009683Slinton stop IF boolean_exp 3019683Slinton { 3029683Slinton $$ = build($1, nil, nil, $3); 3039683Slinton } 3049683Slinton | 3059683Slinton trace what where opt_cond 3069683Slinton { 3079683Slinton $$ = build($1, $2, $3, $4); 3089683Slinton } 3099683Slinton | 3109683Slinton trace where opt_cond 3119683Slinton { 3129683Slinton $$ = build($1, nil, $2, $3); 3139683Slinton } 3149683Slinton | 3159683Slinton trace what opt_cond 3169683Slinton { 3179683Slinton $$ = build($1, $2, nil, $3); 3189683Slinton } 3199683Slinton | 3209683Slinton trace opt_cond 3219683Slinton { 3229683Slinton $$ = build($1, nil, nil, $2); 3239683Slinton } 3249683Slinton | 32516607Ssam UP 3269683Slinton { 32716607Ssam $$ = build(O_UP, build(O_LCON, (long) 1)); 3289683Slinton } 3299683Slinton | 33016607Ssam UP INT 3319683Slinton { 33216607Ssam $$ = build(O_UP, build(O_LCON, (long) $2)); 3339683Slinton } 3349683Slinton | 3359683Slinton USE shellmode sourcepath 3369683Slinton { 33714673Slinton String dir; 33814673Slinton 3399683Slinton $$ = nil; 34014673Slinton if (list_size($3) == 0) { 34114673Slinton foreach (String, dir, sourcepath) 34214673Slinton printf("%s ", dir); 34314673Slinton endfor 34414673Slinton printf("\n"); 34514673Slinton } else { 34614673Slinton foreach (String, dir, sourcepath) 34714673Slinton list_delete(list_curitem(sourcepath), sourcepath); 34814673Slinton endfor 34914673Slinton sourcepath = $3; 3509683Slinton } 3519683Slinton } 35216604Ssam | 353*16934Ssam WHATIS stopaliasing term 35416604Ssam { 355*16934Ssam $$ = build(O_WHATIS, $3); 35616604Ssam } 35716607Ssam | 358*16934Ssam WHEN stopaliasing event '{' actions '}' 35916604Ssam { 360*16934Ssam $$ = build(O_ADDEVENT, $3, $5); 36116604Ssam } 36216604Ssam | 363*16934Ssam WHEREIS stopaliasing symbol 36416604Ssam { 365*16934Ssam $$ = build(O_WHEREIS, $3); 36616604Ssam } 36716607Ssam | 368*16934Ssam WHICH stopaliasing symbol 36916604Ssam { 370*16934Ssam $$ = build(O_WHICH, $3); 37116604Ssam } 37216625Ssam | 37316625Ssam search_command 37416625Ssam { 37516625Ssam $$ = $1; 37616625Ssam } 37716604Ssam ; 37816625Ssam 37916625Ssam 38016625Ssam search_command: 38116625Ssam '/' pattern 38216625Ssam { 38316625Ssam $$ = build(O_SEARCH, build(O_LCON, 1), $2); 38416625Ssam } 38516625Ssam | 38616625Ssam '?' pattern 38716625Ssam { 38816625Ssam $$ = build(O_SEARCH, build(O_LCON, 0), $2); 38916625Ssam } 39016625Ssam ; 39116625Ssam 39216625Ssam pattern: 39316625Ssam STRING 39416625Ssam { 39516625Ssam $$ = build(O_SCON, $1); 39616625Ssam } 39716625Ssam ; 39816625Ssam 399*16934Ssam integer_list: 40016926Ssam INT 40116926Ssam { 402*16934Ssam $$ = build(O_LCON, $1); 40316926Ssam } 40416926Ssam | 405*16934Ssam INT integer_list 40616926Ssam { 40716926Ssam $$ = build(O_COMMA, build(O_LCON, $1), $2); 40816926Ssam } 40916926Ssam ; 41016926Ssam 41116926Ssam signal_list: 41216926Ssam signal 41316926Ssam { 41416926Ssam $$ = build(O_COMMA, $1, nil); 41516926Ssam } 41616926Ssam | 41716926Ssam signal signal_list 41816926Ssam { 41916926Ssam $$ = build(O_COMMA, $1, $2); 42016926Ssam } 42116926Ssam ; 42216926Ssam 42316926Ssam signal: 42416926Ssam INT 42516926Ssam { 42616926Ssam if ($1 < 1 || $1 > NSIG) 42716926Ssam error("Invalid signal %d.", $1); 42816926Ssam $$ = build(O_LCON, $1); 42916926Ssam } 43016926Ssam | 43116926Ssam NAME 43216926Ssam { 43316926Ssam $$ = build(O_LCON, signalname(ident($1))); 43416926Ssam } 43516926Ssam ; 43616926Ssam 4379683Slinton runcommand: 43816607Ssam run arglist 43912482Slinton | 44012524Slinton run 4419683Slinton ; 44216926Ssam 4439683Slinton run: 44412524Slinton RUN shellmode 4459683Slinton { 44616607Ssam arginit(); 4479683Slinton fflush(stdout); 4489683Slinton } 44916607Ssam | 45016607Ssam RERUN shellmode 45116607Ssam { 45216607Ssam fflush(stdout); 45316607Ssam } 4549683Slinton ; 4559683Slinton arglist: 4569683Slinton arglist arg 4579683Slinton | 45812482Slinton arg 4599683Slinton ; 4609683Slinton arg: 46116926Ssam NAME 4629683Slinton { 4639683Slinton newarg(ident($1)); 4649683Slinton } 4659683Slinton | 46616926Ssam STRING 46716607Ssam { 46816607Ssam newarg($1); 46916607Ssam } 47016607Ssam | 4719683Slinton '<' NAME 4729683Slinton { 4739683Slinton inarg(ident($2)); 4749683Slinton } 4759683Slinton | 4769683Slinton '>' NAME 4779683Slinton { 4789683Slinton outarg(ident($2)); 4799683Slinton } 4809683Slinton ; 4819683Slinton step: 48216926Ssam STEP stopaliasing 4839683Slinton { 4849683Slinton $$ = build(O_STEP, true, false); 4859683Slinton } 4869683Slinton | 48716926Ssam STEPI stopaliasing 4889683Slinton { 4899683Slinton $$ = build(O_STEP, false, false); 4909683Slinton } 4919683Slinton | 49216926Ssam NEXT stopaliasing 4939683Slinton { 4949683Slinton $$ = build(O_STEP, true, true); 4959683Slinton } 4969683Slinton | 49716926Ssam NEXTI stopaliasing 4989683Slinton { 4999683Slinton $$ = build(O_STEP, false, true); 5009683Slinton } 5019683Slinton ; 5029683Slinton shellmode: 5039683Slinton /* empty */ 5049683Slinton { 5059683Slinton beginshellmode(); 506*16934Ssam stopaliasing(); 5079683Slinton } 5089683Slinton ; 5099683Slinton sourcepath: 5109683Slinton sourcepath NAME 5119683Slinton { 51214673Slinton $$ = $1; 51314673Slinton list_append(list_item(ident($2)), nil, $$); 5149683Slinton } 5159683Slinton | 5169683Slinton /* empty */ 5179683Slinton { 51814673Slinton $$ = list_alloc(); 5199683Slinton } 5209683Slinton ; 5219683Slinton event: 5229683Slinton where 5239683Slinton | 5249683Slinton exp 5259683Slinton ; 5269683Slinton actions: 5279683Slinton actions cmd ';' 5289683Slinton { 5299683Slinton $$ = $1; 5309683Slinton cmdlist_append($2, $$); 5319683Slinton } 5329683Slinton | 5339683Slinton cmd ';' 5349683Slinton { 5359683Slinton $$ = list_alloc(); 5369683Slinton cmdlist_append($1, $$); 5379683Slinton } 5389683Slinton ; 5399683Slinton cmd: 5409683Slinton command 5419683Slinton | 5429683Slinton rcommand 5439683Slinton ; 5449683Slinton 5459683Slinton /* 5469683Slinton * Redirectable commands. 5479683Slinton */ 5489683Slinton rcommand: 54916926Ssam PRINT stopaliasing exp_list 5509683Slinton { 55116926Ssam $$ = build(O_PRINT, $3); 5529683Slinton } 5539683Slinton | 5549683Slinton WHERE 5559683Slinton { 5569683Slinton $$ = build(O_WHERE); 5579683Slinton } 5589683Slinton | 5599683Slinton examine 5609683Slinton { 5619683Slinton $$ = $1; 5629683Slinton } 5639683Slinton | 56416926Ssam CALL stopaliasing term '(' opt_exp_list ')' 5659683Slinton { 56616926Ssam $$ = build(O_CALL, $3, $5); 5679683Slinton } 5689683Slinton | 56912536Scsvaf DEBUG INT 57012536Scsvaf { 57112536Scsvaf $$ = build(O_DEBUG, $2); 57212536Scsvaf } 57312536Scsvaf | 5749683Slinton DUMP 5759683Slinton { 5769683Slinton $$ = build(O_DUMP); 5779683Slinton } 5789683Slinton | 5799683Slinton STATUS 5809683Slinton { 5819683Slinton $$ = build(O_STATUS); 5829683Slinton } 5839683Slinton ; 5849683Slinton alias_command: 58516926Ssam alias name something 5869683Slinton { 58716926Ssam $$ = build(O_ALIAS, build(O_NAME, $2), $3); 5889683Slinton } 5899683Slinton | 59016926Ssam alias name 5919683Slinton { 5929683Slinton $$ = build(O_ALIAS, build(O_NAME, $2), nil); 5939683Slinton } 5949683Slinton | 59516926Ssam alias 5969683Slinton { 5979683Slinton $$ = build(O_ALIAS, nil, nil); 5989683Slinton } 5999683Slinton ; 60016926Ssam 60116926Ssam alias: 60216926Ssam ALIAS stopaliasing 60316926Ssam ; 60416926Ssam 60516926Ssam stopaliasing: 60616926Ssam /* empty */ 60716926Ssam { 60816926Ssam stopaliasing(); 60916926Ssam } 61016926Ssam ; 61116926Ssam 6129683Slinton trace: 61316926Ssam TRACE stopaliasing 6149683Slinton { 6159683Slinton $$ = O_TRACE; 6169683Slinton } 6179683Slinton | 61816926Ssam TRACEI stopaliasing 6199683Slinton { 6209683Slinton $$ = O_TRACEI; 6219683Slinton } 6229683Slinton ; 6239683Slinton stop: 62416926Ssam STOP stopaliasing 6259683Slinton { 6269683Slinton $$ = O_STOP; 6279683Slinton } 6289683Slinton | 62916926Ssam STOPI stopaliasing 6309683Slinton { 6319683Slinton $$ = O_STOPI; 6329683Slinton } 6339683Slinton ; 6349683Slinton what: 6359683Slinton exp 6369683Slinton { 6379683Slinton $$ = $1; 6389683Slinton } 6399683Slinton | 6409683Slinton STRING ':' line_number 6419683Slinton { 6429683Slinton $$ = build(O_QLINE, build(O_SCON, $1), $3); 6439683Slinton } 6449683Slinton ; 6459683Slinton where: 6469683Slinton IN term 6479683Slinton { 6489683Slinton $$ = $2; 6499683Slinton } 6509683Slinton | 6519683Slinton AT line_number 6529683Slinton { 6539683Slinton $$ = build(O_QLINE, build(O_SCON, cursource), $2); 6549683Slinton } 6559683Slinton | 6569683Slinton AT STRING ':' line_number 6579683Slinton { 6589683Slinton $$ = build(O_QLINE, build(O_SCON, $2), $4); 6599683Slinton } 6609683Slinton ; 6619683Slinton filename: 6629683Slinton NAME 6639683Slinton { 6649683Slinton $$ = ident($1); 6659683Slinton } 6669683Slinton ; 6679683Slinton opt_filename: 6689683Slinton /* empty */ 6699683Slinton { 6709683Slinton $$ = nil; 6719683Slinton } 6729683Slinton | 6739683Slinton filename 6749683Slinton { 6759683Slinton $$ = $1; 6769683Slinton } 6779683Slinton ; 67812482Slinton opt_exp_list: 67912482Slinton exp_list 6809683Slinton { 68112482Slinton $$ = $1; 6829683Slinton } 6839683Slinton | 68412482Slinton /* empty */ 6859683Slinton { 68612482Slinton $$ = nil; 6879683Slinton } 6889683Slinton ; 6899683Slinton list_command: 69016926Ssam list 6919683Slinton { 6929683Slinton $$ = build(O_LIST, 6939683Slinton build(O_LCON, (long) cursrcline), 6949683Slinton build(O_LCON, (long) cursrcline + 9) 6959683Slinton ); 6969683Slinton } 6979683Slinton | 69816926Ssam list line_number 6999683Slinton { 7009683Slinton $$ = build(O_LIST, $2, $2); 7019683Slinton } 7029683Slinton | 70316926Ssam list line_number ',' line_number 7049683Slinton { 7059683Slinton $$ = build(O_LIST, $2, $4); 7069683Slinton } 7079683Slinton | 70816926Ssam list symbol 7099683Slinton { 71016926Ssam $$ = build(O_LIST, $2, nil); 7119683Slinton } 7129683Slinton ; 71316926Ssam 71416926Ssam list: 71516926Ssam LIST stopaliasing 71616607Ssam ; 71716926Ssam 7189683Slinton line_number: 7199683Slinton INT 7209683Slinton { 7219683Slinton $$ = build(O_LCON, $1); 7229683Slinton } 7239683Slinton | 7249683Slinton '$' 7259683Slinton { 7269683Slinton $$ = build(O_LCON, (long) LASTLINE); 7279683Slinton } 7289683Slinton ; 7299683Slinton examine: 7309683Slinton address '/' count mode 7319683Slinton { 7329683Slinton $$ = build(O_EXAMINE, $4, $1, nil, $3); 7339683Slinton } 7349683Slinton | 7359683Slinton address ',' address '/' mode 7369683Slinton { 7379683Slinton $$ = build(O_EXAMINE, $5, $1, $3, 0); 7389683Slinton } 7399683Slinton | 740*16934Ssam '/' stopaliasing count mode 7419683Slinton { 742*16934Ssam $$ = build(O_EXAMINE, $4, build(O_LCON, (long) prtaddr), nil, $3); 7439683Slinton } 74411173Slinton | 74511173Slinton address '=' mode 74611173Slinton { 74711173Slinton $$ = build(O_EXAMINE, $3, $1, nil, 0); 74811173Slinton } 7499683Slinton ; 7509683Slinton address: 751*16934Ssam INT stopaliasing 7529683Slinton { 7539683Slinton $$ = build(O_LCON, $1); 7549683Slinton } 7559683Slinton | 756*16934Ssam '&' stopaliasing term 7579683Slinton { 758*16934Ssam $$ = amper($3); 7599683Slinton } 7609683Slinton | 7619683Slinton address '+' address 7629683Slinton { 7639683Slinton $$ = build(O_ADD, $1, $3); 7649683Slinton } 7659683Slinton | 7669683Slinton address '-' address 7679683Slinton { 7689683Slinton $$ = build(O_SUB, $1, $3); 7699683Slinton } 7709683Slinton | 7719683Slinton address '*' address 7729683Slinton { 7739683Slinton $$ = build(O_MUL, $1, $3); 7749683Slinton } 7759683Slinton | 776*16934Ssam '*' stopaliasing address %prec UNARYSIGN 7779683Slinton { 778*16934Ssam $$ = build(O_INDIR, $3); 7799683Slinton } 7809683Slinton | 781*16934Ssam '(' stopaliasing exp ')' 7829683Slinton { 783*16934Ssam $$ = $3; 7849683Slinton } 7859683Slinton ; 7869683Slinton count: 7879683Slinton /* empty */ 7889683Slinton { 7899683Slinton $$ = 1; 7909683Slinton } 7919683Slinton | 7929683Slinton INT 7939683Slinton { 7949683Slinton $$ = $1; 7959683Slinton } 7969683Slinton ; 7979683Slinton mode: 7989683Slinton name 7999683Slinton { 8009683Slinton $$ = ident($1); 8019683Slinton curformat = $$; 8029683Slinton } 8039683Slinton | 8049683Slinton /* empty */ 8059683Slinton { 8069683Slinton $$ = curformat; 8079683Slinton } 8089683Slinton ; 8099683Slinton opt_cond: 8109683Slinton /* empty */ 8119683Slinton { 8129683Slinton $$ = nil; 8139683Slinton } 8149683Slinton | 8159683Slinton IF boolean_exp 8169683Slinton { 8179683Slinton $$ = $2; 8189683Slinton } 8199683Slinton ; 8209683Slinton exp_list: 8219683Slinton exp 8229683Slinton { 8239683Slinton $$ = build(O_COMMA, $1, nil); 8249683Slinton } 8259683Slinton | 8269683Slinton exp ',' exp_list 8279683Slinton { 8289683Slinton $$ = build(O_COMMA, $1, $3); 8299683Slinton } 8309683Slinton ; 8319683Slinton exp: 8329683Slinton term 8339683Slinton { 8349683Slinton $$ = build(O_RVAL, $1); 8359683Slinton } 8369683Slinton | 8379683Slinton constant 8389683Slinton { 8399683Slinton $$ = $1; 8409683Slinton } 8419683Slinton | 84216607Ssam exp '\\' opt_qual_symbol 84311173Slinton { 84411173Slinton $$ = build(O_TYPERENAME, $1, $3); 84511173Slinton } 84611173Slinton | 8479683Slinton '+' exp %prec UNARYSIGN 8489683Slinton { 8499683Slinton $$ = $2; 8509683Slinton } 8519683Slinton | 8529683Slinton '-' exp %prec UNARYSIGN 8539683Slinton { 8549683Slinton $$ = build(O_NEG, $2); 8559683Slinton } 8569683Slinton | 8579683Slinton '&' exp %prec UNARYSIGN 8589683Slinton { 8599683Slinton $$ = amper($2); 8609683Slinton } 8619683Slinton | 8629683Slinton exp '+' exp 8639683Slinton { 8649683Slinton $$ = build(O_ADD, $1, $3); 8659683Slinton } 8669683Slinton | 8679683Slinton exp '-' exp 8689683Slinton { 8699683Slinton $$ = build(O_SUB, $1, $3); 8709683Slinton } 8719683Slinton | 8729683Slinton exp '*' exp 8739683Slinton { 8749683Slinton $$ = build(O_MUL, $1, $3); 8759683Slinton } 8769683Slinton | 8779683Slinton exp '/' exp 8789683Slinton { 8799683Slinton $$ = build(O_DIVF, $1, $3); 8809683Slinton } 8819683Slinton | 8829683Slinton exp DIV exp 8839683Slinton { 8849683Slinton $$ = build(O_DIV, $1, $3); 8859683Slinton } 8869683Slinton | 8879683Slinton exp MOD exp 8889683Slinton { 8899683Slinton $$ = build(O_MOD, $1, $3); 8909683Slinton } 8919683Slinton | 8929683Slinton exp AND exp 8939683Slinton { 8949683Slinton $$ = build(O_AND, $1, $3); 8959683Slinton } 8969683Slinton | 8979683Slinton exp OR exp 8989683Slinton { 8999683Slinton $$ = build(O_OR, $1, $3); 9009683Slinton } 9019683Slinton | 9029683Slinton exp '<' exp 9039683Slinton { 9049683Slinton $$ = build(O_LT, $1, $3); 9059683Slinton } 9069683Slinton | 9079683Slinton exp '<' '=' exp 9089683Slinton { 9099683Slinton $$ = build(O_LE, $1, $4); 9109683Slinton } 9119683Slinton | 9129683Slinton exp '>' exp 9139683Slinton { 9149683Slinton $$ = build(O_GT, $1, $3); 9159683Slinton } 9169683Slinton | 9179683Slinton exp '>' '=' exp 9189683Slinton { 9199683Slinton $$ = build(O_GE, $1, $4); 9209683Slinton } 9219683Slinton | 9229683Slinton exp '=' exp 9239683Slinton { 9249683Slinton $$ = build(O_EQ, $1, $3); 9259683Slinton } 9269683Slinton | 9279683Slinton exp '=' '=' exp 9289683Slinton { 9299683Slinton $$ = build(O_EQ, $1, $4); 9309683Slinton } 9319683Slinton | 9329683Slinton exp '<' '>' exp 9339683Slinton { 9349683Slinton $$ = build(O_NE, $1, $4); 9359683Slinton } 9369683Slinton | 9379683Slinton exp '!' '=' exp 9389683Slinton { 9399683Slinton $$ = build(O_NE, $1, $4); 9409683Slinton } 9419683Slinton | 9429683Slinton '(' exp ')' 9439683Slinton { 9449683Slinton $$ = $2; 9459683Slinton } 9469683Slinton ; 9479683Slinton term: 9489683Slinton symbol 9499683Slinton { 9509683Slinton $$ = $1; 9519683Slinton } 9529683Slinton | 9539683Slinton term '[' exp_list ']' 9549683Slinton { 9559683Slinton $$ = subscript($1, $3); 9569683Slinton } 9579683Slinton | 9589683Slinton term '.' name 9599683Slinton { 9609683Slinton $$ = dot($1, $3); 9619683Slinton } 9629683Slinton | 9639683Slinton term ARROW name 9649683Slinton { 9659683Slinton $$ = dot($1, $3); 9669683Slinton } 9679683Slinton | 9689683Slinton '*' term %prec UNARYSIGN 9699683Slinton { 9709683Slinton $$ = build(O_INDIR, $2); 9719683Slinton } 9729683Slinton | 9739683Slinton '*' '(' exp ')' %prec UNARYSIGN 9749683Slinton { 9759683Slinton $$ = build(O_INDIR, $3); 9769683Slinton } 9779683Slinton | 9789683Slinton term '^' %prec UNARYSIGN 9799683Slinton { 9809683Slinton $$ = build(O_INDIR, $1); 9819683Slinton } 9829683Slinton | 9839683Slinton '#' term %prec UNARYSIGN 9849683Slinton { 9859683Slinton $$ = concrete($2); 9869683Slinton } 9879683Slinton | 98816607Ssam '#' '(' exp ')' %prec UNARYSIGN 98916607Ssam { 99016607Ssam $$ = concrete($3); 99116607Ssam } 99216607Ssam | 99312482Slinton term '(' opt_exp_list ')' 9949683Slinton { 9959683Slinton $$ = build(O_CALL, $1, $3); 9969683Slinton } 9979683Slinton ; 9989683Slinton boolean_exp: 9999683Slinton exp 10009683Slinton { 10019683Slinton chkboolean($1); 10029683Slinton $$ = $1; 10039683Slinton } 10049683Slinton ; 10059683Slinton constant: 10069683Slinton INT 10079683Slinton { 10089683Slinton $$ = build(O_LCON, $1); 10099683Slinton } 10109683Slinton | 10119683Slinton REAL 10129683Slinton { 10139683Slinton $$ = build(O_FCON, $1); 10149683Slinton } 10159683Slinton | 10169683Slinton STRING 10179683Slinton { 10189683Slinton $$ = build(O_SCON, $1); 10199683Slinton } 10209683Slinton ; 102116607Ssam opt_qual_symbol: 102216607Ssam symbol 102316607Ssam { 102416607Ssam $$ = $1; 102516607Ssam } 102616607Ssam | 102716607Ssam opt_qual_symbol '.' name 102816607Ssam { 102916607Ssam $$ = dot($1, $3); 103016607Ssam } 103116607Ssam ; 10329683Slinton symbol: 10339683Slinton name 10349683Slinton { 10359683Slinton $$ = build(O_SYM, which($1)); 10369683Slinton } 103716607Ssam | 103816607Ssam '.' name 103916607Ssam { 104016607Ssam $$ = dot(build(O_SYM, program), $2); 104116607Ssam } 10429683Slinton ; 10439683Slinton name: 10449683Slinton NAME 10459683Slinton { 10469683Slinton $$ = $1; 10479683Slinton } 10489683Slinton | 10499683Slinton keyword 10509683Slinton { 10519683Slinton $$ = $1; 10529683Slinton } 10539683Slinton keyword: 105412536Scsvaf ALIAS | AND | ASSIGN | AT | CALL | CATCH | CONT | DEBUG | DELETE | DIV | 105516607Ssam DOWN | DUMP | EDIT | FILE | FUNC | GRIPE | HELP | IGNORE | IN | LIST | 105616607Ssam MOD | NEXT | NEXTI | NIL | NOT | OR | PRINT | PSYM | QUIT | 105716607Ssam RERUN | RETURN | RUN | SH | SKIP | SOURCE | STATUS | STEP | STEPI | 105816607Ssam STOP | STOPI | TRACE | TRACEI | UP | 105913840Slinton USE | WHATIS | WHEN | WHERE | WHEREIS | WHICH 10609683Slinton ; 106116926Ssam 106216926Ssam something: 106316926Ssam NAME 106416926Ssam { 106516926Ssam $$ = build(O_NAME, $1); 106616926Ssam } 106716926Ssam | 106816926Ssam keyword 106916926Ssam { 107016926Ssam $$ = build(O_NAME, $1); 107116926Ssam } 107216926Ssam | 107316926Ssam STRING 107416926Ssam { 107516926Ssam $$ = build(O_SCON, $1); 107616926Ssam } 107716926Ssam ; 1078