xref: /original-bsd/old/ratfor/r.y (revision f82e54c4)
1 /* @(#)r.y	1.1 (Berkeley) 12/15/82 */
2 %{
3 extern int transfer;
4 extern	int	indent;
5 %}
6 
7 %term	IF ELSE FOR WHILE BREAK NEXT
8 %term	DIGITS DO
9 %term	GOK DEFINE INCLUDE
10 %term	REPEAT UNTIL
11 %term	RETURN
12 %term	SWITCH CASE DEFAULT
13 %%
14 
15 statl	: statl  stat
16 	|
17 	;
18 stat	: if stat	={ indent--; outcont($1); }
19 	| ifelse stat	={ indent--; outcont($1+1); }
20 	| switch fullcase '}'	={ endsw($1, $2); }
21 	| while stat	={ whilestat($1); }
22 	| for stat	={ forstat($1); }
23 	| repeat stat UNTIL	={ untils($1,1); }
24 	| repeat stat		={ untils($1,0); }
25 	| BREAK	={ breakcode(); }
26 	| NEXT		={ nextcode(); }
27 	| do stat	={ dostat($1); }
28 	| GOK		={ gokcode($1); }
29 	| RETURN	={ retcode(); }
30 	| ';'
31 	| '{' statl '}'
32 	| label stat
33 	| error		={ errcode(); yyclearin; }
34 	;
35 switch	: sw '{'
36 	;
37 sw	: SWITCH	={ swcode(); }
38 	;
39 fullcase: caselist	={ $$ = 0; }
40 	| caselist defpart	={ $$ = 1; }
41 	;
42 caselist: casepart
43 	| caselist casepart
44 	;
45 defpart	: default statl
46 	;
47 default	: DEFAULT	={ getdefault(); }
48 	;
49 casepart: case statl
50 	;
51 case	: CASE	={ getcase(); }
52 	;
53 label	: DIGITS	={ transfer = 0; outcode($1); }
54 	;
55 if	: IF		={ ifcode(); }
56 	;
57 ifelse	: if stat ELSE	={ elsecode($1); }
58 	;
59 while	: WHILE	={ whilecode(); }
60 	;
61 for	: FOR		={ forcode(); }
62 	;
63 repeat	: REPEAT	={ repcode(); }
64 	;
65 do	: DO		={ docode(); }
66 	;
67 %%
68