[project @ 1996-01-08 20:28:12 by partain]
[ghc-hetmet.git] / ghc / compiler / yaccParser / README-DPH
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
4 needs to do some work.
5
6 Note: you should also "grep" for "#ifdef DPH" in the C source files...
7
8 Will Partain
9
10 foreach i ( ttype.ugn tree.ugn hslexer.lex hsparser.y )
11     set base=$i:r
12     set suff=$i:e
13     diff -c2 $i $base-DPH.$suff
14 end
15
16 *** ttype.ugn   Thu Nov 21 18:54:47 1991
17 --- ttype-DPH.ugn       Thu Jul  9 10:38:59 1992
18 ***************
19 *** 12,15 ****
20 --- 12,18 ----
21         context : < gtcontextl  : list;
22                     gtcontextt  : ttype; >;
23 +       tproc   : < gtpid       : list;
24 +                   gtdata      : ttype; >;
25 +       tpod    : < gtpod       : ttype; >;                     
26   end;
27   
28 *** tree.ugn    Thu May 14 17:13:43 1992
29 --- tree-DPH.ugn        Thu Jul  9 10:39:04 1992
30 ***************
31 *** 62,64 ****
32 --- 62,75 ----
33                     gsccexp     : tree; >;
34         negate  : < gnexp       : tree; >;
35 +       parzf   : < gpzfexp     : tree;
36 +                   gpzfqual    : list; >;
37 +       pardgen : < gdproc      : tree;
38 +                   gdexp       : tree; >;
39 +       parigen : < giproc      : tree;
40 +                   giexp       : tree; >;
41 +       parfilt : < gpfilt      : tree; >;
42 +       pod     : < gpod        : list; >;
43 +       proc    : < gpid        : list;
44 +                   gpdata      : tree; >;
45
46   end;
47 *** hslexer.lex Wed Jun  3 20:56:01 1992
48 --- hslexer-DPH.lex     Thu Jul  9 10:45:03 1992
49 ***************
50 *** 17,20 ****
51 --- 17,21 ----
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.       *
57 ***************
58 *** 560,563 ****
59 --- 561,570 ----
60   "_"                   { RETURN(WILDCARD); }
61   "`"                   { RETURN(BQUOTE); }
62 + "<<"                  { RETURN(OPOD); }
63 + ">>"                  { RETURN(CPOD); }
64 + "(|"                  { RETURN(OPROC); }
65 + "|)"                  { RETURN(CPROC); }
66 + "<<-"                 { RETURN(DRAWNFROM); }
67 + "<<="                 { RETURN(INDEXFROM); }
68   
69   <PRIM>("-")?{N}"#"    {
70 *** hsparser.y  Thu Jul  9 10:58:27 1992
71 --- hsparser-DPH.y      Thu Jul  9 10:49:12 1992
72 ***************
73 *** 5,9 ****
74   *                       Modified by:            Kevin Hammond             *
75   *                       Last date revised:      December 13 1991. KH.     *
76 ! *                       Modification:           Haskell 1.1 Syntax.       *
77   *                                                                         *
78   *                                                                         *
79 --- 5,10 ----
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.   *
84   *                                                                         *
85   *                                                                         *
86 ***************
87 *** 15,19 ****
88   *                                                                         *
89   *                                                                         *
90 ! *                 LALR(1) Syntax for Haskell 1.2                          *
91   *                                                                         *
92   **************************************************************************/
93 --- 16,20 ----
94   *                                                                         *
95   *                                                                         *
96 ! *                 LALR(1) Syntax for Haskell 1.2 + Data Parallelism       *
97   *                                                                         *
98   **************************************************************************/
99 ***************
100 *** 146,149 ****
101 --- 147,151 ----
102   %token        OBRACK          CBRACK          OPAREN          CPAREN
103   %token        COMMA           BQUOTE
104 + %token  OPOD          CPOD            OPROC           CPROC
105   
106   
107 ***************
108 *** 160,163 ****
109 --- 162,166 ----
110   %token        DCOLON          LARROW
111   %token        WILDCARD        AT              LAZY            LAMBDA
112 + %token        DRAWNFROM       INDEXFROM
113   
114   
115 ***************
116 *** 210,213 ****
117 --- 213,218 ----
118   %left OCURLY          OBRACK          OPAREN
119   
120 + %left OPOD            OPROC
121
122   %left         EQUAL
123   
124 ***************
125 *** 238,241 ****
126 --- 243,248 ----
127                 upto
128                 cexp
129 +               tyvar_pids
130 +               parquals
131   
132   
133 ***************
134 *** 246,249 ****
135 --- 253,257 ----
136                 dpatk fpatk opatk aapatk
137                 texps
138 +               processor parqual
139   
140   %type <uid>   MINUS VARID CONID VARSYM CONSYM
141 ***************
142 *** 605,610 ****
143 --- 613,629 ----
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)); }
151         ;
152   
153 + /* Note (hilly) : Similar to tyvar_list except k>=1 not k>=2 */
154
155 + tyvar_pids    : tyvar COMMA tyvar_pids        { $$ = mklcons($1,$3); }
156 +               |  tyvar                        { $$ = lsing($1); }
157 +               ;
158
159   defaultd:  defaultkey dtypes
160                 { 
161 ***************
162 *** 740,743 ****
163 --- 759,765 ----
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));}
169         ;
170         
171 ***************
172 *** 1027,1030 ****
173 --- 1049,1055 ----
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); }
179   
180         /* These only occur in patterns */
181 ***************
182 *** 1035,1038 ****
183 --- 1060,1076 ----
184   
185   
186 + processor :  OPROC exps SEMI exp CPROC                { $$ = mkproc($2,$4); }
187 +         ;
188
189 + parquals  :  parquals COMMA parqual           { $$ = lapp($1,$3); }
190 +         |  parqual                            { $$ = lsing($1); }
191 +         ;
192
193 + parqual  : exp                                        { $$ = mkparfilt($1); }
194 +         | processor DRAWNFROM exp             { $$ = mkpardgen($1,$3); }
195 +         | processor INDEXFROM exp             { $$ = mkparigen($1,$3); }
196 +         ;
197
198
199   /*
200         LHS patterns are parsed in a similar way to
201 ***************
202 *** 1131,1134 ****
203 --- 1169,1173 ----
204         |  OBRACK CBRACK                                { $$ = mkllist(Lnil); }
205         |  LAZY apat                                    { $$ = mklazyp($2); }
206 +         |  OPROC pats SEMI apat CPROC                 { $$ = mkproc($2,$4); }
207         ;
208   
209 ***************
210 *** 1146,1149 ****
211 --- 1185,1189 ----
212         |  obrackkey CBRACK                             { $$ = mkllist(Lnil); }
213         |  lazykey apat                                 { $$ = mklazyp($2); }
214 +         |  oprockey pats SEMI opat CPROC              { $$ = mkproc($2,$4); }
215         ;
216   
217 ***************
218 *** 1283,1286 ****
219 --- 1323,1327 ----
220         |  OBRACK CBRACK                        { $$ = mkllist(Lnil); }
221         |  LAZY apat                            { $$ = mklazyp($2); }
222 +         |  OPROC pats SEMI apat CPROC         { $$ = mkproc($2,$4); }
223         ;
224   
225 ***************
226 *** 1312,1315 ****
227 --- 1353,1357 ----
228         |  obrackkey CBRACK                     { $$ = mkllist(Lnil); }
229         |  lazykey apat                         { $$ = mklazyp($2); }
230 +         |  oprockey pats SEMI opat CPROC              { $$ = mkproc($2,$4); }
231         ;
232   */
233 ***************
234 *** 1372,1375 ****
235 --- 1414,1419 ----
236         ;
237   
238 + oprockey:   OPROC     { setstartlineno(); }
239 +       ;
240   
241