173 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Io
		
	
	
	
	
	
			
		
		
	
	
			173 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Io
		
	
	
	
	
	
|   /*  Input/Output Statements */
 | |
| 
 | |
| io:	  io1
 | |
| 		{ endio(); }
 | |
| 	;
 | |
| 
 | |
| io1:	  iofmove ioctl
 | |
| 	| iofmove unpar_fexpr
 | |
| 		{ ioclause(IOSUNIT, $2); endioctl(); }
 | |
| 	| iofmove SSTAR
 | |
| 		{ ioclause(IOSUNIT, ENULL); endioctl(); }
 | |
| 	| iofmove SPOWER
 | |
| 		{ ioclause(IOSUNIT, IOSTDERR); endioctl(); }
 | |
| 	| iofctl ioctl
 | |
| 	| read ioctl
 | |
| 		{ doio(CHNULL); }
 | |
| 	| read infmt
 | |
| 		{ doio(CHNULL); }
 | |
| 	| read ioctl inlist
 | |
| 		{ doio(revchain($3)); }
 | |
| 	| read infmt SCOMMA inlist
 | |
| 		{ doio(revchain($4)); }
 | |
| 	| read ioctl SCOMMA inlist
 | |
| 		{ doio(revchain($4)); }
 | |
| 	| write ioctl
 | |
| 		{ doio(CHNULL); }
 | |
| 	| write ioctl outlist
 | |
| 		{ doio(revchain($3)); }
 | |
| 	| print
 | |
| 		{ doio(CHNULL); }
 | |
| 	| print SCOMMA outlist
 | |
| 		{ doio(revchain($3)); }
 | |
| 	;
 | |
| 
 | |
| iofmove:   fmkwd end_spec in_ioctl
 | |
| 	;
 | |
| 
 | |
| fmkwd:	  SBACKSPACE
 | |
| 		{ iostmt = IOBACKSPACE; }
 | |
| 	| SREWIND
 | |
| 		{ iostmt = IOREWIND; }
 | |
| 	| SENDFILE
 | |
| 		{ iostmt = IOENDFILE; }
 | |
| 	;
 | |
| 
 | |
| iofctl:  ctlkwd end_spec in_ioctl
 | |
| 	;
 | |
| 
 | |
| ctlkwd:	  SINQUIRE
 | |
| 		{ iostmt = IOINQUIRE; }
 | |
| 	| SOPEN
 | |
| 		{ iostmt = IOOPEN; }
 | |
| 	| SCLOSE
 | |
| 		{ iostmt = IOCLOSE; }
 | |
| 	;
 | |
| 
 | |
| infmt:	  unpar_fexpr
 | |
| 		{
 | |
| 		ioclause(IOSUNIT, ENULL);
 | |
| 		ioclause(IOSFMT, $1);
 | |
| 		endioctl();
 | |
| 		}
 | |
| 	| SSTAR
 | |
| 		{
 | |
| 		ioclause(IOSUNIT, ENULL);
 | |
| 		ioclause(IOSFMT, ENULL);
 | |
| 		endioctl();
 | |
| 		}
 | |
| 	;
 | |
| 
 | |
| ioctl:	  SLPAR fexpr SRPAR
 | |
| 		{
 | |
| 		  ioclause(IOSUNIT, $2);
 | |
| 		  endioctl();
 | |
| 		}
 | |
| 	| SLPAR ctllist SRPAR
 | |
| 		{ endioctl(); }
 | |
| 	;
 | |
| 
 | |
| ctllist:  ioclause
 | |
| 	| ctllist SCOMMA ioclause
 | |
| 	;
 | |
| 
 | |
| ioclause:  fexpr
 | |
| 		{ ioclause(IOSPOSITIONAL, $1); }
 | |
| 	| SSTAR
 | |
| 		{ ioclause(IOSPOSITIONAL, ENULL); }
 | |
| 	| SPOWER
 | |
| 		{ ioclause(IOSPOSITIONAL, IOSTDERR); }
 | |
| 	| nameeq expr
 | |
| 		{ ioclause($1, $2); }
 | |
| 	| nameeq SSTAR
 | |
| 		{ ioclause($1, ENULL); }
 | |
| 	| nameeq SPOWER
 | |
| 		{ ioclause($1, IOSTDERR); }
 | |
| 	;
 | |
| 
 | |
| nameeq:  SNAMEEQ
 | |
| 		{ $$ = iocname(); }
 | |
| 	;
 | |
| 
 | |
| read:	  SREAD end_spec in_ioctl
 | |
| 		{ iostmt = IOREAD; }
 | |
| 	;
 | |
| 
 | |
| write:	  SWRITE end_spec in_ioctl
 | |
| 		{ iostmt = IOWRITE; }
 | |
| 	;
 | |
| 
 | |
| print:	  SPRINT end_spec fexpr in_ioctl
 | |
| 		{
 | |
| 		iostmt = IOWRITE;
 | |
| 		ioclause(IOSUNIT, ENULL);
 | |
| 		ioclause(IOSFMT, $3);
 | |
| 		endioctl();
 | |
| 		}
 | |
| 	| SPRINT end_spec SSTAR in_ioctl
 | |
| 		{
 | |
| 		iostmt = IOWRITE;
 | |
| 		ioclause(IOSUNIT, ENULL);
 | |
| 		ioclause(IOSFMT, ENULL);
 | |
| 		endioctl();
 | |
| 		}
 | |
| 	;
 | |
| 
 | |
| inlist:	  inelt
 | |
| 		{ $$ = mkchain((char *)$1, CHNULL); }
 | |
| 	| inlist SCOMMA inelt
 | |
| 		{ $$ = mkchain((char *)$3, $1); }
 | |
| 	;
 | |
| 
 | |
| inelt:	  lhs
 | |
| 		{ $$ = (tagptr) $1; }
 | |
| 	| SLPAR inlist SCOMMA dospec SRPAR
 | |
| 		{ $$ = (tagptr) mkiodo($4,revchain($2)); }
 | |
| 	;
 | |
| 
 | |
| outlist:  uexpr
 | |
| 		{ $$ = mkchain((char *)$1, CHNULL); }
 | |
| 	| other
 | |
| 		{ $$ = mkchain((char *)$1, CHNULL); }
 | |
| 	| out2
 | |
| 	;
 | |
| 
 | |
| out2:	  uexpr SCOMMA uexpr
 | |
| 		{ $$ = mkchain((char *)$3, mkchain((char *)$1, CHNULL) ); }
 | |
| 	| uexpr SCOMMA other
 | |
| 		{ $$ = mkchain((char *)$3, mkchain((char *)$1, CHNULL) ); }
 | |
| 	| other SCOMMA uexpr
 | |
| 		{ $$ = mkchain((char *)$3, mkchain((char *)$1, CHNULL) ); }
 | |
| 	| other SCOMMA other
 | |
| 		{ $$ = mkchain((char *)$3, mkchain((char *)$1, CHNULL) ); }
 | |
| 	| out2  SCOMMA uexpr
 | |
| 		{ $$ = mkchain((char *)$3, $1); }
 | |
| 	| out2  SCOMMA other
 | |
| 		{ $$ = mkchain((char *)$3, $1); }
 | |
| 	;
 | |
| 
 | |
| other:	  complex_const
 | |
| 		{ $$ = (tagptr) $1; }
 | |
| 	| SLPAR expr SRPAR
 | |
| 		{ $$ = (tagptr) $2; }
 | |
| 	| SLPAR uexpr SCOMMA dospec SRPAR
 | |
| 		{ $$ = (tagptr) mkiodo($4, mkchain((char *)$2, CHNULL) ); }
 | |
| 	| SLPAR other SCOMMA dospec SRPAR
 | |
| 		{ $$ = (tagptr) mkiodo($4, mkchain((char *)$2, CHNULL) ); }
 | |
| 	| SLPAR out2  SCOMMA dospec SRPAR
 | |
| 		{ $$ = (tagptr) mkiodo($4, revchain($2)); }
 | |
| 	;
 | |
| 
 | |
| in_ioctl:
 | |
| 		{ startioctl(); }
 | |
| 	;
 |