This commit was generated by cvs2svn to track changes on a CVS vendor
[unix-history] / usr.bin / f2c / gram.exec
CommitLineData
f1525c23
WH
1exec: iffable
2 | SDO end_spec intonlyon label intonlyoff opt_comma dospecw
3 {
4 if($4->labdefined)
5 execerr("no backward DO loops", CNULL);
6 $4->blklevel = blklevel+1;
7 exdo($4->labelno, NPNULL, $7);
8 }
9 | SDO end_spec opt_comma dospecw
10 {
11 exdo((int)(ctls - ctlstack - 2), NPNULL, $4);
12 NOEXT("DO without label");
13 }
14 | SENDDO
15 { exenddo(NPNULL); }
16 | logif iffable
17 { exendif(); thiswasbranch = NO; }
18 | logif STHEN
19 | SELSEIF end_spec SLPAR expr SRPAR STHEN
20 { exelif($4); lastwasbranch = NO; }
21 | SELSE end_spec
22 { exelse(); lastwasbranch = NO; }
23 | SENDIF end_spec
24 { exendif(); lastwasbranch = NO; }
25 ;
26
27logif: SLOGIF end_spec SLPAR expr SRPAR
28 { exif($4); }
29 ;
30
31dospec: name SEQUALS exprlist
32 { $$ = mkchain((char *)$1, $3); }
33 ;
34
35dospecw: dospec
36 | SWHILE SLPAR expr SRPAR
37 { $$ = mkchain(CNULL, (chainp)$3); }
38 ;
39
40iffable: let lhs SEQUALS expr
41 { exequals((struct Primblock *)$2, $4); }
42 | SASSIGN end_spec assignlabel STO name
43 { exassign($5, $3); }
44 | SCONTINUE end_spec
45 | goto
46 | io
47 { inioctl = NO; }
48 | SARITHIF end_spec SLPAR expr SRPAR label SCOMMA label SCOMMA label
49 { exarif($4, $6, $8, $10); thiswasbranch = YES; }
50 | call
51 { excall($1, LBNULL, 0, labarray); }
52 | call SLPAR SRPAR
53 { excall($1, LBNULL, 0, labarray); }
54 | call SLPAR callarglist SRPAR
55 { if(nstars < maxlablist)
56 excall($1, mklist(revchain($3)), nstars, labarray);
57 else
58 many("alternate returns", 'l', maxlablist);
59 }
60 | SRETURN end_spec opt_expr
61 { exreturn($3); thiswasbranch = YES; }
62 | stop end_spec opt_expr
63 { exstop($1, $3); thiswasbranch = $1; }
64 ;
65
66assignlabel: SICON
67 { $$ = mklabel( convci(toklen, token) ); }
68 ;
69
70let: SLET
71 { if(parstate == OUTSIDE)
72 {
73 newproc();
74 startproc(ESNULL, CLMAIN);
75 }
76 }
77 ;
78
79goto: SGOTO end_spec label
80 { exgoto($3); thiswasbranch = YES; }
81 | SASGOTO end_spec name
82 { exasgoto($3); thiswasbranch = YES; }
83 | SASGOTO end_spec name opt_comma SLPAR labellist SRPAR
84 { exasgoto($3); thiswasbranch = YES; }
85 | SCOMPGOTO end_spec SLPAR labellist SRPAR opt_comma expr
86 { if(nstars < maxlablist)
87 putcmgo(putx(fixtype($7)), nstars, labarray);
88 else
89 many("labels in computed GOTO list", 'l', maxlablist);
90 }
91 ;
92
93opt_comma:
94 | SCOMMA
95 ;
96
97call: SCALL end_spec name
98 { nstars = 0; $$ = $3; }
99 ;
100
101callarglist: callarg
102 { $$ = $1 ? mkchain((char *)$1,CHNULL) : CHNULL; }
103 | callarglist SCOMMA callarg
104 { $$ = $3 ? mkchain((char *)$3, $1) : $1; }
105 ;
106
107callarg: expr
108 | SSTAR label
109 { if(nstars < maxlablist) labarray[nstars++] = $2; $$ = 0; }
110 ;
111
112stop: SPAUSE
113 { $$ = 0; }
114 | SSTOP
115 { $$ = 2; }
116 ;
117
118exprlist: expr
119 { $$ = mkchain((char *)$1, CHNULL); }
120 | exprlist SCOMMA expr
121 { $$ = hookup($1, mkchain((char *)$3,CHNULL) ); }
122 ;
123
124end_spec:
125 { if(parstate == OUTSIDE)
126 {
127 newproc();
128 startproc(ESNULL, CLMAIN);
129 }
130
131/* This next statement depends on the ordering of the state table encoding */
132
133 if(parstate < INDATA) enddcl();
134 }
135 ;
136
137intonlyon:
138 { intonly = YES; }
139 ;
140
141intonlyoff:
142 { intonly = NO; }
143 ;