Annotation of 43BSDTahoe/lib/old_compiler/dbx/commands.y, revision 1.1.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.