1: /*
   2:  * Copyright (c) 1980 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  *
   6:  *	@(#)gram.io	5.1 (Berkeley) 6/7/85
   7:  */
   8: 
   9:   /*  Input/Output Statements */
  10: 
  11: io:   io1
  12:         { endio(); }
  13:     ;
  14: 
  15: io1:      iofmove ioctl
  16:     | iofmove unpar_fexpr
  17:         { ioclause(IOSUNIT, $2); endioctl(); }
  18:     | iofmove SSTAR
  19:         { ioclause(IOSUNIT, PNULL); endioctl(); }
  20:     | iofmove SPOWER
  21:         { ioclause(IOSUNIT, IOSTDERR); endioctl(); }
  22:     | iofctl ioctl
  23:     | read ioctl
  24:         { doio(PNULL); }
  25:     | read infmt
  26:         { doio(PNULL); }
  27:     | read ioctl inlist
  28:         { doio($3); }
  29:     | read infmt SCOMMA inlist
  30:         { doio($4); }
  31:     | read ioctl SCOMMA inlist
  32:         { doio($4); }
  33:     | write ioctl
  34:         { doio(PNULL); }
  35:     | write ioctl outlist
  36:         { doio($3); }
  37:     | print
  38:         { doio(PNULL); }
  39:     | print SCOMMA outlist
  40:         { doio($3); }
  41:     ;
  42: 
  43: iofmove:   fmkwd end_spec in_ioctl
  44:     ;
  45: 
  46: fmkwd:    SBACKSPACE
  47:         { iostmt = IOBACKSPACE; }
  48:     | SREWIND
  49:         { iostmt = IOREWIND; }
  50:     | SENDFILE
  51:         { iostmt = IOENDFILE; }
  52:     ;
  53: 
  54: iofctl:  ctlkwd end_spec in_ioctl
  55:     ;
  56: 
  57: ctlkwd:   SINQUIRE
  58:         { iostmt = IOINQUIRE; }
  59:     | SOPEN
  60:         { iostmt = IOOPEN; }
  61:     | SCLOSE
  62:         { iostmt = IOCLOSE; }
  63:     ;
  64: 
  65: infmt:    unpar_fexpr
  66:         {
  67:         ioclause(IOSUNIT, PNULL);
  68:         ioclause(IOSFMT, $1);
  69:         endioctl();
  70:         }
  71:     | SSTAR
  72:         {
  73:         ioclause(IOSUNIT, PNULL);
  74:         ioclause(IOSFMT, PNULL);
  75:         endioctl();
  76:         }
  77:     ;
  78: 
  79: ioctl:    SLPAR fexpr SRPAR
  80:         { if($2->headblock.vtype == TYCHAR)
  81:             {
  82:             ioclause(IOSUNIT, PNULL);
  83:             ioclause(IOSFMT, $2);
  84:             }
  85:           else
  86:             ioclause(IOSUNIT, $2);
  87:           endioctl();
  88:         }
  89:     | SLPAR ctllist SRPAR
  90:         { endioctl(); }
  91:     ;
  92: 
  93: ctllist:  ioclause
  94:     | ctllist SCOMMA ioclause
  95:     ;
  96: 
  97: ioclause:  fexpr
  98:         { ioclause(IOSPOSITIONAL, $1); }
  99:     | SSTAR
 100:         { ioclause(IOSPOSITIONAL, PNULL); }
 101:     | SPOWER
 102:         { ioclause(IOSPOSITIONAL, IOSTDERR); }
 103:     | nameeq expr
 104:         { ioclause($1, $2); }
 105:     | nameeq SSTAR
 106:         { ioclause($1, PNULL); }
 107:     | nameeq SPOWER
 108:         { ioclause($1, IOSTDERR); }
 109:     ;
 110: 
 111: nameeq:  SNAMEEQ
 112:         { $$ = iocname(); }
 113:     ;
 114: 
 115: read:     SREAD end_spec in_ioctl
 116:         { iostmt = IOREAD; }
 117:     ;
 118: 
 119: write:    SWRITE end_spec in_ioctl
 120:         { iostmt = IOWRITE; }
 121:     ;
 122: 
 123: print:    SPRINT end_spec fexpr in_ioctl
 124:         {
 125:         iostmt = IOWRITE;
 126:         ioclause(IOSUNIT, PNULL);
 127:         ioclause(IOSFMT, $3);
 128:         endioctl();
 129:         }
 130:     | SPRINT end_spec SSTAR in_ioctl
 131:         {
 132:         iostmt = IOWRITE;
 133:         ioclause(IOSUNIT, PNULL);
 134:         ioclause(IOSFMT, PNULL);
 135:         endioctl();
 136:         }
 137:     ;
 138: 
 139: inlist:   inelt
 140:         { $$ = mkchain($1, CHNULL); }
 141:     | inlist SCOMMA inelt
 142:         { $$ = hookup($1, mkchain($3, CHNULL)); }
 143:     ;
 144: 
 145: inelt:    lhs
 146:         { $$ = (tagptr) $1; }
 147:     | SLPAR inlist SCOMMA dospec SRPAR
 148:         { $$ = (tagptr) mkiodo($4,$2); }
 149:     ;
 150: 
 151: outlist:  uexpr
 152:         { $$ = mkchain($1, CHNULL); }
 153:     | other
 154:         { $$ = mkchain($1, CHNULL); }
 155:     | out2
 156:     ;
 157: 
 158: out2:     uexpr SCOMMA uexpr
 159:         { $$ = mkchain($1, mkchain($3, CHNULL) ); }
 160:     | uexpr SCOMMA other
 161:         { $$ = mkchain($1, mkchain($3, CHNULL) ); }
 162:     | other SCOMMA uexpr
 163:         { $$ = mkchain($1, mkchain($3, CHNULL) ); }
 164:     | other SCOMMA other
 165:         { $$ = mkchain($1, mkchain($3, CHNULL) ); }
 166:     | out2  SCOMMA uexpr
 167:         { $$ = hookup($1, mkchain($3, CHNULL) ); }
 168:     | out2  SCOMMA other
 169:         { $$ = hookup($1, mkchain($3, CHNULL) ); }
 170:     ;
 171: 
 172: other:    complex_const
 173:         { $$ = (tagptr) $1; }
 174:     | SLPAR uexpr SCOMMA dospec SRPAR
 175:         { $$ = (tagptr) mkiodo($4, mkchain($2, CHNULL) ); }
 176:     | SLPAR other SCOMMA dospec SRPAR
 177:         { $$ = (tagptr) mkiodo($4, mkchain($2, CHNULL) ); }
 178:     | SLPAR out2  SCOMMA dospec SRPAR
 179:         { $$ = (tagptr) mkiodo($4, $2); }
 180:     ;
 181: 
 182: in_ioctl:
 183:         { startioctl(); }
 184:     ;
Last modified: 1985-06-08
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 907
Valid CSS Valid XHTML 1.0 Strict