summaryrefslogtreecommitdiff
path: root/ghc/compiler/yaccParser/README-DPH
blob: 8b9647fbaef91f207812eac80c17153ff2372694 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
The *-DPH.* files are for parsing Jon Hill's "Data Parallel Haskell"
variant.  These notes indicate the differences from the regular
parser.  If they are much changed from what's below, someone probably
needs to do some work.

Note: you should also "grep" for "#ifdef DPH" in the C source files...

Will Partain

foreach i ( ttype.ugn tree.ugn hslexer.lex hsparser.y )
    set base=$i:r
    set suff=$i:e
    diff -c2 $i $base-DPH.$suff
end

*** ttype.ugn	Thu Nov 21 18:54:47 1991
--- ttype-DPH.ugn	Thu Jul  9 10:38:59 1992
***************
*** 12,15 ****
--- 12,18 ----
  	context	: < gtcontextl	: list;
  		    gtcontextt	: ttype; >;
+ 	tproc   : < gtpid	: list;
+ 		    gtdata	: ttype; >;
+ 	tpod	: < gtpod 	: ttype; >;			
  end;
  
*** tree.ugn	Thu May 14 17:13:43 1992
--- tree-DPH.ugn	Thu Jul  9 10:39:04 1992
***************
*** 62,64 ****
--- 62,75 ----
  		    gsccexp	: tree; >;
  	negate	: < gnexp	: tree; >;
+ 	parzf   : < gpzfexp	: tree;
+ 		    gpzfqual    : list; >;
+ 	pardgen : < gdproc	: tree;
+ 		    gdexp	: tree; >;
+ 	parigen : < giproc	: tree;
+ 		    giexp	: tree; >;
+ 	parfilt : < gpfilt	: tree; >;
+ 	pod	: < gpod	: list; >;
+ 	proc   	: < gpid	: list;
+ 		    gpdata      : tree; >;
+ 
  end;
*** hslexer.lex	Wed Jun  3 20:56:01 1992
--- hslexer-DPH.lex	Thu Jul  9 10:45:03 1992
***************
*** 17,20 ****
--- 17,21 ----
  *       04/12/91 kh             Added Int#.                           *
  *       31/01/92 kh             Haskell 1.2 version.                  *
+ *	19/03/92 Jon Hill	Added Data Parallel Notation	      *
  *       24/04/92 ps             Added 'scc'.                          *
  *       03/06/92 kh             Changed Infix/Prelude Handling.       *
***************
*** 560,563 ****
--- 561,570 ----
  "_"			{ RETURN(WILDCARD); }
  "`"			{ RETURN(BQUOTE); }
+ "<<"			{ RETURN(OPOD); }
+ ">>"			{ RETURN(CPOD); }
+ "(|"			{ RETURN(OPROC); }
+ "|)"			{ RETURN(CPROC); }
+ "<<-"			{ RETURN(DRAWNFROM); }
+ "<<="			{ RETURN(INDEXFROM); }
  
  <PRIM>("-")?{N}"#"	{
*** hsparser.y	Thu Jul  9 10:58:27 1992
--- hsparser-DPH.y	Thu Jul  9 10:49:12 1992
***************
*** 5,9 ****
  *                       Modified by:            Kevin Hammond             *
  *                       Last date revised:      December 13 1991. KH.     *
! *                       Modification:           Haskell 1.1 Syntax.       *
  *                                                                         *
  *                                                                         *
--- 5,10 ----
  *                       Modified by:            Kevin Hammond             *
  *                       Last date revised:      December 13 1991. KH.     *
! *                       Modification:           o Haskell 1.1 Syntax.     *
! *						o Data Parallel Syntax.   *
  *                                                                         *
  *                                                                         *
***************
*** 15,19 ****
  *                                                                         *
  *                                                                         *
! *                 LALR(1) Syntax for Haskell 1.2                          *
  *                                                                         *
  **************************************************************************/
--- 16,20 ----
  *                                                                         *
  *                                                                         *
! *                 LALR(1) Syntax for Haskell 1.2 + Data Parallelism       *
  *                                                                         *
  **************************************************************************/
***************
*** 146,149 ****
--- 147,151 ----
  %token	OBRACK		CBRACK		OPAREN		CPAREN
  %token	COMMA		BQUOTE
+ %token  OPOD		CPOD 		OPROC 		CPROC
  
  
***************
*** 160,163 ****
--- 162,166 ----
  %token	DCOLON		LARROW
  %token	WILDCARD	AT		LAZY		LAMBDA
+ %token 	DRAWNFROM	INDEXFROM
  
  
***************
*** 210,213 ****
--- 213,218 ----
  %left	OCURLY		OBRACK		OPAREN
  
+ %left	OPOD		OPROC
+ 
  %left 	EQUAL
  
***************
*** 238,241 ****
--- 243,248 ----
    		upto
  		cexp
+ 		tyvar_pids
+ 		parquals
  
  
***************
*** 246,249 ****
--- 253,257 ----
   		dpatk fpatk opatk aapatk
    		texps
+  		processor parqual
  
  %type <uid>	MINUS VARID CONID VARSYM CONSYM
***************
*** 605,610 ****
--- 613,629 ----
  	|  OBRACK tyvar CBRACK			{ $$ = mktllist($2); }
  	|  OPAREN tyvar RARROW tyvar CPAREN	{ $$ = mktfun($2,$4); }
+ 	|  OPOD tyvar CPOD			{ $$ = mktpod($2); }
+ 	|  OPROC tyvar_pids SEMI tyvar CPROC	{ $$ = mktproc($2,$4); }
+ 	|  OPOD tyvar_pids SEMI tyvar CPOD	{ $$ = mktpod(mktproc($2,$4));}
+ 	|  OPOD OPROC tyvar_pids SEMI tyvar CPROC CPOD	
+ 			{ $$ = mktpod(mktproc($3,$5)); }
  	;
  
+ /* Note (hilly) : Similar to tyvar_list except k>=1 not k>=2 */
+ 
+ tyvar_pids 	: tyvar COMMA tyvar_pids	{ $$ = mklcons($1,$3); }
+ 		|  tyvar 			{ $$ = lsing($1); }
+ 		;
+ 
  defaultd:  defaultkey dtypes
  	 	{ 
***************
*** 740,743 ****
--- 759,765 ----
  	|  OPAREN type CPAREN			{ $$ = $2; }
  	|  OBRACK type CBRACK			{ $$ = mktllist($2); }
+ 	|  OPOD type CPOD			{ $$ = mktpod($2); }
+ 	|  OPROC types SEMI type CPROC		{ $$ = mktproc($2,$4); }
+ 	|  OPOD types SEMI type CPOD		{ $$ = mktpod(mktproc($2,$4));}
  	;
  	
***************
*** 1027,1030 ****
--- 1049,1055 ----
  	|  sequence				{ $$ = mkpar($1); }
  	|  comprehension			{ $$ = mkpar($1); }
+ 	|  OPOD exp VBAR parquals CPOD		{ $$ = mkparzf($2,$4); }
+ 	|  OPOD exps CPOD			{ $$ = mkpod($2); }
+ 	|  processor				{ $$ = mkpar($1); }
  
  	/* These only occur in patterns */
***************
*** 1035,1038 ****
--- 1060,1076 ----
  
  
+ processor :  OPROC exps SEMI exp CPROC		{ $$ = mkproc($2,$4); }
+ 	  ;
+ 
+ parquals  :  parquals COMMA parqual		{ $$ = lapp($1,$3); }
+ 	  |  parqual				{ $$ = lsing($1); }
+ 	  ;
+ 
+ parqual  : exp					{ $$ = mkparfilt($1); }
+ 	  | processor DRAWNFROM exp		{ $$ = mkpardgen($1,$3); }
+ 	  | processor INDEXFROM exp		{ $$ = mkparigen($1,$3); }
+ 	  ;
+ 
+ 
  /*
  	LHS patterns are parsed in a similar way to
***************
*** 1131,1134 ****
--- 1169,1173 ----
  	|  OBRACK CBRACK				{ $$ = mkllist(Lnil); }
  	|  LAZY apat					{ $$ = mklazyp($2); }
+         |  OPROC pats SEMI apat CPROC			{ $$ = mkproc($2,$4); }
  	;
  
***************
*** 1146,1149 ****
--- 1185,1189 ----
  	|  obrackkey CBRACK				{ $$ = mkllist(Lnil); }
  	|  lazykey apat					{ $$ = mklazyp($2); }
+         |  oprockey pats SEMI opat CPROC		{ $$ = mkproc($2,$4); }
  	;
  
***************
*** 1283,1286 ****
--- 1323,1327 ----
  	|  OBRACK CBRACK			{ $$ = mkllist(Lnil); }
  	|  LAZY apat				{ $$ = mklazyp($2); }
+         |  OPROC pats SEMI apat CPROC		{ $$ = mkproc($2,$4); }
  	;
  
***************
*** 1312,1315 ****
--- 1353,1357 ----
  	|  obrackkey CBRACK			{ $$ = mkllist(Lnil); }
  	|  lazykey apat				{ $$ = mklazyp($2); }
+         |  oprockey pats SEMI opat CPROC		{ $$ = mkproc($2,$4); }
  	;
  */
***************
*** 1372,1375 ****
--- 1414,1419 ----
  	;
  
+ oprockey:   OPROC	{ setstartlineno(); }
+ 	;