121633Sdist %{ 221633Sdist 321631Sdist /* 4*38105Sbostic * Copyright (c) 1983 The Regents of the University of California. 5*38105Sbostic * All rights reserved. 621631Sdist * 7*38105Sbostic * Redistribution and use in source and binary forms are permitted 8*38105Sbostic * provided that the above copyright notice and this paragraph are 9*38105Sbostic * duplicated in all such forms and that any documentation, 10*38105Sbostic * advertising materials, and other materials related to such 11*38105Sbostic * distribution and use acknowledge that the software was developed 12*38105Sbostic * by the University of California, Berkeley. The name of the 13*38105Sbostic * University may not be used to endorse or promote products derived 14*38105Sbostic * from this software without specific prior written permission. 15*38105Sbostic * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 16*38105Sbostic * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 17*38105Sbostic * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 1821631Sdist */ 1921631Sdist 20*38105Sbostic #ifndef lint 21*38105Sbostic static char sccsid[] = "@(#)commands.y 5.5 (Berkeley) 05/23/89"; 22*38105Sbostic #endif /* not lint */ 2318214Slinton 249683Slinton /* 259683Slinton * Yacc grammar for debugger commands. 269683Slinton */ 279683Slinton 289683Slinton #include "defs.h" 299683Slinton #include "symbols.h" 309683Slinton #include "operators.h" 319683Slinton #include "tree.h" 329683Slinton #include "process.h" 339683Slinton #include "source.h" 349683Slinton #include "scanner.h" 3518214Slinton #include "keywords.h" 369683Slinton #include "names.h" 3714673Slinton #include "lists.h" 389683Slinton 399683Slinton private String curformat = "X"; 409683Slinton 419683Slinton %} 429683Slinton 439683Slinton %term 4416607Ssam ALIAS AND ASSIGN AT CALL CATCH CONT DEBUG DELETE DIV DOWN DUMP 459683Slinton EDIT FILE FUNC GRIPE HELP IF IGNORE IN LIST MOD NEXT NEXTI NIL NOT OR 4618214Slinton PRINT PSYM QUIT RERUN RETURN RUN SET SH SKIP SOURCE STATUS STEP STEPI 4718214Slinton STOP STOPI TRACE TRACEI UNALIAS UNSET UP USE 4818214Slinton WHATIS WHEN WHERE WHEREIS WHICH 499683Slinton 5018214Slinton %term INT CHAR REAL NAME STRING 5118214Slinton %term ARROW 529683Slinton 539683Slinton %right INT 549683Slinton %binary REDIRECT 559683Slinton %binary '<' '=' '>' '!' IN 569683Slinton %left '+' '-' OR 579683Slinton %left UNARYSIGN 589683Slinton %left '*' '/' DIV MOD AND 5918214Slinton %left '\\' 609683Slinton %left NOT '(' '[' '.' '^' ARROW 619683Slinton 629683Slinton %union { 639683Slinton Name y_name; 649683Slinton Symbol y_sym; 659683Slinton Node y_node; 669683Slinton Integer y_int; 679683Slinton Operator y_op; 689683Slinton long y_long; 6918214Slinton char y_char; 709683Slinton double y_real; 719683Slinton String y_string; 729683Slinton Boolean y_bool; 739683Slinton Cmdlist y_cmdlist; 7414673Slinton List y_list; 759683Slinton }; 769683Slinton 779683Slinton %type <y_op> trace stop 7818214Slinton %type <y_long> INT count signal 7918214Slinton %type <y_char> CHAR 809683Slinton %type <y_real> REAL 819683Slinton %type <y_string> STRING redirectout filename opt_filename mode 8216607Ssam %type <y_name> ALIAS AND ASSIGN AT CALL CATCH CONT 8316607Ssam %type <y_name> DEBUG DELETE DIV DOWN DUMP 849683Slinton %type <y_name> EDIT FILE FUNC GRIPE HELP IF IGNORE IN LIST MOD 859683Slinton %type <y_name> NEXT NEXTI NIL NOT OR 8618214Slinton %type <y_name> PRINT PSYM QUIT RERUN RETURN RUN SET SH SKIP SOURCE STATUS 8716607Ssam %type <y_name> STEP STEPI STOP STOPI TRACE TRACEI 8818214Slinton %type <y_name> UNALIAS UNSET UP USE WHATIS WHEN WHERE WHEREIS WHICH 899683Slinton %type <y_name> name NAME keyword 9016607Ssam %type <y_node> opt_qual_symbol symbol 919683Slinton %type <y_node> command rcommand cmd step what where examine 9212482Slinton %type <y_node> event opt_exp_list opt_cond 939683Slinton %type <y_node> exp_list exp term boolean_exp constant address 9416934Ssam %type <y_node> integer_list alias_command list_command line_number 959683Slinton %type <y_cmdlist> actions 9618214Slinton %type <y_list> sourcepath name_list 979683Slinton 989683Slinton %% 999683Slinton 1009683Slinton input: 1019683Slinton input command_nl 1029683Slinton | 1039683Slinton /* empty */ 1049683Slinton ; 1059683Slinton command_nl: 1069683Slinton command_line '\n' 10718214Slinton | 10818214Slinton command_line ';' 10916926Ssam { 11018214Slinton chkalias = true; 11116926Ssam } 1129683Slinton | 1139683Slinton '\n' 1149683Slinton ; 1159683Slinton 1169683Slinton command_line: 1179683Slinton command 1189683Slinton { 1199683Slinton if ($1 != nil) { 12018214Slinton topeval($1); 1219683Slinton } 1229683Slinton } 1239683Slinton | 1249683Slinton rcommand redirectout 1259683Slinton { 1269683Slinton if ($1 != nil) { 1279683Slinton if ($2 != nil) { 1289683Slinton setout($2); 12918214Slinton topeval($1); 1309683Slinton unsetout(); 1319683Slinton } else { 13218214Slinton topeval($1); 1339683Slinton } 1349683Slinton } 1359683Slinton } 1369683Slinton ; 1379683Slinton redirectout: 1389683Slinton '>' shellmode NAME 1399683Slinton { 1409683Slinton $$ = ident($3); 1419683Slinton } 1429683Slinton | 1439683Slinton /* empty */ 1449683Slinton { 1459683Slinton $$ = nil; 1469683Slinton } 1479683Slinton ; 1489683Slinton 1499683Slinton /* 1509683Slinton * Non-redirectable commands. 1519683Slinton */ 1529683Slinton command: 1539683Slinton alias_command 1549683Slinton { 1559683Slinton $$ = $1; 1569683Slinton } 1579683Slinton | 15818214Slinton ASSIGN exp '=' exp 1599683Slinton { 16018214Slinton $$ = build(O_ASSIGN, unrval($2), $4); 1619683Slinton } 1629683Slinton | 16318214Slinton CATCH signal 1649683Slinton { 16518214Slinton $$ = build(O_CATCH, $2); 1669683Slinton } 1679683Slinton | 16818214Slinton CATCH 16916926Ssam { 17018214Slinton $$ = build(O_CATCH, 0); 17116926Ssam } 17216926Ssam | 1739683Slinton CONT 1749683Slinton { 17514673Slinton $$ = build(O_CONT, (long) DEFSIG); 1769683Slinton } 1779683Slinton | 17818214Slinton CONT signal 17911870Slinton { 18011870Slinton $$ = build(O_CONT, $2); 18111870Slinton } 18211870Slinton | 18316934Ssam DELETE integer_list 1849683Slinton { 1859683Slinton $$ = build(O_DELETE, $2); 1869683Slinton } 1879683Slinton | 18816607Ssam DOWN 18916607Ssam { 19016607Ssam $$ = build(O_DOWN, build(O_LCON, (long) 1)); 19116607Ssam } 19216607Ssam | 19316607Ssam DOWN INT 19416607Ssam { 19516607Ssam $$ = build(O_DOWN, build(O_LCON, (long) $2)); 19616607Ssam } 19716607Ssam | 1989683Slinton EDIT shellmode opt_filename 1999683Slinton { 2009683Slinton $$ = build(O_EDIT, $3); 2019683Slinton } 2029683Slinton | 2039683Slinton FILE shellmode opt_filename 2049683Slinton { 2059683Slinton $$ = build(O_CHFILE, $3); 2069683Slinton } 2079683Slinton | 2089683Slinton FUNC 2099683Slinton { 2109683Slinton $$ = build(O_FUNC, nil); 2119683Slinton } 2129683Slinton | 21318214Slinton FUNC opt_qual_symbol 2149683Slinton { 21518214Slinton $$ = build(O_FUNC, $2); 2169683Slinton } 2179683Slinton | 2189683Slinton GRIPE 2199683Slinton { 2209683Slinton $$ = build(O_GRIPE); 2219683Slinton } 2229683Slinton | 2239683Slinton HELP 2249683Slinton { 2259683Slinton $$ = build(O_HELP); 2269683Slinton } 2279683Slinton | 22818214Slinton IGNORE signal 2299683Slinton { 23018214Slinton $$ = build(O_IGNORE, $2); 2319683Slinton } 2329683Slinton | 23318214Slinton IGNORE 23416926Ssam { 23518214Slinton $$ = build(O_IGNORE, 0); 23616926Ssam } 23716926Ssam | 2389683Slinton list_command 2399683Slinton { 2409683Slinton $$ = $1; 2419683Slinton } 2429683Slinton | 24318214Slinton PSYM exp 2449683Slinton { 24518214Slinton $$ = build(O_PSYM, unrval($2)); 2469683Slinton } 2479683Slinton | 2489683Slinton QUIT 2499683Slinton { 2509683Slinton if (not popinput()) { 2519683Slinton quit(0); 2529683Slinton } else { 2539683Slinton $$ = nil; 2549683Slinton } 2559683Slinton } 2569683Slinton | 25716607Ssam RETURN 25816607Ssam { 25916607Ssam $$ = build(O_RETURN, nil); 26016607Ssam } 26116607Ssam | 26218214Slinton RETURN opt_qual_symbol 26316607Ssam { 26418214Slinton $$ = build(O_RETURN, $2); 26516607Ssam } 26616607Ssam | 2679683Slinton runcommand 2689683Slinton { 2699683Slinton run(); 2709683Slinton /* NOTREACHED */ 2719683Slinton } 2729683Slinton | 27318214Slinton SET name '=' exp 27418214Slinton { 27518214Slinton $$ = build(O_SET, build(O_NAME, $2), $4); 27618214Slinton } 27718214Slinton | 27818214Slinton SET name 27918214Slinton { 28018214Slinton $$ = build(O_SET, build(O_NAME, $2), nil); 28118214Slinton } 28218214Slinton | 28318214Slinton SET 28418214Slinton { 28518214Slinton $$ = build(O_SET, nil, nil); 28618214Slinton } 28718214Slinton | 2889683Slinton SH 2899683Slinton { 2909683Slinton shellline(); 2919683Slinton $$ = nil; 2929683Slinton } 2939683Slinton | 2949683Slinton SOURCE shellmode filename 2959683Slinton { 2969683Slinton $$ = build(O_SOURCE, $3); 2979683Slinton } 2989683Slinton | 2999683Slinton step 3009683Slinton { 3019683Slinton $$ = $1; 3029683Slinton } 3039683Slinton | 3049683Slinton stop where opt_cond 3059683Slinton { 3069683Slinton $$ = build($1, nil, $2, $3); 3079683Slinton } 3089683Slinton | 3099683Slinton stop what opt_cond 3109683Slinton { 3119683Slinton $$ = build($1, $2, nil, $3); 3129683Slinton } 3139683Slinton | 3149683Slinton stop IF boolean_exp 3159683Slinton { 3169683Slinton $$ = build($1, nil, nil, $3); 3179683Slinton } 3189683Slinton | 3199683Slinton trace what where opt_cond 3209683Slinton { 3219683Slinton $$ = build($1, $2, $3, $4); 3229683Slinton } 3239683Slinton | 3249683Slinton trace where opt_cond 3259683Slinton { 3269683Slinton $$ = build($1, nil, $2, $3); 3279683Slinton } 3289683Slinton | 3299683Slinton trace what opt_cond 3309683Slinton { 3319683Slinton $$ = build($1, $2, nil, $3); 3329683Slinton } 3339683Slinton | 3349683Slinton trace opt_cond 3359683Slinton { 3369683Slinton $$ = build($1, nil, nil, $2); 3379683Slinton } 3389683Slinton | 33918214Slinton UNALIAS name 34018214Slinton { 34118214Slinton $$ = build(O_UNALIAS, build(O_NAME, $2)); 34218214Slinton } 34318214Slinton | 34418214Slinton UNSET name 34518214Slinton { 34618214Slinton $$ = build(O_UNSET, build(O_NAME, $2)); 34718214Slinton } 34818214Slinton | 34916607Ssam UP 3509683Slinton { 35116607Ssam $$ = build(O_UP, build(O_LCON, (long) 1)); 3529683Slinton } 3539683Slinton | 35416607Ssam UP INT 3559683Slinton { 35616607Ssam $$ = build(O_UP, build(O_LCON, (long) $2)); 3579683Slinton } 3589683Slinton | 3599683Slinton USE shellmode sourcepath 3609683Slinton { 36114673Slinton String dir; 36214673Slinton 3639683Slinton $$ = nil; 36414673Slinton if (list_size($3) == 0) { 36514673Slinton foreach (String, dir, sourcepath) 36614673Slinton printf("%s ", dir); 36714673Slinton endfor 36814673Slinton printf("\n"); 36914673Slinton } else { 37014673Slinton foreach (String, dir, sourcepath) 37114673Slinton list_delete(list_curitem(sourcepath), sourcepath); 37214673Slinton endfor 37314673Slinton sourcepath = $3; 3749683Slinton } 3759683Slinton } 37616604Ssam | 37718214Slinton WHATIS opt_qual_symbol 37816604Ssam { 37918214Slinton $$ = build(O_WHATIS, $2); 38016604Ssam } 38116607Ssam | 38218214Slinton WHEN event '{' actions '}' 38316604Ssam { 38418214Slinton $$ = build(O_ADDEVENT, $2, $4); 38516604Ssam } 38616604Ssam | 38718214Slinton WHEREIS name 38816604Ssam { 38918214Slinton $$ = build(O_WHEREIS, build(O_SYM, lookup($2))); 39016604Ssam } 39116607Ssam | 39218214Slinton WHICH symbol 39316604Ssam { 39418214Slinton $$ = build(O_WHICH, $2); 39516604Ssam } 39616625Ssam | 39718214Slinton '/' 39816625Ssam { 39918214Slinton $$ = build(O_SEARCH, 40018214Slinton build(O_LCON, (long) '/'), 40118214Slinton build(O_SCON, strdup(scanner_linebuf)) 40218214Slinton ); 40318214Slinton gobble(); 40418214Slinton insertinput("\n"); 40516625Ssam } 40616625Ssam | 40718214Slinton '?' 40816625Ssam { 40918214Slinton $$ = build(O_SEARCH, 41018214Slinton build(O_LCON, (long) '?'), 41118214Slinton build(O_SCON, strdup(scanner_linebuf)) 41218214Slinton ); 41318214Slinton gobble(); 41418214Slinton insertinput("\n"); 41516625Ssam } 41616625Ssam ; 41716926Ssam signal: 41816926Ssam INT 41916926Ssam { 42018214Slinton $$ = $1; 42116926Ssam } 42216926Ssam | 42318214Slinton name 42416926Ssam { 42518214Slinton $$ = siglookup(ident($1)); 42616926Ssam } 42716926Ssam ; 4289683Slinton runcommand: 42916607Ssam run arglist 43012482Slinton | 43112524Slinton run 4329683Slinton ; 4339683Slinton run: 43412524Slinton RUN shellmode 4359683Slinton { 43616607Ssam arginit(); 4379683Slinton fflush(stdout); 4389683Slinton } 43916607Ssam | 44016607Ssam RERUN shellmode 44116607Ssam { 44216607Ssam fflush(stdout); 44316607Ssam } 4449683Slinton ; 4459683Slinton arglist: 4469683Slinton arglist arg 4479683Slinton | 44812482Slinton arg 4499683Slinton ; 4509683Slinton arg: 45118214Slinton NAME 4529683Slinton { 4539683Slinton newarg(ident($1)); 4549683Slinton } 4559683Slinton | 45618214Slinton STRING 45716607Ssam { 45816607Ssam newarg($1); 45916607Ssam } 46016607Ssam | 4619683Slinton '<' NAME 4629683Slinton { 4639683Slinton inarg(ident($2)); 4649683Slinton } 4659683Slinton | 4669683Slinton '>' NAME 4679683Slinton { 4689683Slinton outarg(ident($2)); 4699683Slinton } 4709683Slinton ; 4719683Slinton step: 47218214Slinton STEP 4739683Slinton { 4749683Slinton $$ = build(O_STEP, true, false); 4759683Slinton } 4769683Slinton | 47718214Slinton STEPI 4789683Slinton { 4799683Slinton $$ = build(O_STEP, false, false); 4809683Slinton } 4819683Slinton | 48218214Slinton NEXT 4839683Slinton { 4849683Slinton $$ = build(O_STEP, true, true); 4859683Slinton } 4869683Slinton | 48718214Slinton NEXTI 4889683Slinton { 4899683Slinton $$ = build(O_STEP, false, true); 4909683Slinton } 4919683Slinton ; 4929683Slinton shellmode: 4939683Slinton /* empty */ 4949683Slinton { 4959683Slinton beginshellmode(); 4969683Slinton } 4979683Slinton ; 4989683Slinton sourcepath: 4999683Slinton sourcepath NAME 5009683Slinton { 50114673Slinton $$ = $1; 50214673Slinton list_append(list_item(ident($2)), nil, $$); 5039683Slinton } 5049683Slinton | 5059683Slinton /* empty */ 5069683Slinton { 50714673Slinton $$ = list_alloc(); 5089683Slinton } 5099683Slinton ; 5109683Slinton event: 5119683Slinton where 5129683Slinton | 5139683Slinton exp 5149683Slinton ; 5159683Slinton actions: 5169683Slinton actions cmd ';' 5179683Slinton { 5189683Slinton $$ = $1; 5199683Slinton cmdlist_append($2, $$); 5209683Slinton } 5219683Slinton | 5229683Slinton cmd ';' 5239683Slinton { 5249683Slinton $$ = list_alloc(); 5259683Slinton cmdlist_append($1, $$); 5269683Slinton } 5279683Slinton ; 5289683Slinton cmd: 5299683Slinton command 5309683Slinton | 5319683Slinton rcommand 5329683Slinton ; 5339683Slinton 5349683Slinton /* 5359683Slinton * Redirectable commands. 5369683Slinton */ 5379683Slinton rcommand: 53818214Slinton PRINT exp_list 5399683Slinton { 54018214Slinton $$ = build(O_PRINT, $2); 5419683Slinton } 5429683Slinton | 5439683Slinton WHERE 5449683Slinton { 5459683Slinton $$ = build(O_WHERE); 5469683Slinton } 5479683Slinton | 5489683Slinton examine 5499683Slinton { 5509683Slinton $$ = $1; 5519683Slinton } 5529683Slinton | 55318214Slinton CALL term '(' opt_exp_list ')' 5549683Slinton { 55518214Slinton $$ = build(O_CALLPROC, $2, $4); 5569683Slinton } 5579683Slinton | 55812536Scsvaf DEBUG INT 55912536Scsvaf { 56012536Scsvaf $$ = build(O_DEBUG, $2); 56112536Scsvaf } 56212536Scsvaf | 56318214Slinton DEBUG '-' INT 56418214Slinton { 56518214Slinton $$ = build(O_DEBUG, -$3); 56618214Slinton } 56718214Slinton | 56818214Slinton DUMP opt_qual_symbol 56918214Slinton { 57018214Slinton $$ = build(O_DUMP, $2); 57118214Slinton } 57218214Slinton | 57318214Slinton DUMP '.' 57418214Slinton { 57518214Slinton $$ = build(O_DUMP, nil); 57618214Slinton } 57718214Slinton | 5789683Slinton DUMP 5799683Slinton { 58018214Slinton $$ = build(O_DUMP, build(O_SYM, curfunc)); 5819683Slinton } 5829683Slinton | 5839683Slinton STATUS 5849683Slinton { 5859683Slinton $$ = build(O_STATUS); 5869683Slinton } 5879683Slinton ; 5889683Slinton alias_command: 58918214Slinton ALIAS name name 5909683Slinton { 59118214Slinton $$ = build(O_ALIAS, build(O_NAME, $2), build(O_NAME, $3)); 5929683Slinton } 5939683Slinton | 59418214Slinton ALIAS name STRING 5959683Slinton { 59618214Slinton $$ = build(O_ALIAS, build(O_NAME, $2), build(O_SCON, $3)); 59718214Slinton } 59818214Slinton | 59918214Slinton ALIAS name '(' name_list ')' STRING 60018214Slinton { 60118214Slinton $$ = build(O_ALIAS, 60218214Slinton build(O_COMMA, build(O_NAME, $2), (Node) $4), 60318214Slinton build(O_SCON, $6) 60418214Slinton ); 60518214Slinton } 60618214Slinton | 60718214Slinton ALIAS name 60818214Slinton { 6099683Slinton $$ = build(O_ALIAS, build(O_NAME, $2), nil); 6109683Slinton } 6119683Slinton | 61218214Slinton ALIAS 6139683Slinton { 6149683Slinton $$ = build(O_ALIAS, nil, nil); 6159683Slinton } 6169683Slinton ; 61718214Slinton name_list: 61818214Slinton name_list ',' name 61916926Ssam { 62018214Slinton $$ = $1; 62118214Slinton list_append(list_item($3), nil, $$); 62216926Ssam } 62318214Slinton | 62418214Slinton name 62518214Slinton { 62618214Slinton $$ = list_alloc(); 62718214Slinton list_append(list_item($1), nil, $$); 62818214Slinton } 62916926Ssam ; 6309683Slinton trace: 63118214Slinton TRACE 6329683Slinton { 6339683Slinton $$ = O_TRACE; 6349683Slinton } 6359683Slinton | 63618214Slinton TRACEI 6379683Slinton { 6389683Slinton $$ = O_TRACEI; 6399683Slinton } 6409683Slinton ; 6419683Slinton stop: 64218214Slinton STOP 6439683Slinton { 6449683Slinton $$ = O_STOP; 6459683Slinton } 6469683Slinton | 64718214Slinton STOPI 6489683Slinton { 6499683Slinton $$ = O_STOPI; 6509683Slinton } 6519683Slinton ; 6529683Slinton what: 6539683Slinton exp 6549683Slinton { 6559683Slinton $$ = $1; 6569683Slinton } 6579683Slinton | 6589683Slinton STRING ':' line_number 6599683Slinton { 6609683Slinton $$ = build(O_QLINE, build(O_SCON, $1), $3); 6619683Slinton } 6629683Slinton ; 6639683Slinton where: 66418214Slinton IN exp 6659683Slinton { 66618214Slinton $$ = unrval($2); 6679683Slinton } 6689683Slinton | 6699683Slinton AT line_number 6709683Slinton { 67118214Slinton $$ = build(O_QLINE, build(O_SCON, strdup(cursource)), $2); 6729683Slinton } 6739683Slinton | 6749683Slinton AT STRING ':' line_number 6759683Slinton { 6769683Slinton $$ = build(O_QLINE, build(O_SCON, $2), $4); 6779683Slinton } 6789683Slinton ; 6799683Slinton filename: 6809683Slinton NAME 6819683Slinton { 6829683Slinton $$ = ident($1); 6839683Slinton } 6849683Slinton ; 6859683Slinton opt_filename: 6869683Slinton /* empty */ 6879683Slinton { 6889683Slinton $$ = nil; 6899683Slinton } 6909683Slinton | 6919683Slinton filename 6929683Slinton { 6939683Slinton $$ = $1; 6949683Slinton } 6959683Slinton ; 69612482Slinton opt_exp_list: 69712482Slinton exp_list 6989683Slinton { 69912482Slinton $$ = $1; 7009683Slinton } 7019683Slinton | 70212482Slinton /* empty */ 7039683Slinton { 70412482Slinton $$ = nil; 7059683Slinton } 7069683Slinton ; 7079683Slinton list_command: 70818214Slinton LIST 7099683Slinton { 7109683Slinton $$ = build(O_LIST, 7119683Slinton build(O_LCON, (long) cursrcline), 71233312Sdonn build(O_LCON, (long) cursrcline + srcwindowlen() - 1) 7139683Slinton ); 7149683Slinton } 7159683Slinton | 71618214Slinton LIST line_number 7179683Slinton { 7189683Slinton $$ = build(O_LIST, $2, $2); 7199683Slinton } 7209683Slinton | 72118214Slinton LIST line_number ',' line_number 7229683Slinton { 7239683Slinton $$ = build(O_LIST, $2, $4); 7249683Slinton } 7259683Slinton | 72618214Slinton LIST opt_qual_symbol 7279683Slinton { 72833312Sdonn $$ = build(O_LIST, $2, $2); 7299683Slinton } 7309683Slinton ; 73118214Slinton integer_list: 73218214Slinton INT 73318214Slinton { 73418214Slinton $$ = build(O_LCON, $1); 73518214Slinton } 73618214Slinton | 73718214Slinton INT integer_list 73818214Slinton { 73918214Slinton $$ = build(O_COMMA, build(O_LCON, $1), $2); 74018214Slinton } 74116607Ssam ; 7429683Slinton line_number: 7439683Slinton INT 7449683Slinton { 7459683Slinton $$ = build(O_LCON, $1); 7469683Slinton } 7479683Slinton | 7489683Slinton '$' 7499683Slinton { 7509683Slinton $$ = build(O_LCON, (long) LASTLINE); 7519683Slinton } 7529683Slinton ; 7539683Slinton examine: 7549683Slinton address '/' count mode 7559683Slinton { 7569683Slinton $$ = build(O_EXAMINE, $4, $1, nil, $3); 7579683Slinton } 7589683Slinton | 7599683Slinton address ',' address '/' mode 7609683Slinton { 7619683Slinton $$ = build(O_EXAMINE, $5, $1, $3, 0); 7629683Slinton } 7639683Slinton | 76411173Slinton address '=' mode 76511173Slinton { 76611173Slinton $$ = build(O_EXAMINE, $3, $1, nil, 0); 76711173Slinton } 7689683Slinton ; 7699683Slinton address: 77018214Slinton INT 7719683Slinton { 7729683Slinton $$ = build(O_LCON, $1); 7739683Slinton } 7749683Slinton | 77518214Slinton '.' 7769683Slinton { 77718214Slinton $$ = build(O_LCON, (long) prtaddr); 7789683Slinton } 7799683Slinton | 78018214Slinton '&' term 78118214Slinton { 78218214Slinton $$ = amper($2); 78318214Slinton } 78418214Slinton | 7859683Slinton address '+' address 7869683Slinton { 7879683Slinton $$ = build(O_ADD, $1, $3); 7889683Slinton } 7899683Slinton | 7909683Slinton address '-' address 7919683Slinton { 7929683Slinton $$ = build(O_SUB, $1, $3); 7939683Slinton } 7949683Slinton | 7959683Slinton address '*' address 7969683Slinton { 7979683Slinton $$ = build(O_MUL, $1, $3); 7989683Slinton } 7999683Slinton | 80018214Slinton '*' address %prec UNARYSIGN 8019683Slinton { 80218214Slinton $$ = build(O_INDIR, $2); 8039683Slinton } 8049683Slinton | 80518214Slinton '-' address %prec UNARYSIGN 8069683Slinton { 80718214Slinton $$ = build(O_NEG, $2); 8089683Slinton } 80918214Slinton | 81018214Slinton '(' exp ')' 81118214Slinton { 81218214Slinton $$ = $2; 81318214Slinton } 8149683Slinton ; 81518214Slinton term: 81618214Slinton symbol 81718214Slinton { 81818214Slinton $$ = $1; 81918214Slinton } 82018214Slinton | 82118214Slinton term '.' name 82218214Slinton { 82318214Slinton $$ = unrval(dot($1, $3)); 82418214Slinton } 82518214Slinton | 82618214Slinton term ARROW name 82718214Slinton { 82818214Slinton $$ = unrval(dot($1, $3)); 82918214Slinton } 83018214Slinton | 83118214Slinton term '[' exp_list ']' 83218214Slinton { 83318214Slinton $$ = unrval(subscript($1, $3)); 83418214Slinton } 83518214Slinton ; 8369683Slinton count: 8379683Slinton /* empty */ 8389683Slinton { 8399683Slinton $$ = 1; 8409683Slinton } 8419683Slinton | 8429683Slinton INT 8439683Slinton { 8449683Slinton $$ = $1; 8459683Slinton } 8469683Slinton ; 8479683Slinton mode: 8489683Slinton name 8499683Slinton { 8509683Slinton $$ = ident($1); 8519683Slinton curformat = $$; 8529683Slinton } 8539683Slinton | 8549683Slinton /* empty */ 8559683Slinton { 8569683Slinton $$ = curformat; 8579683Slinton } 8589683Slinton ; 8599683Slinton opt_cond: 8609683Slinton /* empty */ 8619683Slinton { 8629683Slinton $$ = nil; 8639683Slinton } 8649683Slinton | 8659683Slinton IF boolean_exp 8669683Slinton { 8679683Slinton $$ = $2; 8689683Slinton } 8699683Slinton ; 8709683Slinton exp_list: 8719683Slinton exp 8729683Slinton { 8739683Slinton $$ = build(O_COMMA, $1, nil); 8749683Slinton } 8759683Slinton | 8769683Slinton exp ',' exp_list 8779683Slinton { 8789683Slinton $$ = build(O_COMMA, $1, $3); 8799683Slinton } 8809683Slinton ; 8819683Slinton exp: 88218214Slinton symbol 8839683Slinton { 8849683Slinton $$ = build(O_RVAL, $1); 8859683Slinton } 8869683Slinton | 88718214Slinton exp '[' exp_list ']' 8889683Slinton { 88918214Slinton $$ = subscript(unrval($1), $3); 8909683Slinton } 8919683Slinton | 89218214Slinton exp '.' name 89318214Slinton { 89418214Slinton $$ = dot($1, $3); 89518214Slinton } 89618214Slinton | 89718214Slinton exp ARROW name 89818214Slinton { 89918214Slinton $$ = dot($1, $3); 90018214Slinton } 90118214Slinton | 90218214Slinton '*' exp %prec UNARYSIGN 90318214Slinton { 90418214Slinton $$ = build(O_INDIR, $2); 90518214Slinton } 90618214Slinton | 90718214Slinton exp '^' %prec UNARYSIGN 90818214Slinton { 90918214Slinton $$ = build(O_INDIR, $1); 91018214Slinton } 91118214Slinton | 91216607Ssam exp '\\' opt_qual_symbol 91311173Slinton { 91411173Slinton $$ = build(O_TYPERENAME, $1, $3); 91511173Slinton } 91611173Slinton | 91718214Slinton exp '\\' '&' opt_qual_symbol %prec '\\' 91818214Slinton { 91918214Slinton $$ = renameptr($1, $4); 92018214Slinton } 92118214Slinton | 92218214Slinton exp '(' opt_exp_list ')' 92318214Slinton { 92418214Slinton $$ = build(O_CALL, unrval($1), $3); 92518214Slinton } 92618214Slinton | 92718214Slinton constant 92818214Slinton { 92918214Slinton $$ = $1; 93018214Slinton } 93118214Slinton | 9329683Slinton '+' exp %prec UNARYSIGN 9339683Slinton { 9349683Slinton $$ = $2; 9359683Slinton } 9369683Slinton | 9379683Slinton '-' exp %prec UNARYSIGN 9389683Slinton { 9399683Slinton $$ = build(O_NEG, $2); 9409683Slinton } 9419683Slinton | 9429683Slinton '&' exp %prec UNARYSIGN 9439683Slinton { 9449683Slinton $$ = amper($2); 9459683Slinton } 9469683Slinton | 9479683Slinton exp '+' exp 9489683Slinton { 9499683Slinton $$ = build(O_ADD, $1, $3); 9509683Slinton } 9519683Slinton | 9529683Slinton exp '-' exp 9539683Slinton { 9549683Slinton $$ = build(O_SUB, $1, $3); 9559683Slinton } 9569683Slinton | 9579683Slinton exp '*' exp 9589683Slinton { 9599683Slinton $$ = build(O_MUL, $1, $3); 9609683Slinton } 9619683Slinton | 9629683Slinton exp '/' exp 9639683Slinton { 9649683Slinton $$ = build(O_DIVF, $1, $3); 9659683Slinton } 9669683Slinton | 9679683Slinton exp DIV exp 9689683Slinton { 9699683Slinton $$ = build(O_DIV, $1, $3); 9709683Slinton } 9719683Slinton | 9729683Slinton exp MOD exp 9739683Slinton { 9749683Slinton $$ = build(O_MOD, $1, $3); 9759683Slinton } 9769683Slinton | 9779683Slinton exp AND exp 9789683Slinton { 9799683Slinton $$ = build(O_AND, $1, $3); 9809683Slinton } 9819683Slinton | 9829683Slinton exp OR exp 9839683Slinton { 9849683Slinton $$ = build(O_OR, $1, $3); 9859683Slinton } 9869683Slinton | 9879683Slinton exp '<' exp 9889683Slinton { 9899683Slinton $$ = build(O_LT, $1, $3); 9909683Slinton } 9919683Slinton | 9929683Slinton exp '<' '=' exp 9939683Slinton { 9949683Slinton $$ = build(O_LE, $1, $4); 9959683Slinton } 9969683Slinton | 9979683Slinton exp '>' exp 9989683Slinton { 9999683Slinton $$ = build(O_GT, $1, $3); 10009683Slinton } 10019683Slinton | 10029683Slinton exp '>' '=' exp 10039683Slinton { 10049683Slinton $$ = build(O_GE, $1, $4); 10059683Slinton } 10069683Slinton | 10079683Slinton exp '=' exp 10089683Slinton { 10099683Slinton $$ = build(O_EQ, $1, $3); 10109683Slinton } 10119683Slinton | 10129683Slinton exp '=' '=' exp 10139683Slinton { 10149683Slinton $$ = build(O_EQ, $1, $4); 10159683Slinton } 10169683Slinton | 10179683Slinton exp '<' '>' exp 10189683Slinton { 10199683Slinton $$ = build(O_NE, $1, $4); 10209683Slinton } 10219683Slinton | 10229683Slinton exp '!' '=' exp 10239683Slinton { 10249683Slinton $$ = build(O_NE, $1, $4); 10259683Slinton } 10269683Slinton | 10279683Slinton '(' exp ')' 10289683Slinton { 10299683Slinton $$ = $2; 10309683Slinton } 10319683Slinton ; 10329683Slinton boolean_exp: 10339683Slinton exp 10349683Slinton { 10359683Slinton chkboolean($1); 10369683Slinton $$ = $1; 10379683Slinton } 10389683Slinton ; 10399683Slinton constant: 10409683Slinton INT 10419683Slinton { 10429683Slinton $$ = build(O_LCON, $1); 10439683Slinton } 10449683Slinton | 104518214Slinton CHAR 104618214Slinton { 104718214Slinton $$ = build(O_CCON, $1); 104818214Slinton } 104918214Slinton | 10509683Slinton REAL 10519683Slinton { 10529683Slinton $$ = build(O_FCON, $1); 10539683Slinton } 10549683Slinton | 10559683Slinton STRING 10569683Slinton { 10579683Slinton $$ = build(O_SCON, $1); 10589683Slinton } 10599683Slinton ; 106016607Ssam opt_qual_symbol: 106116607Ssam symbol 106216607Ssam { 106316607Ssam $$ = $1; 106416607Ssam } 106516607Ssam | 106616607Ssam opt_qual_symbol '.' name 106716607Ssam { 106816607Ssam $$ = dot($1, $3); 106916607Ssam } 107016607Ssam ; 10719683Slinton symbol: 10729683Slinton name 10739683Slinton { 107418214Slinton $$ = findvar($1); 107518214Slinton if ($$ == nil) { 107618214Slinton $$ = build(O_SYM, which($1)); 107718214Slinton } 10789683Slinton } 107916607Ssam | 108016607Ssam '.' name 108116607Ssam { 108216607Ssam $$ = dot(build(O_SYM, program), $2); 108316607Ssam } 10849683Slinton ; 10859683Slinton name: 10869683Slinton NAME 10879683Slinton { 10889683Slinton $$ = $1; 10899683Slinton } 10909683Slinton | 10919683Slinton keyword 10929683Slinton { 10939683Slinton $$ = $1; 10949683Slinton } 10959683Slinton keyword: 109612536Scsvaf ALIAS | AND | ASSIGN | AT | CALL | CATCH | CONT | DEBUG | DELETE | DIV | 109716607Ssam DOWN | DUMP | EDIT | FILE | FUNC | GRIPE | HELP | IGNORE | IN | LIST | 109816607Ssam MOD | NEXT | NEXTI | NIL | NOT | OR | PRINT | PSYM | QUIT | 109918214Slinton RERUN | RETURN | RUN | SET | SH | SKIP | SOURCE | STATUS | STEP | STEPI | 110018214Slinton STOP | STOPI | TRACE | TRACEI | UNALIAS | UNSET | UP | USE | 110118214Slinton WHATIS | WHEN | WHERE | WHEREIS | WHICH 11029683Slinton ; 1103