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(); }
+ ;
|