📄 gram.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(); } ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -