Added
This commit is contained in:
173
lang/fortran/comp/gram.io
Normal file
173
lang/fortran/comp/gram.io
Normal file
@@ -0,0 +1,173 @@
|
||||
/* 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(); }
|
||||
;
|
||||
Reference in New Issue
Block a user