1 The *-DPH.* files are for parsing Jon Hill's "Data Parallel Haskell"
2 variant. These notes indicate the differences from the regular
3 parser. If they are much changed from what's below, someone probably
6 Note: you should also "grep" for "#ifdef DPH" in the C source files...
10 foreach i ( ttype.ugn tree.ugn hslexer.lex hsparser.y )
13 diff -c2 $i $base-DPH.$suff
16 *** ttype.ugn Thu Nov 21 18:54:47 1991
17 --- ttype-DPH.ugn Thu Jul 9 10:38:59 1992
21 context : < gtcontextl : list;
22 gtcontextt : ttype; >;
23 + tproc : < gtpid : list;
25 + tpod : < gtpod : ttype; >;
28 *** tree.ugn Thu May 14 17:13:43 1992
29 --- tree-DPH.ugn Thu Jul 9 10:39:04 1992
34 negate : < gnexp : tree; >;
35 + parzf : < gpzfexp : tree;
37 + pardgen : < gdproc : tree;
39 + parigen : < giproc : tree;
41 + parfilt : < gpfilt : tree; >;
42 + pod : < gpod : list; >;
43 + proc : < gpid : list;
47 *** hslexer.lex Wed Jun 3 20:56:01 1992
48 --- hslexer-DPH.lex Thu Jul 9 10:45:03 1992
52 * 04/12/91 kh Added Int#. *
53 * 31/01/92 kh Haskell 1.2 version. *
54 + * 19/03/92 Jon Hill Added Data Parallel Notation *
55 * 24/04/92 ps Added 'scc'. *
56 * 03/06/92 kh Changed Infix/Prelude Handling. *
60 "_" { RETURN(WILDCARD); }
61 "`" { RETURN(BQUOTE); }
62 + "<<" { RETURN(OPOD); }
63 + ">>" { RETURN(CPOD); }
64 + "(|" { RETURN(OPROC); }
65 + "|)" { RETURN(CPROC); }
66 + "<<-" { RETURN(DRAWNFROM); }
67 + "<<=" { RETURN(INDEXFROM); }
70 *** hsparser.y Thu Jul 9 10:58:27 1992
71 --- hsparser-DPH.y Thu Jul 9 10:49:12 1992
74 * Modified by: Kevin Hammond *
75 * Last date revised: December 13 1991. KH. *
76 ! * Modification: Haskell 1.1 Syntax. *
80 * Modified by: Kevin Hammond *
81 * Last date revised: December 13 1991. KH. *
82 ! * Modification: o Haskell 1.1 Syntax. *
83 ! * o Data Parallel Syntax. *
90 ! * LALR(1) Syntax for Haskell 1.2 *
92 **************************************************************************/
96 ! * LALR(1) Syntax for Haskell 1.2 + Data Parallelism *
98 **************************************************************************/
102 %token OBRACK CBRACK OPAREN CPAREN
104 + %token OPOD CPOD OPROC CPROC
111 %token WILDCARD AT LAZY LAMBDA
112 + %token DRAWNFROM INDEXFROM
118 %left OCURLY OBRACK OPAREN
136 dpatk fpatk opatk aapatk
140 %type <uid> MINUS VARID CONID VARSYM CONSYM
144 | OBRACK tyvar CBRACK { $$ = mktllist($2); }
145 | OPAREN tyvar RARROW tyvar CPAREN { $$ = mktfun($2,$4); }
146 + | OPOD tyvar CPOD { $$ = mktpod($2); }
147 + | OPROC tyvar_pids SEMI tyvar CPROC { $$ = mktproc($2,$4); }
148 + | OPOD tyvar_pids SEMI tyvar CPOD { $$ = mktpod(mktproc($2,$4));}
149 + | OPOD OPROC tyvar_pids SEMI tyvar CPROC CPOD
150 + { $$ = mktpod(mktproc($3,$5)); }
153 + /* Note (hilly) : Similar to tyvar_list except k>=1 not k>=2 */
155 + tyvar_pids : tyvar COMMA tyvar_pids { $$ = mklcons($1,$3); }
156 + | tyvar { $$ = lsing($1); }
159 defaultd: defaultkey dtypes
164 | OPAREN type CPAREN { $$ = $2; }
165 | OBRACK type CBRACK { $$ = mktllist($2); }
166 + | OPOD type CPOD { $$ = mktpod($2); }
167 + | OPROC types SEMI type CPROC { $$ = mktproc($2,$4); }
168 + | OPOD types SEMI type CPOD { $$ = mktpod(mktproc($2,$4));}
174 | sequence { $$ = mkpar($1); }
175 | comprehension { $$ = mkpar($1); }
176 + | OPOD exp VBAR parquals CPOD { $$ = mkparzf($2,$4); }
177 + | OPOD exps CPOD { $$ = mkpod($2); }
178 + | processor { $$ = mkpar($1); }
180 /* These only occur in patterns */
186 + processor : OPROC exps SEMI exp CPROC { $$ = mkproc($2,$4); }
189 + parquals : parquals COMMA parqual { $$ = lapp($1,$3); }
190 + | parqual { $$ = lsing($1); }
193 + parqual : exp { $$ = mkparfilt($1); }
194 + | processor DRAWNFROM exp { $$ = mkpardgen($1,$3); }
195 + | processor INDEXFROM exp { $$ = mkparigen($1,$3); }
200 LHS patterns are parsed in a similar way to
204 | OBRACK CBRACK { $$ = mkllist(Lnil); }
205 | LAZY apat { $$ = mklazyp($2); }
206 + | OPROC pats SEMI apat CPROC { $$ = mkproc($2,$4); }
212 | obrackkey CBRACK { $$ = mkllist(Lnil); }
213 | lazykey apat { $$ = mklazyp($2); }
214 + | oprockey pats SEMI opat CPROC { $$ = mkproc($2,$4); }
220 | OBRACK CBRACK { $$ = mkllist(Lnil); }
221 | LAZY apat { $$ = mklazyp($2); }
222 + | OPROC pats SEMI apat CPROC { $$ = mkproc($2,$4); }
228 | obrackkey CBRACK { $$ = mkllist(Lnil); }
229 | lazykey apat { $$ = mklazyp($2); }
230 + | oprockey pats SEMI opat CPROC { $$ = mkproc($2,$4); }
238 + oprockey: OPROC { setstartlineno(); }