gram.io

来自「<B>Digital的Unix操作系统VAX 4.2源码</B>」· IO 代码 · 共 177 行

IO
177
字号
  /*  Input/Output Statements */io:	  io1		{ endio(); }	;io1:	  iofmove ioctl	| iofmove unpar_fexpr		{ ioclause(IOSUNIT, $2); endioctl(); }	| iofmove SSTAR		{ ioclause(IOSUNIT, PNULL); endioctl(); }	| iofmove SPOWER		{ ioclause(IOSUNIT, IOSTDERR); endioctl(); }	| iofctl ioctl	| read ioctl		{ doio(PNULL); }	| read infmt		{ doio(PNULL); }	| read ioctl inlist		{ doio($3); }	| read infmt SCOMMA inlist		{ doio($4); }	| read ioctl SCOMMA inlist		{ doio($4); }	| write ioctl		{ doio(PNULL); }	| write ioctl outlist		{ doio($3); }	| print		{ doio(PNULL); }	| print SCOMMA outlist		{ doio($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, PNULL);		ioclause(IOSFMT, $1);		endioctl();		}	| SSTAR		{		ioclause(IOSUNIT, PNULL);		ioclause(IOSFMT, PNULL);		endioctl();		}	;ioctl:	  SLPAR fexpr SRPAR		{ if($2->headblock.vtype == TYCHAR)			{			ioclause(IOSUNIT, PNULL);			ioclause(IOSFMT, $2);			}		  else			ioclause(IOSUNIT, $2);		  endioctl();		}	| SLPAR ctllist SRPAR		{ endioctl(); }	;ctllist:  ioclause	| ctllist SCOMMA ioclause	;ioclause:  fexpr		{ ioclause(IOSPOSITIONAL, $1); }	| SSTAR		{ ioclause(IOSPOSITIONAL, PNULL); }	| SPOWER		{ ioclause(IOSPOSITIONAL, IOSTDERR); }	| nameeq expr		{ ioclause($1, $2); }	| nameeq SSTAR		{ ioclause($1, PNULL); }	| 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, PNULL);		ioclause(IOSFMT, $3);		endioctl();		}	| SPRINT end_spec SSTAR in_ioctl		{		iostmt = IOWRITE;		ioclause(IOSUNIT, PNULL);		ioclause(IOSFMT, PNULL);		endioctl();		}	;inlist:	  inelt		{ $$ = mkchain($1, CHNULL); }	| inlist SCOMMA inelt		{ $$ = hookup($1, mkchain($3, CHNULL)); }	;inelt:	  lhs		{ $$ = (tagptr) $1; }	| SLPAR inlist SCOMMA dospec SRPAR		{ $$ = (tagptr) mkiodo($4,$2); }	;outlist:  uexpr		{ $$ = mkchain($1, CHNULL); }	| other		{ $$ = mkchain($1, CHNULL); }	| out2	;out2:	  uexpr SCOMMA uexpr		{ $$ = mkchain($1, mkchain($3, CHNULL) ); }	| uexpr SCOMMA other		{ $$ = mkchain($1, mkchain($3, CHNULL) ); }	| other SCOMMA uexpr		{ $$ = mkchain($1, mkchain($3, CHNULL) ); }	| other SCOMMA other		{ $$ = mkchain($1, mkchain($3, CHNULL) ); }	| out2  SCOMMA uexpr		{ $$ = hookup($1, mkchain($3, CHNULL) ); }	| out2  SCOMMA other		{ $$ = hookup($1, mkchain($3, CHNULL) ); }	;other:	  complex_const		{ $$ = (tagptr) $1; }	| SLPAR uexpr SCOMMA dospec SRPAR		{ $$ = (tagptr) mkiodo($4, mkchain($2, CHNULL) ); }	| SLPAR other SCOMMA dospec SRPAR		{ $$ = (tagptr) mkiodo($4, mkchain($2, CHNULL) ); }	| SLPAR out2  SCOMMA dospec SRPAR		{ $$ = (tagptr) mkiodo($4, $2); }	;in_ioctl:		{ startioctl(); }	;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?