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