home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / f77 / gram.exec < prev    next >
Encoding:
Text File  |  1979-05-05  |  2.3 KB  |  120 lines

  1. exec:      iffable
  2.     | SDO end_spec label dospec
  3.         {
  4.         if($3->labdefined)
  5.             execerr("no backward DO loops");
  6.         $3->blklevel = blklevel+1;
  7.         exdo($3->labelno, $4);
  8.         }
  9.     | logif iffable
  10.         { exendif();  thiswasbranch = NO; }
  11.     | logif STHEN
  12.     | SELSEIF end_spec SLPAR expr SRPAR STHEN
  13.         { exelif($4); }
  14.     | SELSE end_spec
  15.         { exelse(); }
  16.     | SENDIF end_spec
  17.         { exendif(); }
  18.     ;
  19.  
  20. logif:      SLOGIF end_spec SLPAR expr SRPAR
  21.         { exif($4); }
  22.     ;
  23.  
  24. dospec:      name SEQUALS exprlist
  25.         { $$ = mkchain($1, $3); }
  26.     ;
  27.  
  28. iffable:  let lhs SEQUALS expr
  29.         { exequals($2, $4); }
  30.     | SASSIGN end_spec labelval STO name
  31.         { exassign($5, $3); }
  32.     | SCONTINUE end_spec
  33.     | goto
  34.     | io
  35.         { inioctl = NO; }
  36.     | SARITHIF end_spec SLPAR expr SRPAR label SCOMMA label SCOMMA label
  37.         { exarif($4, $6, $8, $10);  thiswasbranch = YES; }
  38.     | call
  39.         { excall($1, 0, 0, labarray); }
  40.     | call SLPAR SRPAR
  41.         { excall($1, 0, 0, labarray); }
  42.     | call SLPAR callarglist SRPAR
  43.         { if(nstars < MAXLABLIST)
  44.             excall($1, mklist($3), nstars, labarray);
  45.           else
  46.             err("too many alternate returns");
  47.         }
  48.     | SRETURN end_spec opt_expr
  49.         { exreturn($3);  thiswasbranch = YES; }
  50.     | stop end_spec opt_expr
  51.         { exstop($1, $3);  thiswasbranch = $1; }
  52.     ;
  53.  
  54. let:      SLET
  55.         { if(parstate == OUTSIDE)
  56.             {
  57.             newproc();
  58.             startproc(0, CLMAIN);
  59.             }
  60.         }
  61.     ;
  62.  
  63. goto:      SGOTO end_spec label
  64.         { exgoto($3);  thiswasbranch = YES; }
  65.     | SASGOTO end_spec name
  66.         { exasgoto($3);  thiswasbranch = YES; }
  67.     | SASGOTO end_spec name opt_comma SLPAR labellist SRPAR
  68.         { exasgoto($3);  thiswasbranch = YES; }
  69.     | SCOMPGOTO end_spec SLPAR labellist SRPAR opt_comma expr
  70.         { if(nstars < MAXLABLIST)
  71.             putcmgo(fixtype($7), nstars, labarray);
  72.           else
  73.             err("computed GOTO list too long");
  74.         }
  75.     ;
  76.  
  77. opt_comma:
  78.     | SCOMMA
  79.     ;
  80.  
  81. call:      SCALL end_spec name
  82.         { nstars = 0; $$ = $3; }
  83.     ;
  84.  
  85. callarglist:  callarg
  86.         { $$ = ($1 ? mkchain($1,0) : 0); }
  87.     | callarglist SCOMMA callarg
  88.         { if($3)
  89.             if($1) $$ = hookup($1, mkchain($3,0));
  90.             else $$ = mkchain($3,0);
  91.         }
  92.     ;
  93.  
  94. callarg:  expr
  95.     | SSTAR label
  96.         { if(nstars<MAXLABLIST) labarray[nstars++] = $2; $$ = 0; }
  97.     ;
  98.  
  99. stop:      SPAUSE
  100.         { $$ = 0; }
  101.     | SSTOP
  102.         { $$ = 1; }
  103.     ;
  104.  
  105. exprlist:  expr
  106.         { $$ = mkchain($1, 0); }
  107.     | exprlist SCOMMA expr
  108.         { $$ = hookup($1, mkchain($3,0) ); }
  109.     ;
  110.  
  111. end_spec:
  112.         { if(parstate == OUTSIDE)
  113.             {
  114.             newproc();
  115.             startproc(0, CLMAIN);
  116.             }
  117.           if(parstate < INDATA) enddcl();
  118.         }
  119.     ;
  120.