Annotation of 43BSDTahoe/ucb/dbx/commands.y, revision 1.1

1.1     ! root        1: %{
        !             2: 
        !             3: /*
        !             4:  * Copyright (c) 1983 Regents of the University of California.
        !             5:  * All rights reserved.  The Berkeley software License Agreement
        !             6:  * specifies the terms and conditions for redistribution.
        !             7:  *
        !             8:  *     @(#)commands.y  5.4 (Berkeley) 1/12/88
        !             9:  */
        !            10: 
        !            11: static char rcsid[] = "$Header: commands.y,v 1.2 87/08/19 15:18:53 mike Exp $";
        !            12: 
        !            13: /*
        !            14:  * Yacc grammar for debugger commands.
        !            15:  */
        !            16: 
        !            17: #include "defs.h"
        !            18: #include "symbols.h"
        !            19: #include "operators.h"
        !            20: #include "tree.h"
        !            21: #include "process.h"
        !            22: #include "source.h"
        !            23: #include "scanner.h"
        !            24: #include "keywords.h"
        !            25: #include "names.h"
        !            26: #include "lists.h"
        !            27: 
        !            28: private String curformat = "X";
        !            29: 
        !            30: %}
        !            31: 
        !            32: %term
        !            33:     ALIAS AND ASSIGN AT CALL CATCH CONT DEBUG DELETE DIV DOWN DUMP
        !            34:     EDIT FILE FUNC GRIPE HELP IF IGNORE IN LIST MOD NEXT NEXTI NIL NOT OR
        !            35:     PRINT PSYM QUIT RERUN RETURN RUN SET SH SKIP SOURCE STATUS STEP STEPI
        !            36:     STOP STOPI TRACE TRACEI UNALIAS UNSET UP USE
        !            37:     WHATIS WHEN WHERE WHEREIS WHICH
        !            38: 
        !            39: %term INT CHAR REAL NAME STRING
        !            40: %term ARROW
        !            41: 
        !            42: %right INT
        !            43: %binary REDIRECT
        !            44: %binary '<' '=' '>' '!' IN
        !            45: %left '+' '-' OR
        !            46: %left UNARYSIGN
        !            47: %left '*' '/' DIV MOD AND
        !            48: %left '\\'
        !            49: %left NOT '(' '[' '.' '^' ARROW
        !            50: 
        !            51: %union {
        !            52:     Name y_name;
        !            53:     Symbol y_sym;
        !            54:     Node y_node;
        !            55:     Integer y_int;
        !            56:     Operator y_op;
        !            57:     long y_long;
        !            58:     char y_char;
        !            59:     double y_real;
        !            60:     String y_string;
        !            61:     Boolean y_bool;
        !            62:     Cmdlist y_cmdlist;
        !            63:     List y_list;
        !            64: };
        !            65: 
        !            66: %type <y_op>       trace stop
        !            67: %type <y_long>     INT count signal
        !            68: %type <y_char>     CHAR
        !            69: %type <y_real>     REAL
        !            70: %type <y_string>    STRING redirectout filename opt_filename mode
        !            71: %type <y_name>     ALIAS AND ASSIGN AT CALL CATCH CONT
        !            72: %type <y_name>     DEBUG DELETE DIV DOWN DUMP
        !            73: %type <y_name>     EDIT FILE FUNC GRIPE HELP IF IGNORE IN LIST MOD
        !            74: %type <y_name>     NEXT NEXTI NIL NOT OR
        !            75: %type <y_name>     PRINT PSYM QUIT RERUN RETURN RUN SET SH SKIP SOURCE STATUS
        !            76: %type <y_name>     STEP STEPI STOP STOPI TRACE TRACEI
        !            77: %type <y_name>     UNALIAS UNSET UP USE WHATIS WHEN WHERE WHEREIS WHICH
        !            78: %type <y_name>     name NAME keyword
        !            79: %type <y_node>      opt_qual_symbol symbol
        !            80: %type <y_node>     command rcommand cmd step what where examine
        !            81: %type <y_node>     event opt_exp_list opt_cond
        !            82: %type <y_node>     exp_list exp term boolean_exp constant address
        !            83: %type <y_node>     integer_list alias_command list_command line_number
        !            84: %type <y_cmdlist>   actions
        !            85: %type <y_list>      sourcepath name_list
        !            86: 
        !            87: %%
        !            88: 
        !            89: input:
        !            90:     input command_nl
        !            91: |
        !            92:     /* empty */
        !            93: ;
        !            94: command_nl:
        !            95:     command_line '\n'
        !            96: |
        !            97:     command_line ';'
        !            98: {
        !            99:        chkalias = true;
        !           100: }
        !           101: |
        !           102:     '\n'
        !           103: ;
        !           104: 
        !           105: command_line:
        !           106:     command
        !           107: {
        !           108:        if ($1 != nil) {
        !           109:            topeval($1);
        !           110:        }
        !           111: }
        !           112: |
        !           113:     rcommand redirectout
        !           114: {
        !           115:        if ($1 != nil) {
        !           116:            if ($2 != nil) {
        !           117:                setout($2);
        !           118:                topeval($1);
        !           119:                unsetout();
        !           120:            } else {
        !           121:                topeval($1);
        !           122:            }
        !           123:        }
        !           124: }
        !           125: ;
        !           126: redirectout:
        !           127:     '>' shellmode NAME
        !           128: {
        !           129:        $$ = ident($3);
        !           130: }
        !           131: |
        !           132:     /* empty */
        !           133: {
        !           134:        $$ = nil;
        !           135: }
        !           136: ;
        !           137: 
        !           138: /*
        !           139:  * Non-redirectable commands.
        !           140:  */
        !           141: command:
        !           142:     alias_command
        !           143: {
        !           144:        $$ = $1;
        !           145: }
        !           146: |
        !           147:     ASSIGN exp '=' exp
        !           148: {
        !           149:        $$ = build(O_ASSIGN, unrval($2), $4);
        !           150: }
        !           151: |
        !           152:     CATCH signal
        !           153: {
        !           154:        $$ = build(O_CATCH, $2);
        !           155: }
        !           156: |
        !           157:     CATCH
        !           158: {
        !           159:        $$ = build(O_CATCH, 0);
        !           160: }
        !           161: |
        !           162:     CONT
        !           163: {
        !           164:        $$ = build(O_CONT, (long) DEFSIG);
        !           165: }
        !           166: |
        !           167:     CONT signal
        !           168: {
        !           169:        $$ = build(O_CONT, $2);
        !           170: }
        !           171: |
        !           172:     DELETE integer_list
        !           173: {
        !           174:        $$ = build(O_DELETE, $2);
        !           175: }
        !           176: |
        !           177:     DOWN
        !           178: {
        !           179:        $$ = build(O_DOWN, build(O_LCON, (long) 1));
        !           180: }
        !           181: |
        !           182:     DOWN INT
        !           183: {
        !           184:        $$ = build(O_DOWN, build(O_LCON, (long) $2));
        !           185: }
        !           186: |
        !           187:     EDIT shellmode opt_filename
        !           188: {
        !           189:        $$ = build(O_EDIT, $3);
        !           190: }
        !           191: |
        !           192:     FILE shellmode opt_filename
        !           193: {
        !           194:        $$ = build(O_CHFILE, $3);
        !           195: }
        !           196: |
        !           197:     FUNC
        !           198: {
        !           199:        $$ = build(O_FUNC, nil);
        !           200: }
        !           201: |
        !           202:     FUNC opt_qual_symbol
        !           203: {
        !           204:        $$ = build(O_FUNC, $2);
        !           205: }
        !           206: |
        !           207:     GRIPE
        !           208: {
        !           209:        $$ = build(O_GRIPE);
        !           210: }
        !           211: |
        !           212:     HELP
        !           213: {
        !           214:        $$ = build(O_HELP);
        !           215: }
        !           216: |
        !           217:     IGNORE signal
        !           218: {
        !           219:        $$ = build(O_IGNORE, $2);
        !           220: }
        !           221: |
        !           222:     IGNORE
        !           223: {
        !           224:        $$ = build(O_IGNORE, 0);
        !           225: }
        !           226: |
        !           227:     list_command
        !           228: {
        !           229:        $$ = $1;
        !           230: }
        !           231: |
        !           232:     PSYM exp
        !           233: {
        !           234:        $$ = build(O_PSYM, unrval($2));
        !           235: }
        !           236: |
        !           237:     QUIT
        !           238: {
        !           239:        if (not popinput()) {
        !           240:            quit(0);
        !           241:        } else {
        !           242:            $$ = nil;
        !           243:        }
        !           244: }
        !           245: |
        !           246:     RETURN
        !           247: {
        !           248:        $$ = build(O_RETURN, nil);
        !           249: }
        !           250: |
        !           251:     RETURN opt_qual_symbol
        !           252: {
        !           253:        $$ = build(O_RETURN, $2);
        !           254: }
        !           255: |
        !           256:     runcommand
        !           257: {
        !           258:        run();
        !           259:        /* NOTREACHED */
        !           260: }
        !           261: |
        !           262:     SET name '=' exp
        !           263: {
        !           264:        $$ = build(O_SET, build(O_NAME, $2), $4);
        !           265: }
        !           266: |
        !           267:     SET name
        !           268: {
        !           269:        $$ = build(O_SET, build(O_NAME, $2), nil);
        !           270: }
        !           271: |
        !           272:     SET
        !           273: {
        !           274:        $$ = build(O_SET, nil, nil);
        !           275: }
        !           276: |
        !           277:     SH
        !           278: {
        !           279:        shellline();
        !           280:        $$ = nil;
        !           281: }
        !           282: |
        !           283:     SOURCE shellmode filename
        !           284: {
        !           285:        $$ = build(O_SOURCE, $3);
        !           286: }
        !           287: |
        !           288:     step
        !           289: {
        !           290:        $$ = $1;
        !           291: }
        !           292: |
        !           293:     stop where opt_cond
        !           294: {
        !           295:        $$ = build($1, nil, $2, $3);
        !           296: }
        !           297: |
        !           298:     stop what opt_cond
        !           299: {
        !           300:        $$ = build($1, $2, nil, $3);
        !           301: }
        !           302: |
        !           303:     stop IF boolean_exp
        !           304: {
        !           305:        $$ = build($1, nil, nil, $3);
        !           306: }
        !           307: |
        !           308:     trace what where opt_cond
        !           309: {
        !           310:        $$ = build($1, $2, $3, $4);
        !           311: }
        !           312: |
        !           313:     trace where opt_cond
        !           314: {
        !           315:        $$ = build($1, nil, $2, $3);
        !           316: }
        !           317: |
        !           318:     trace what opt_cond
        !           319: {
        !           320:        $$ = build($1, $2, nil, $3);
        !           321: }
        !           322: |
        !           323:     trace opt_cond
        !           324: {
        !           325:        $$ = build($1, nil, nil, $2);
        !           326: }
        !           327: |
        !           328:     UNALIAS name
        !           329: {
        !           330:        $$ = build(O_UNALIAS, build(O_NAME, $2));
        !           331: }
        !           332: |
        !           333:     UNSET name
        !           334: {
        !           335:        $$ = build(O_UNSET, build(O_NAME, $2));
        !           336: }
        !           337: |
        !           338:     UP
        !           339: {
        !           340:        $$ = build(O_UP, build(O_LCON, (long) 1));
        !           341: }
        !           342: |
        !           343:     UP INT
        !           344: {
        !           345:        $$ = build(O_UP, build(O_LCON, (long) $2));
        !           346: }
        !           347: |
        !           348:     USE shellmode sourcepath
        !           349: {
        !           350:        String dir;
        !           351: 
        !           352:        $$ = nil;
        !           353:        if (list_size($3) == 0) {
        !           354:            foreach (String, dir, sourcepath)
        !           355:                printf("%s ", dir);
        !           356:            endfor
        !           357:            printf("\n");
        !           358:        } else {
        !           359:            foreach (String, dir, sourcepath)
        !           360:                list_delete(list_curitem(sourcepath), sourcepath);
        !           361:            endfor
        !           362:            sourcepath = $3;
        !           363:        }
        !           364: }
        !           365: |
        !           366:     WHATIS opt_qual_symbol
        !           367: {
        !           368:        $$ = build(O_WHATIS, $2);
        !           369: }
        !           370: |
        !           371:     WHEN event '{' actions '}'
        !           372: {
        !           373:        $$ = build(O_ADDEVENT, $2, $4);
        !           374: }
        !           375: |
        !           376:     WHEREIS name
        !           377: {
        !           378:        $$ = build(O_WHEREIS, build(O_SYM, lookup($2)));
        !           379: }
        !           380: |
        !           381:     WHICH symbol
        !           382: {
        !           383:        $$ = build(O_WHICH, $2);
        !           384: }
        !           385: |
        !           386:     '/'
        !           387: {
        !           388:        $$ = build(O_SEARCH,
        !           389:            build(O_LCON, (long) '/'),
        !           390:            build(O_SCON, strdup(scanner_linebuf))
        !           391:        );
        !           392:        gobble();
        !           393:        insertinput("\n");
        !           394: }
        !           395: |
        !           396:     '?'
        !           397: {
        !           398:        $$ = build(O_SEARCH,
        !           399:            build(O_LCON, (long) '?'),
        !           400:            build(O_SCON, strdup(scanner_linebuf))
        !           401:        );
        !           402:        gobble();
        !           403:        insertinput("\n");
        !           404: }
        !           405: ;
        !           406: signal:
        !           407:     INT
        !           408: {
        !           409:        $$ = $1;
        !           410: }
        !           411: |
        !           412:     name
        !           413: {
        !           414:        $$ = siglookup(ident($1));
        !           415: }
        !           416: ;
        !           417: runcommand:
        !           418:     run arglist
        !           419: |
        !           420:     run
        !           421: ;
        !           422: run:
        !           423:     RUN shellmode
        !           424: {
        !           425:        arginit();
        !           426:        fflush(stdout);
        !           427: }
        !           428: |
        !           429:     RERUN shellmode
        !           430: {
        !           431:        fflush(stdout);
        !           432: }
        !           433: ;
        !           434: arglist:
        !           435:     arglist arg
        !           436: |
        !           437:     arg
        !           438: ;
        !           439: arg:
        !           440:     NAME
        !           441: {
        !           442:        newarg(ident($1));
        !           443: }
        !           444: |
        !           445:     STRING
        !           446: {
        !           447:        newarg($1);
        !           448: }
        !           449: |
        !           450:     '<' NAME
        !           451: {
        !           452:        inarg(ident($2));
        !           453: }
        !           454: |
        !           455:     '>' NAME
        !           456: {
        !           457:        outarg(ident($2));
        !           458: }
        !           459: ;
        !           460: step:
        !           461:     STEP
        !           462: {
        !           463:        $$ = build(O_STEP, true, false);
        !           464: }
        !           465: |
        !           466:     STEPI
        !           467: {
        !           468:        $$ = build(O_STEP, false, false);
        !           469: }
        !           470: |
        !           471:     NEXT
        !           472: {
        !           473:        $$ = build(O_STEP, true, true);
        !           474: }
        !           475: |
        !           476:     NEXTI
        !           477: {
        !           478:        $$ = build(O_STEP, false, true);
        !           479: }
        !           480: ;
        !           481: shellmode:
        !           482:     /* empty */
        !           483: {
        !           484:        beginshellmode();
        !           485: }
        !           486: ;
        !           487: sourcepath:
        !           488:     sourcepath NAME
        !           489: {
        !           490:        $$ = $1;
        !           491:        list_append(list_item(ident($2)), nil, $$);
        !           492: }
        !           493: |
        !           494:     /* empty */
        !           495: {
        !           496:        $$ = list_alloc();
        !           497: }
        !           498: ;
        !           499: event:
        !           500:     where
        !           501: |
        !           502:     exp
        !           503: ;
        !           504: actions:
        !           505:     actions cmd ';'
        !           506: {
        !           507:        $$ = $1;
        !           508:        cmdlist_append($2, $$);
        !           509: }
        !           510: |
        !           511:     cmd ';'
        !           512: {
        !           513:        $$ = list_alloc();
        !           514:        cmdlist_append($1, $$);
        !           515: }
        !           516: ;
        !           517: cmd:
        !           518:     command
        !           519: |
        !           520:     rcommand
        !           521: ;
        !           522: 
        !           523: /*
        !           524:  * Redirectable commands.
        !           525:  */
        !           526: rcommand:
        !           527:     PRINT exp_list
        !           528: {
        !           529:        $$ = build(O_PRINT, $2);
        !           530: }
        !           531: |
        !           532:     WHERE
        !           533: {
        !           534:        $$ = build(O_WHERE);
        !           535: }
        !           536: |
        !           537:     examine
        !           538: {
        !           539:        $$ = $1;
        !           540: }
        !           541: |
        !           542:     CALL term '(' opt_exp_list ')'
        !           543: {
        !           544:        $$ = build(O_CALLPROC, $2, $4);
        !           545: }
        !           546: |
        !           547:     DEBUG INT
        !           548: {
        !           549:        $$ = build(O_DEBUG, $2);
        !           550: }
        !           551: |
        !           552:     DEBUG '-' INT
        !           553: {
        !           554:        $$ = build(O_DEBUG, -$3);
        !           555: }
        !           556: |
        !           557:     DUMP opt_qual_symbol
        !           558: {
        !           559:        $$ = build(O_DUMP, $2);
        !           560: }
        !           561: |
        !           562:     DUMP '.'
        !           563: {
        !           564:        $$ = build(O_DUMP, nil);
        !           565: }
        !           566: |
        !           567:     DUMP
        !           568: {
        !           569:        $$ = build(O_DUMP, build(O_SYM, curfunc));
        !           570: }
        !           571: |
        !           572:     STATUS
        !           573: {
        !           574:        $$ = build(O_STATUS);
        !           575: }
        !           576: ;
        !           577: alias_command:
        !           578:     ALIAS name name
        !           579: {
        !           580:        $$ = build(O_ALIAS, build(O_NAME, $2), build(O_NAME, $3));
        !           581: }
        !           582: |
        !           583:     ALIAS name STRING
        !           584: {
        !           585:        $$ = build(O_ALIAS, build(O_NAME, $2), build(O_SCON, $3));
        !           586: }
        !           587: |
        !           588:     ALIAS name '(' name_list ')' STRING
        !           589: {
        !           590:        $$ = build(O_ALIAS,
        !           591:            build(O_COMMA, build(O_NAME, $2), (Node) $4),
        !           592:            build(O_SCON, $6)
        !           593:        );
        !           594: }
        !           595: |
        !           596:     ALIAS name
        !           597: {
        !           598:        $$ = build(O_ALIAS, build(O_NAME, $2), nil);
        !           599: }
        !           600: |
        !           601:     ALIAS
        !           602: {
        !           603:        $$ = build(O_ALIAS, nil, nil);
        !           604: }
        !           605: ;
        !           606: name_list:
        !           607:     name_list ',' name
        !           608: {
        !           609:        $$ = $1;
        !           610:        list_append(list_item($3), nil, $$);
        !           611: }
        !           612: |
        !           613:     name
        !           614: {
        !           615:        $$ = list_alloc();
        !           616:        list_append(list_item($1), nil, $$);
        !           617: }
        !           618: ;
        !           619: trace:
        !           620:     TRACE
        !           621: {
        !           622:        $$ = O_TRACE;
        !           623: }
        !           624: |
        !           625:     TRACEI
        !           626: {
        !           627:        $$ = O_TRACEI;
        !           628: }
        !           629: ;
        !           630: stop:
        !           631:     STOP
        !           632: {
        !           633:        $$ = O_STOP;
        !           634: }
        !           635: |
        !           636:     STOPI
        !           637: {
        !           638:        $$ = O_STOPI;
        !           639: }
        !           640: ;
        !           641: what:
        !           642:     exp
        !           643: {
        !           644:        $$ = $1;
        !           645: }
        !           646: |
        !           647:     STRING ':' line_number
        !           648: {
        !           649:        $$ = build(O_QLINE, build(O_SCON, $1), $3);
        !           650: }
        !           651: ;
        !           652: where:
        !           653:     IN exp
        !           654: {
        !           655:        $$ = unrval($2);
        !           656: }
        !           657: |
        !           658:     AT line_number
        !           659: {
        !           660:        $$ = build(O_QLINE, build(O_SCON, strdup(cursource)), $2);
        !           661: }
        !           662: |
        !           663:     AT STRING ':' line_number
        !           664: {
        !           665:        $$ = build(O_QLINE, build(O_SCON, $2), $4);
        !           666: }
        !           667: ;
        !           668: filename:
        !           669:     NAME
        !           670: {
        !           671:        $$ = ident($1);
        !           672: }
        !           673: ;
        !           674: opt_filename:
        !           675:     /* empty */
        !           676: {
        !           677:        $$ = nil;
        !           678: }
        !           679: |
        !           680:     filename
        !           681: {
        !           682:        $$ = $1;
        !           683: }
        !           684: ;
        !           685: opt_exp_list:
        !           686:     exp_list
        !           687: {
        !           688:        $$ = $1;
        !           689: }
        !           690: |
        !           691:     /* empty */
        !           692: {
        !           693:        $$ = nil;
        !           694: }
        !           695: ;
        !           696: list_command:
        !           697:     LIST
        !           698: {
        !           699:        $$ = build(O_LIST,
        !           700:            build(O_LCON, (long) cursrcline),
        !           701:            build(O_LCON, (long) cursrcline + srcwindowlen() - 1)
        !           702:        );
        !           703: }
        !           704: |
        !           705:     LIST line_number
        !           706: {
        !           707:        $$ = build(O_LIST, $2, $2);
        !           708: }
        !           709: |
        !           710:     LIST line_number ',' line_number
        !           711: {
        !           712:        $$ = build(O_LIST, $2, $4);
        !           713: }
        !           714: |
        !           715:     LIST opt_qual_symbol
        !           716: {
        !           717:        $$ = build(O_LIST, $2, $2);
        !           718: }
        !           719: ;
        !           720: integer_list:
        !           721:     INT
        !           722: {
        !           723:        $$ = build(O_LCON, $1);
        !           724: }
        !           725: |
        !           726:     INT integer_list
        !           727: {
        !           728:        $$ = build(O_COMMA, build(O_LCON, $1), $2);
        !           729: }
        !           730: ;
        !           731: line_number:
        !           732:     INT
        !           733: {
        !           734:        $$ = build(O_LCON, $1);
        !           735: }
        !           736: |
        !           737:     '$'
        !           738: {
        !           739:        $$ = build(O_LCON, (long) LASTLINE);
        !           740: }
        !           741: ;
        !           742: examine:
        !           743:     address '/' count mode
        !           744: {
        !           745:        $$ = build(O_EXAMINE, $4, $1, nil, $3);
        !           746: }
        !           747: |
        !           748:     address ',' address '/' mode
        !           749: {
        !           750:        $$ = build(O_EXAMINE, $5, $1, $3, 0);
        !           751: }
        !           752: |
        !           753:     address '=' mode
        !           754: {
        !           755:        $$ = build(O_EXAMINE, $3, $1, nil, 0);
        !           756: }
        !           757: ;
        !           758: address:
        !           759:     INT
        !           760: {
        !           761:        $$ = build(O_LCON, $1);
        !           762: }
        !           763: |
        !           764:     '.'
        !           765: {
        !           766:        $$ = build(O_LCON, (long) prtaddr);
        !           767: }
        !           768: |
        !           769:     '&' term
        !           770: {
        !           771:        $$ = amper($2);
        !           772: }
        !           773: |
        !           774:     address '+' address
        !           775: {
        !           776:        $$ = build(O_ADD, $1, $3);
        !           777: }
        !           778: |
        !           779:     address '-' address
        !           780: {
        !           781:        $$ = build(O_SUB, $1, $3);
        !           782: }
        !           783: |
        !           784:     address '*' address
        !           785: {
        !           786:        $$ = build(O_MUL, $1, $3);
        !           787: }
        !           788: |
        !           789:     '*' address %prec UNARYSIGN
        !           790: {
        !           791:        $$ = build(O_INDIR, $2);
        !           792: }
        !           793: |
        !           794:     '-' address %prec UNARYSIGN
        !           795: {
        !           796:        $$ = build(O_NEG, $2);
        !           797: }
        !           798: |
        !           799:     '(' exp ')'
        !           800: {
        !           801:        $$ = $2;
        !           802: }
        !           803: ;
        !           804: term:
        !           805:     symbol
        !           806: {
        !           807:        $$ = $1;
        !           808: }
        !           809: |
        !           810:     term '.' name
        !           811: {
        !           812:        $$ = unrval(dot($1, $3));
        !           813: }
        !           814: |
        !           815:     term ARROW name
        !           816: {
        !           817:        $$ = unrval(dot($1, $3));
        !           818: }
        !           819: |
        !           820:     term '[' exp_list ']'
        !           821: {
        !           822:        $$ = unrval(subscript($1, $3));
        !           823: }
        !           824: ;
        !           825: count:
        !           826:     /* empty */
        !           827: {
        !           828:        $$ = 1;
        !           829: }
        !           830: |
        !           831:     INT
        !           832: {
        !           833:        $$ = $1;
        !           834: }
        !           835: ;
        !           836: mode:
        !           837:     name
        !           838: {
        !           839:        $$ = ident($1);
        !           840:        curformat = $$;
        !           841: }
        !           842: |
        !           843:     /* empty */
        !           844: {
        !           845:        $$ = curformat;
        !           846: }
        !           847: ;
        !           848: opt_cond:
        !           849:     /* empty */
        !           850: {
        !           851:        $$ = nil;
        !           852: }
        !           853: |
        !           854:     IF boolean_exp
        !           855: {
        !           856:        $$ = $2;
        !           857: }
        !           858: ;
        !           859: exp_list:
        !           860:     exp
        !           861: {
        !           862:        $$ = build(O_COMMA, $1, nil);
        !           863: }
        !           864: |
        !           865:     exp ',' exp_list
        !           866: {
        !           867:        $$ = build(O_COMMA, $1, $3);
        !           868: }
        !           869: ;
        !           870: exp:
        !           871:     symbol
        !           872: {
        !           873:        $$ = build(O_RVAL, $1);
        !           874: }
        !           875: |
        !           876:     exp '[' exp_list ']'
        !           877: {
        !           878:        $$ = subscript(unrval($1), $3);
        !           879: }
        !           880: |
        !           881:     exp '.' name
        !           882: {
        !           883:        $$ = dot($1, $3);
        !           884: }
        !           885: |
        !           886:     exp ARROW name
        !           887: {
        !           888:        $$ = dot($1, $3);
        !           889: }
        !           890: |
        !           891:     '*' exp %prec UNARYSIGN
        !           892: {
        !           893:        $$ = build(O_INDIR, $2);
        !           894: }
        !           895: |
        !           896:     exp '^' %prec UNARYSIGN
        !           897: {
        !           898:        $$ = build(O_INDIR, $1);
        !           899: }
        !           900: |
        !           901:     exp '\\' opt_qual_symbol
        !           902: {
        !           903:        $$ = build(O_TYPERENAME, $1, $3);
        !           904: }
        !           905: |
        !           906:     exp '\\' '&' opt_qual_symbol %prec '\\'
        !           907: {
        !           908:        $$ = renameptr($1, $4);
        !           909: }
        !           910: |
        !           911:     exp '(' opt_exp_list ')'
        !           912: {
        !           913:        $$ = build(O_CALL, unrval($1), $3);
        !           914: }
        !           915: |
        !           916:     constant
        !           917: {
        !           918:        $$ = $1;
        !           919: }
        !           920: |
        !           921:     '+' exp %prec UNARYSIGN
        !           922: {
        !           923:        $$ = $2;
        !           924: }
        !           925: |
        !           926:     '-' exp %prec UNARYSIGN
        !           927: {
        !           928:        $$ = build(O_NEG, $2);
        !           929: }
        !           930: |
        !           931:     '&' exp %prec UNARYSIGN
        !           932: {
        !           933:        $$ = amper($2);
        !           934: }
        !           935: |
        !           936:     exp '+' exp
        !           937: {
        !           938:        $$ = build(O_ADD, $1, $3);
        !           939: }
        !           940: |
        !           941:     exp '-' exp
        !           942: {
        !           943:        $$ = build(O_SUB, $1, $3);
        !           944: }
        !           945: |
        !           946:     exp '*' exp
        !           947: {
        !           948:        $$ = build(O_MUL, $1, $3);
        !           949: }
        !           950: |
        !           951:     exp '/' exp
        !           952: {
        !           953:        $$ = build(O_DIVF, $1, $3);
        !           954: }
        !           955: |
        !           956:     exp DIV exp
        !           957: {
        !           958:        $$ = build(O_DIV, $1, $3);
        !           959: }
        !           960: |
        !           961:     exp MOD exp
        !           962: {
        !           963:        $$ = build(O_MOD, $1, $3);
        !           964: }
        !           965: |
        !           966:     exp AND exp
        !           967: {
        !           968:        $$ = build(O_AND, $1, $3);
        !           969: }
        !           970: |
        !           971:     exp OR exp
        !           972: {
        !           973:        $$ = build(O_OR, $1, $3);
        !           974: }
        !           975: |
        !           976:     exp '<' exp
        !           977: {
        !           978:        $$ = build(O_LT, $1, $3);
        !           979: }
        !           980: |
        !           981:     exp '<' '=' exp
        !           982: {
        !           983:        $$ = build(O_LE, $1, $4);
        !           984: }
        !           985: |
        !           986:     exp '>' exp
        !           987: {
        !           988:        $$ = build(O_GT, $1, $3);
        !           989: }
        !           990: |
        !           991:     exp '>' '=' exp
        !           992: {
        !           993:        $$ = build(O_GE, $1, $4);
        !           994: }
        !           995: |
        !           996:     exp '=' exp
        !           997: {
        !           998:        $$ = build(O_EQ, $1, $3);
        !           999: }
        !          1000: |
        !          1001:     exp '=' '=' exp
        !          1002: {
        !          1003:        $$ = build(O_EQ, $1, $4);
        !          1004: }
        !          1005: |
        !          1006:     exp '<' '>' exp
        !          1007: {
        !          1008:        $$ = build(O_NE, $1, $4);
        !          1009: }
        !          1010: |
        !          1011:     exp '!' '=' exp
        !          1012: {
        !          1013:        $$ = build(O_NE, $1, $4);
        !          1014: }
        !          1015: |
        !          1016:     '(' exp ')'
        !          1017: {
        !          1018:        $$ = $2;
        !          1019: }
        !          1020: ;
        !          1021: boolean_exp:
        !          1022:     exp
        !          1023: {
        !          1024:        chkboolean($1);
        !          1025:        $$ = $1;
        !          1026: }
        !          1027: ;
        !          1028: constant:
        !          1029:     INT
        !          1030: {
        !          1031:        $$ = build(O_LCON, $1);
        !          1032: }
        !          1033: |
        !          1034:     CHAR
        !          1035: {
        !          1036:        $$ = build(O_CCON, $1);
        !          1037: }
        !          1038: |
        !          1039:     REAL
        !          1040: {
        !          1041:        $$ = build(O_FCON, $1);
        !          1042: }
        !          1043: |
        !          1044:     STRING
        !          1045: {
        !          1046:        $$ = build(O_SCON, $1);
        !          1047: }
        !          1048: ;
        !          1049: opt_qual_symbol:
        !          1050:     symbol
        !          1051: {
        !          1052:        $$ = $1;
        !          1053: }
        !          1054: |
        !          1055:     opt_qual_symbol '.' name
        !          1056: {
        !          1057:        $$ = dot($1, $3);
        !          1058: }
        !          1059: ;
        !          1060: symbol:
        !          1061:     name
        !          1062: {
        !          1063:        $$ = findvar($1);
        !          1064:        if ($$ == nil) {
        !          1065:            $$ = build(O_SYM, which($1));
        !          1066:        }
        !          1067: }
        !          1068: |
        !          1069:     '.' name
        !          1070: {
        !          1071:        $$ = dot(build(O_SYM, program), $2);
        !          1072: }
        !          1073: ;
        !          1074: name:
        !          1075:     NAME
        !          1076: {
        !          1077:        $$ = $1;
        !          1078: }
        !          1079: |
        !          1080:     keyword
        !          1081: {
        !          1082:        $$ = $1;
        !          1083: }
        !          1084: keyword:
        !          1085:     ALIAS | AND | ASSIGN | AT | CALL | CATCH | CONT | DEBUG | DELETE | DIV | 
        !          1086:     DOWN | DUMP | EDIT | FILE | FUNC | GRIPE | HELP | IGNORE | IN | LIST |
        !          1087:     MOD | NEXT | NEXTI | NIL | NOT | OR | PRINT | PSYM | QUIT |
        !          1088:     RERUN | RETURN | RUN | SET | SH | SKIP | SOURCE | STATUS | STEP | STEPI |
        !          1089:     STOP | STOPI | TRACE | TRACEI | UNALIAS | UNSET | UP | USE |
        !          1090:     WHATIS | WHEN | WHERE | WHEREIS | WHICH
        !          1091: ;

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.