source: mainline/uspace/app/pcc/f77/fcom/gram.exec@ c6a7b3a

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since c6a7b3a was a7de7182, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 14 years ago

Added pcc source tree (contents of pcc-1.0.0.tgz)

  • Property mode set to 100644
File size: 2.2 KB
Line 
1exec: iffable
2 | SDO end_spec label opt_comma dospec
3 {
4 if($3->labdefined)
5 execerr("no backward DO loops");
6 $3->blklevel = blklevel+1;
7 exdo($3->labelno, $5);
8 }
9 | logif iffable
10 { exendif(); thiswasbranch = NO; }
11 | logif STHEN
12 | SELSEIF end_spec SLPAR expr SRPAR STHEN
13 { exelif($4); lastwasbranch = NO; }
14 | SELSE end_spec
15 { exelse(); lastwasbranch = NO; }
16 | SENDIF end_spec
17 { exendif(); lastwasbranch = NO; }
18 ;
19
20logif: SLOGIF end_spec SLPAR expr SRPAR
21 { exif($4); }
22 ;
23
24dospec: name SEQUALS exprlist
25 { $$ = mkchain($1, $3); }
26 ;
27
28iffable: let lhs SEQUALS expr
29 { exequals($2, $4); }
30 | SASSIGN end_spec labelval STO name
31 { exassign($5, $3); }
32 | SCONTINUE end_spec
33 | goto
34 | io
35 { inioctl = NO; }
36 | SARITHIF end_spec SLPAR expr SRPAR label SCOMMA label SCOMMA label
37 { exarif($4, $6, $8, $10); thiswasbranch = YES; }
38 | call
39 { excall($1, 0, 0, labarray); }
40 | call SLPAR SRPAR
41 { excall($1, 0, 0, labarray); }
42 | call SLPAR callarglist SRPAR
43 { excall($1, mklist($3), nstars, labarray); }
44 | SRETURN end_spec opt_expr
45 { exreturn($3); thiswasbranch = YES; }
46 | stop end_spec opt_expr
47 { exstop($1, $3); thiswasbranch = $1; }
48 ;
49
50let: SLET
51 { if(parstate == OUTSIDE)
52 {
53 newproc();
54 startproc(0, CLMAIN);
55 }
56 }
57 ;
58
59goto: SGOTO end_spec label
60 { exgoto($3); thiswasbranch = YES; }
61 | SASGOTO end_spec name
62 { exasgoto($3); thiswasbranch = YES; }
63 | SASGOTO end_spec name opt_comma SLPAR labellist SRPAR
64 { exasgoto($3); thiswasbranch = YES; }
65 | SCOMPGOTO end_spec SLPAR labellist SRPAR opt_comma expr
66 { putcmgo(fixtype($7), nstars, labarray); }
67 ;
68
69opt_comma:
70 | SCOMMA
71 ;
72
73call: SCALL end_spec name
74 { nstars = 0; $$ = $3; }
75 ;
76
77callarglist: callarg
78 { $$ = ($1 ? mkchain($1,0) : 0); }
79 | callarglist SCOMMA callarg
80 { if($3) {
81 if($1) $$ = hookup($1, mkchain($3,0));
82 else $$ = mkchain($3,0);
83 }
84 }
85 ;
86
87callarg: expr
88 | SSTAR label
89 { labarray[nstars++] = $2; $$ = 0; }
90 ;
91
92stop: SPAUSE
93 { $$ = 0; }
94 | SSTOP
95 { $$ = 1; }
96 ;
97
98exprlist: expr
99 { $$ = mkchain($1, 0); }
100 | exprlist SCOMMA expr
101 { $$ = hookup($1, mkchain($3,0) ); }
102 ;
103
104end_spec:
105 { if(parstate == OUTSIDE)
106 {
107 newproc();
108 startproc(0, CLMAIN);
109 }
110 if(parstate < INDATA) enddcl();
111 }
112 ;
Note: See TracBrowser for help on using the repository browser.