Annotation of 43BSD/usr.bin/efl/gram.exec, revision 1.1

1.1     ! root        1: exec:    beginexec exec1
        !             2:                { TEST fprintf(diagfile, "exec done\n"); }
        !             3:        ;
        !             4: 
        !             5: beginexec:
        !             6:                { $$ = bgnexec();  if(ncases > 0) ncases = 0; }
        !             7:        ;
        !             8: 
        !             9: exec1:   lhs ASGNOP expr
        !            10:                {
        !            11:                if($1->tag==TCALL)
        !            12:                        {
        !            13:                        dclerr("no statement functions in EFL",
        !            14:                                $1->sthead->namep);
        !            15:                        frexpr($1);
        !            16:                        frexpr($3);
        !            17:                        }
        !            18:                else exasgn($1,$2,$3);
        !            19:                }
        !            20:        | DOUBLEADDOP lhs
        !            21:                { exasgn($2, $1, mkint(1) ); }
        !            22:        | lhs1
        !            23:                { excall($1); }
        !            24:        | CALL lhs1
        !            25:                { excall($2); }
        !            26:        | debug exec enddebug
        !            27:        | LBRACK beginblock stats endblock RBRACK
        !            28:                { TEST fprintf(diagfile, "exec: { stats }\n");
        !            29:                  addexec(); }
        !            30:        | labels exec1
        !            31:                { thisexec->labeled = 1; }
        !            32:        | control
        !            33:                { thisexec->uniffable = 1;  popctl(); }
        !            34:        | branch
        !            35:                { thisexec->brnchend = 1; }
        !            36:        | iostat
        !            37:                { exio($1, 0); }
        !            38:        | null
        !            39:                { exnull(); }
        !            40:        | ESCAPE
        !            41:                {
        !            42:                exnull();
        !            43:                putsii(ICCOMMENT, $1);
        !            44:                cfree($1);
        !            45:                exnull();
        !            46:                }
        !            47:        ;
        !            48: 
        !            49: null:
        !            50:                { TEST fprintf(diagfile, "exec:empty\n"); }
        !            51:        |  CONTINUE
        !            52:                { TEST fprintf(diagfile, "exec: continue\n"); }
        !            53:        ;
        !            54: 
        !            55: beginblock:
        !            56:                {
        !            57:                thisexec->copylab = 1;
        !            58:                ++blklevel;
        !            59:                dclsect = 1;
        !            60:                ndecl[blklevel] = 0;
        !            61:                nhid [blklevel] = 0;
        !            62:                }
        !            63:        ;
        !            64: 
        !            65: endblock:
        !            66:                {
        !            67:                if(ndecl[blklevel]) unhide();
        !            68:                --blklevel;
        !            69:                dclsect = 0;
        !            70:                }
        !            71:        ;
        !            72: 
        !            73: labels:          NAME COLON contnu
        !            74:                { mklabel($1,YES); }
        !            75:        | CONST contnu
        !            76:                { mklabel(mkilab($1),YES); }
        !            77:        | CONST contnu COLON contnu
        !            78:                { mklabel(mkilab($1),YES); }
        !            79:        | DEFAULT COLON contnu
        !            80:                { brkcase(); mkcase(PNULL,1); }
        !            81:        | CASE { brkcase(); }  caselist COLON contnu
        !            82:        ;
        !            83: 
        !            84: caselist:     expr
        !            85:                { mkcase($1,1); }
        !            86:        | caselist COMMA expr
        !            87:                { mkcase($3,1); }
        !            88:        ;
        !            89: 
        !            90: control:  ifclause contnu exec EOS ELSE elsecode contnu exec
        !            91:                { TEST fprintf(diagfile, "if-then-else\n");
        !            92:                  i = $3->brnchend & $8->brnchend;
        !            93:                  addexec();
        !            94:                  $$ = addexec();
        !            95:                  thisexec->brnchend = i;
        !            96:                  TEST fprintf(diagfile, "exec: if(expr) exec else exec\n"); }
        !            97:        | ifclause contnu exec EOS
        !            98:                { TEST fprintf(diagfile, "if-then\n");
        !            99:                  pushlex = 1;
        !           100:                  yyclearin;
        !           101:                  $$ = ifthen();
        !           102:                  TEST fprintf(diagfile, "exec: if(expr) exec\n"); }
        !           103:        | repeat contnu exec until
        !           104:                { TEST fprintf(diagfile, "repeat done\n"); }
        !           105:        | leftcont contnu exec
        !           106:                { TEST fprintf(diagfile, "exec: control exec\n"); $$ = addexec(); }
        !           107:        ;
        !           108: 
        !           109: ifclause:        IF LPAR expr RPAR
        !           110:                { pushctl(STIF,$3); }
        !           111:        ;
        !           112: 
        !           113: elsecode:
        !           114:                {
        !           115:                if(thisctl->breaklab == 0)
        !           116:                        thisctl->breaklab = nextlab();
        !           117:                /* if(thisexec->prevexec->brnchend == 0) */
        !           118:                        exgoto(thisctl->breaklab);
        !           119:                exlab( indifs[thisctl->indifn] = nextlab() );
        !           120:                }
        !           121:        ;
        !           122: 
        !           123: repeat:          REPEAT
        !           124:                { pushctl(STREPEAT, PNULL); }
        !           125:        ;
        !           126: 
        !           127: until:   EOS
        !           128:                { pushlex = 1;
        !           129:                  yyclearin;
        !           130:                  $$ = addexec();
        !           131:                  exgoto(thisctl->xlab);
        !           132:                  TEST fprintf(diagfile, " no until\n"); }
        !           133:        | EOS UNTIL LPAR expr RPAR
        !           134:                { $$ = addexec();
        !           135:                  exnull();
        !           136:                  exlab( indifs[thisctl->indifn] = nextlab() );
        !           137:                  exifgo(mknode(TNOTOP,OPNOT,$4,PNULL), thisctl->xlab);
        !           138:                  TEST fprintf(diagfile, "until\n");
        !           139:                }
        !           140:        ;
        !           141: 
        !           142: branch:          RETURN
        !           143:                { exretn(PNULL); }
        !           144:        | RETURN expr
        !           145:                { exretn($2); }
        !           146:        | break
        !           147:        | GOTO label
        !           148:                { exgoto($2); }
        !           149:        | GO NAME label
        !           150:                { if( !equals($2->namep, "to") )
        !           151:                        execerr("go %s ??\n", $2->namep);
        !           152:                  else   exgoto($3);
        !           153:                }
        !           154:        | GOTO parlablist compgotoindex
        !           155:                { excompgoto($2, $3); }
        !           156:        | GO NAME parlablist compgotoindex
        !           157:                { if(!equals($2->namep, "to") )
        !           158:                        execerr("go %s ??\n", $2->namep);
        !           159:                  else excompgoto($3, $4);
        !           160:                }
        !           161:        ;
        !           162: 
        !           163: parlablist:   LPAR lablist RPAR
        !           164:                { $$ = $2; }
        !           165:        ;
        !           166: 
        !           167: 
        !           168: lablist:   label
        !           169:                { $$ = mkchain($1,CHNULL); }
        !           170:        | lablist COMMA label
        !           171:                { $$ = hookup($1, mkchain($3,CHNULL) ); }
        !           172:        ;
        !           173: 
        !           174: compgotoindex:  expr
        !           175:        | COMMA expr
        !           176:                { $$ = $2; }
        !           177:        ;
        !           178: 
        !           179: 
        !           180: label:   NAME
        !           181:                { $$ = mklabel($1,NO); }
        !           182:        | CONST
        !           183:                { $$ = mklabel(mkilab($1),NO); }
        !           184:        | CASE expr
        !           185:                { $$ = mkcase($2,0); }
        !           186:        | DEFAULT
        !           187:                { $$ = mkcase(PNULL,0); }
        !           188:        ;
        !           189: 
        !           190: break:   brk
        !           191:                { exbrk($1, PNULL, 0); }
        !           192:        | brk CONST
        !           193:                { exbrk($1, $2, 0); }
        !           194:        | brk blocktype
        !           195:                { exbrk($1, PNULL, $2); }
        !           196:        | brk CONST blocktype
        !           197:                { exbrk($1,$2,$3); }
        !           198:        | brk blocktype CONST
        !           199:                { exbrk($1,$3,$2); }
        !           200:        ;
        !           201: 
        !           202: brk:     NEXT          { $$ = 1; }
        !           203:        | BREAK         { $$ = 0; }
        !           204:        | EXIT          { $$ = 0; }
        !           205:        ;
        !           206: 
        !           207: blocktype: WHILE       { $$ = STWHILE; }
        !           208:        | FOR           { $$ = STFOR; }
        !           209:        | DO            { $$ = STDO; }
        !           210:        | REPEAT        { $$ = STREPEAT; }
        !           211:        | SWITCH        { $$ = STSWITCH; }
        !           212:        | PROCEDURE     { $$ = STPROC; }
        !           213:        ;
        !           214: 
        !           215: leftcont:   WHILE LPAR exprnull RPAR
        !           216:                { pushctl(STWHILE, $3);
        !           217:                    TEST fprintf(diagfile, "while(expr)\n"); }
        !           218:        | for forinit fortest forincr
        !           219:                { exlab(thisctl->xlab);
        !           220:                  if($3)
        !           221:                        exifgo(mknode(TNOTOP,OPNOT,$3,PNULL),
        !           222:                                thisctl->breaklab = nextlab() );
        !           223:                  else exnull();
        !           224:                  TEST fprintf(diagfile, "for (forlist)\n"); }
        !           225:        | SWITCH LPAR expr RPAR
        !           226:                { pushctl(STSWITCH,  simple(LVAL,$3));
        !           227:                  TEST fprintf(diagfile, "switch (expr)\n"); }
        !           228:        | do
        !           229:                { pushctl(STDO, $1);
        !           230:                  TEST fprintf(diagfile, "do loop\n"); }
        !           231:        ;
        !           232: 
        !           233: do:      DO expr EOS contnu
        !           234:                { $$ = doloop($2, PNULL, PNULL); }
        !           235:        | DO expr contnu
        !           236:                { $$ = doloop($2, PNULL, PNULL); }
        !           237:        | DO expr COMMA expr EOS contnu
        !           238:                { $$ = doloop($2, $4, PNULL); }
        !           239:        | DO expr COMMA expr contnu
        !           240:                { $$ = doloop($2, $4, PNULL); }
        !           241:        | DO expr COMMA expr COMMA expr EOS contnu
        !           242:                { $$ = doloop($2,$4,$6); }
        !           243:        | DO expr COMMA expr COMMA expr contnu
        !           244:                { $$ = doloop($2,$4,$6); }
        !           245:        ;
        !           246: 
        !           247: for:     FOR LPAR
        !           248:                { pushctl(STFOR, PNULL); }
        !           249:        ;
        !           250: 
        !           251: forinit:  exec COMMA
        !           252:                { exgoto(thisctl->xlab);
        !           253:                  exlab(thisctl->nextlab);
        !           254:                  addexec();
        !           255:                  }
        !           256:        | exec EOS contnu COMMA
        !           257:                { exgoto(thisctl->xlab);
        !           258:                  exlab(thisctl->nextlab);
        !           259:                  addexec();
        !           260:                  }
        !           261:        ;
        !           262: 
        !           263: fortest:  exprnull COMMA
        !           264:        ;
        !           265: 
        !           266: forincr:  exec RPAR
        !           267:                { addexec(); }
        !           268:        | exec EOS contnu RPAR
        !           269:                { addexec(); }
        !           270:        ;
        !           271: 
        !           272: exprnull:      { $$ = 0; }
        !           273:        | expr
        !           274:        ;
        !           275: 
        !           276: debug:   DEBUG contnu
        !           277:                { if(dbgopt) ++dbglevel; }
        !           278:        ;
        !           279: 
        !           280: enddebug:
        !           281:                { if(dbgopt) --dbglevel; }
        !           282:        ;
        !           283: 
        !           284: iostat:          iokwd LPAR iounit COMMA iolist RPAR
        !           285:                { $$ = mkiost($1, $3, $5); }
        !           286:        ;
        !           287: 
        !           288: iokwd:   READBIN               { $$ = 0; }
        !           289:        | WRITEBIN              { $$ = 1; }
        !           290:        | READ  { $$ = 2; }
        !           291:        | WRITE { $$ = 3; }
        !           292:        ;
        !           293: 
        !           294: iounit:          expr
        !           295:        |       { $$ = NULL; }
        !           296:        ;
        !           297: 
        !           298: iolist:          ioitem                { $$ = mkchain($1,CHNULL); }
        !           299:        | iolist COMMA ioitem   { hookup($1, mkchain($3,CHNULL)); }
        !           300:        ;
        !           301: 
        !           302: ioitem:          expr  { $$ = mkioitem($1,CNULL); }
        !           303:        | expr COLON format     { $$ = mkioitem($1,$3); }
        !           304:        | COLON format          { $$ = mkioitem(PNULL,$2); }
        !           305:        | iobrace       { $$ = mkiogroup($1, CNULL, PNULL); }
        !           306:        | do iobrace    { $$ = mkiogroup($2, CNULL, $1); }
        !           307:        | do iobrace COLON format       { $$ = mkiogroup($2,$4,$1); }
        !           308:        | iobrace COLON format  { $$ = mkiogroup($1,$3,PNULL); }
        !           309:        ;
        !           310: 
        !           311: iobrace:   LBRACK  { ++iobrlevel; }   iolist RBRACK
        !           312:                { --iobrlevel;  $$ = $3; }
        !           313:        ;
        !           314: 
        !           315: format:          letter
        !           316:                { $$ = mkformat($1, PNULL, PNULL); }
        !           317:        | letter LPAR expr RPAR
        !           318:                { $$ = mkformat($1, $3, PNULL); }
        !           319:        | letter LPAR expr COMMA expr RPAR
        !           320:                { $$ = mkformat($1,$3,$5); }
        !           321:        | letton CONST lettoff
        !           322:                { $$ = $2->leftp; frexpblock($2); }
        !           323:        ;
        !           324: 
        !           325: letter:   letton   LETTER  lettoff  { $$ = $2; }
        !           326:        ;
        !           327: 
        !           328: letton:                        { lettneed = YES;}
        !           329:        ;
        !           330: 
        !           331: lettoff:                       { lettneed = NO; }
        !           332:        ;
        !           333: 
        !           334: %%
        !           335: 
        !           336: setyydeb()
        !           337: {
        !           338: #ifdef YYDEBUG
        !           339:        extern int yydebug;
        !           340:        yydebug = 1;
        !           341: #endif
        !           342: }

unix.superglobalmegacorp.com

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