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