Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/branches/idlbasis-devel/src/MLRISC/Tools/Parser/mdl.grm
ViewVC logotype

Diff of /sml/branches/idlbasis-devel/src/MLRISC/Tools/Parser/mdl.grm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

sml/trunk/src/MLRISC/Tools/Parser/mdl.grm revision 775, Fri Jan 12 01:17:51 2001 UTC sml/branches/idlbasis-devel/src/MLRISC/Tools/Parser/mdl.grm revision 1002, Fri Nov 30 17:11:33 2001 UTC
# Line 75  Line 75 
75    
76    
77  fun markdecl srcMap (decl,left,right) =  fun markdecl srcMap (decl,left,right) =
78       MARKdecl(SourceMap.location srcMap (left,right), decl)       MARKdecl(SourceMapping.location srcMap (left,right), decl)
79  fun markexp srcMap (exp,left,right) =  fun markexp srcMap (exp,left,right) =
80       MARKexp(SourceMap.location srcMap (left,right), exp)       MARKexp(SourceMapping.location srcMap (left,right), exp)
81    
82  exception Bad  exception Bad
83    
# Line 102  Line 102 
102  fun clause(pats, guard, NONE, e) = CLAUSE(pats, guard, e)  fun clause(pats, guard, NONE, e) = CLAUSE(pats, guard, e)
103    | clause(pats, guard, SOME x, e) = CLAUSE(pats, guard, CONTexp(e, x))    | clause(pats, guard, SOME x, e) = CLAUSE(pats, guard, CONTexp(e, x))
104    
105    fun seqdecl [d] = d
106      | seqdecl ds  = SEQdecl ds
107    
108    fun idty(IDENT([],"unit")) = TUPLEty []
109      | idty x = IDty x
110    
111  %%  %%
112  %header (functor MDLParser(structure Token   : TOKEN  %header (functor MDLParser(structure Token   : TOKEN
113                             structure AstPP   : MDL_AST_PRETTY_PRINTER                             structure AstPP   : MDL_AST_PRETTY_PRINTER
# Line 109  Line 115 
115          )          )
116    
117  %arg    (srcMap,err,import,precStack,extraCells)  %arg    (srcMap,err,import,precStack,extraCells)
118     : SourceMap.sourcemap * (SourceMap.location * string -> unit) *     : SourceMapping.sourcemap * (SourceMapping.location * string -> unit) *
119       (SourceMap.location * string -> decl list) *       (SourceMapping.location * string -> decl list) *
120       PrecedenceParser.precedence_stack ref *       PrecedenceParser.precedence_stack ref *
121       Ast.storagedecl list       Ast.storagedecl list
122  %name   MDL  %name   MDL
# Line 120  Line 126 
126          LPAREN | RPAREN | LBRACKET | RBRACKET | LBRACE | RBRACE | SEMICOLON |          LPAREN | RPAREN | LBRACKET | RBRACKET | LBRACE | RBRACE | SEMICOLON |
127          LDQUOTE | RDQUOTE | LMETA | RMETA |          LDQUOTE | RDQUOTE | LMETA | RMETA |
128          CELLSET | FN | STORAGE | LOCATIONS | HASH |          CELLSET | FN | STORAGE | LOCATIONS | HASH |
129          COMMA | COLON | DOT | DOTDOT | AT | BAR | ARROW | DARROW | PAR | BITS |          COMMA | COLON | COLONGREATER |
130            DOT | DOTDOT | AT | BAR | ARROW | DARROW | PAR | BITS |
131          IF | THEN | ELSE | TRUE | FALSE | WILD | RAISE |          IF | THEN | ELSE | TRUE | FALSE | WILD | RAISE |
132          HANDLE | LET | STRUCTURE | FUNCTOR | SIGNATURE | SIG | STRUCT | WHERE |          HANDLE | LET | STRUCTURE | FUNCTOR | SIGNATURE | SIG | STRUCT | WHERE |
133          SHARING | INSTRUCTION | REGISTER | CELL | CELLS | ORDERING |          SHARING | INSTRUCTION | REGISTER | CELL | CELLS | ORDERING |
# Line 149  Line 156 
156    
157  %nonterm architecture of decl list |  %nonterm architecture of decl list |
158           structexp of structexp |           structexp of structexp |
159             sigcon of sigconstraint |
160           opt_of of unit |           opt_of of unit |
161           id of id |           id of id |
162           sym of id |           sym of id |
# Line 185  Line 193 
193           aexp2 of exp Prec.token |           aexp2 of exp Prec.token |
194           appexp of exp Prec.token list |           appexp of exp Prec.token list |
195           exp of exp |           exp of exp |
196             typedexp of exp |
197           guard of exp option |           guard of exp option |
198           funguard of exp option |           funguard of exp option |
199           cont of id option |           cont of id option |
# Line 203  Line 212 
212           apat2 of pat Prec.token |           apat2 of pat Prec.token |
213           apppat of pat Prec.token list |           apppat of pat Prec.token list |
214           pat of pat |           pat of pat |
215             typedpat of pat |
216           pats of pat list |           pats of pat list |
217           pats1 of pat list |           pats1 of pat list |
218           pats2 of pat list |           pats2 of pat list |
# Line 357  Line 367 
367  decl:           mldecl optsemi  (mldecl)  decl:           mldecl optsemi  (mldecl)
368  |               mddecl optsemi  (mddecl)  |               mddecl optsemi  (mddecl)
369  |               INCLUDE string optsemi  |               INCLUDE string optsemi
370                  (SEQdecl(import                  (seqdecl(import
371                    (SourceMap.location srcMap                    (SourceMapping.location srcMap
372                        (INCLUDEleft,stringright), string)))                        (INCLUDEleft,stringright), string)))
373    
374  mldecl:         mymldecl (markdecl srcMap (mymldecl,mymldeclleft,mymldeclright))  mldecl:         mymldecl (markdecl srcMap (mymldecl,mymldeclleft,mymldeclright))
# Line 452  Line 462 
462  |               RTL id LBRACE labpats0 RBRACE EQ exp  |               RTL id LBRACE labpats0 RBRACE EQ exp
463                     (RTLdecl(IDpat id,LAMBDAexp                     (RTLdecl(IDpat id,LAMBDAexp
464                                    [CLAUSE([RECORDpat labpats0],NONE,exp)],                                    [CLAUSE([RECORDpat labpats0],NONE,exp)],
465                        SourceMap.location srcMap (RTLleft, expright)))                        SourceMapping.location srcMap (RTLleft, expright)))
466  |               RTL asapat EQ exp  |               RTL asapat EQ exp
467                     (RTLdecl(asapat,exp,                     (RTLdecl(asapat,exp,
468                              SourceMap.location srcMap (RTLleft,expright)))                              SourceMapping.location srcMap (RTLleft,expright)))
469  |               RTL syms COLON ty (RTLSIGdecl(syms,ty))  |               RTL syms COLON ty (RTLSIGdecl(syms,ty))
470  |               VAL valbinds (VALdecl(valbinds))  |               VAL valbinds (VALdecl(valbinds))
471  |               VAL syms COLON ty        (VALSIGdecl(syms,ty))  |               VAL syms COLON ty        (VALSIGdecl(syms,ty))
472  |               TYPE tyvarseq tid (TYPESIGdecl(tid,tyvarseq))  |               TYPE tyvarseq tid (TYPESIGdecl(tid,tyvarseq))
473  |               LOCAL scopeddecls IN scopeddecls END  |               LOCAL scopeddecls IN scopeddecls END
474                          (LOCALdecl(scopeddecls1,scopeddecls2))                          (LOCALdecl(scopeddecls1,scopeddecls2))
475  |               STRUCTURE id EQ structexp (STRUCTUREdecl(id,[],NONE,structexp))  |               STRUCTURE id EQ structexp
476  |               STRUCTURE id COLON sigexp EQ structexp                          (STRUCTUREdecl(id,[],NONE,structexp))
477                          (STRUCTUREdecl(id,[],SOME sigexp,structexp))  |               STRUCTURE id sigcon EQ structexp
478                            (STRUCTUREdecl(id,[],SOME sigcon,structexp))
479  |               STRUCTURE id COLON sigexp (STRUCTURESIGdecl(id,sigexp))  |               STRUCTURE id COLON sigexp (STRUCTURESIGdecl(id,sigexp))
480  |               SIGNATURE id EQ sigexp (SIGNATUREdecl(id,sigexp))  |               SIGNATURE id EQ sigexp (SIGNATUREdecl(id,sigexp))
481  |               FUNCTOR id LPAREN functorarg RPAREN EQ structexp  |               FUNCTOR id LPAREN functorarg RPAREN EQ structexp
482                          (STRUCTUREdecl(id,functorarg,NONE,structexp))                          (STRUCTUREdecl(id,functorarg,NONE,structexp))
483  |               FUNCTOR id LPAREN functorarg RPAREN COLON sigexp EQ structexp  |               FUNCTOR id LPAREN functorarg RPAREN sigcon EQ structexp
484                          (STRUCTUREdecl(id,functorarg,SOME sigexp,structexp))                          (STRUCTUREdecl(id,functorarg,SOME sigcon,structexp))
485  |               FUNCTOR id EQ structexp (FUNCTORdecl(id,[],NONE,structexp))  |               FUNCTOR id EQ structexp
486                            (FUNCTORdecl(id,[],NONE,structexp))
487  |               SHARING sharingdecls (SHARINGdecl sharingdecls)  |               SHARING sharingdecls (SHARINGdecl sharingdecls)
488  |               INFIX intopt syms (Infix precStack (intopt,syms); INFIXdecl(intopt,syms))  |               INFIX intopt syms (Infix precStack (intopt,syms); INFIXdecl(intopt,syms))
489  |               INFIXR intopt syms (Infixr precStack (intopt,syms); INFIXRdecl(intopt,syms))  |               INFIXR intopt syms (Infixr precStack (intopt,syms); INFIXRdecl(intopt,syms))
# Line 489  Line 501 
501    
502    
503  functorarg:     scopeddecls             (scopeddecls)  functorarg:     scopeddecls             (scopeddecls)
504  |               id COLON sigexp         ([FUNCTORARGdecl(id,sigexp)])  |               id sigcon               ([FUNCTORARGdecl(id,sigcon)])
505    
506  sigexp:         ident                   (IDsig ident)  sigexp:         ident                   (IDsig ident)
507  |               SIG decls END           (DECLsig decls)  |               SIG decls END           (DECLsig decls)
508  |               sigexp WHERE sigsubs    (sigsubs sigexp)  |               sigexp WHERE sigsubs    (sigsubs sigexp)
509    
510    sigcon:         COLON sigexp            ({abstract=false,sigexp=sigexp})
511    |               COLONGREATER sigexp     ({abstract=true,sigexp=sigexp})
512    
513  sigsubs:        sigsub                  (sigsub)  sigsubs:        sigsub                  (sigsub)
514  |               sigsub AND sigsubs      (sigsub o sigsubs)  |               sigsub AND sigsubs      (sigsub o sigsubs)
515    
# Line 597  Line 612 
612                            nop=nop,sdi=sdi,nullified=nullified,                            nop=nop,sdi=sdi,nullified=nullified,
613                            delayslot=delayslot,                            delayslot=delayslot,
614                            delaycand=cand, latency=latency, pipeline=pipeline,                            delaycand=cand, latency=latency, pipeline=pipeline,
615                            loc=SourceMap.location srcMap (symleft,sdiright)                            loc=SourceMapping.location srcMap (symleft,sdiright)
616                           }                           }
617                   end                   end
618                  )                  )
# Line 732  Line 747 
747  valbinds:       valbind                 ([valbind])  valbinds:       valbind                 ([valbind])
748  |               valbind AND valbinds    (valbind::valbinds)  |               valbind AND valbinds    (valbind::valbinds)
749    
750  valbind:        pat EQ exp              (VALbind(pat,exp))  valbind:        pat EQ typedexp         (VALbind(pat,typedexp))
751    
752  literal:        word                    (WORD32lit word)  literal:        word                    (WORD32lit word)
753  |               int                     (INTlit int)  |               int                     (INTlit int)
# Line 747  Line 762 
762  |               HASH id                 (TYPEexp(TYVARty(INTtv id)))  |               HASH id                 (TYPEexp(TYVARty(INTtv id)))
763  |               OP symb                 (IDexp(IDENT([],symb)))  |               OP symb                 (IDexp(IDENT([],symb)))
764  |               LPAREN symb RPAREN      (IDexp(IDENT([],symb)))  |               LPAREN symb RPAREN      (IDexp(IDENT([],symb)))
765  |               LPAREN exp COLON ty RPAREN      (TYPEDexp(exp,ty))  (*|             LPAREN exp COLON ty RPAREN      (TYPEDexp(exp,ty))*)
766  |               LDQUOTE asms RDQUOTE    (ASMexp(ASMasm asms))  |               LDQUOTE asms RDQUOTE    (ASMexp(ASMasm asms))
767  |               LPAREN RPAREN           (TUPLEexp [])  |               LPAREN RPAREN           (TUPLEexp [])
768  |               LPAREN exp RPAREN       (exp)  |               LPAREN typedexp RPAREN  (typedexp)
769  |               LPAREN exps2 RPAREN     (TUPLEexp exps2)  |               LPAREN exps2 RPAREN     (TUPLEexp exps2)
770  |               LPAREN expseq2 RPAREN   (SEQexp expseq2)  |               LPAREN expseq2 RPAREN   (SEQexp expseq2)
771  |               LBRACKET exps RBRACKET  (LISTexp(exps,NONE))  |               LBRACKET exps RBRACKET  (LISTexp(exps,NONE))
# Line 758  Line 773 
773  |               DOLLAR id LBRACKET exp region RBRACKET (LOCexp(id,exp,region))  |               DOLLAR id LBRACKET exp region RBRACKET (LOCexp(id,exp,region))
774  |               LLBRACKET rtlterms RRBRACKET (RTLexp(rtlterms))  |               LLBRACKET rtlterms RRBRACKET (RTLexp(rtlterms))
775  |               sym CONCAT LBRACKET exps RBRACKET  |               sym CONCAT LBRACKET exps RBRACKET
776                  (let val loc = SourceMap.location srcMap                  (let val loc = SourceMapping.location srcMap
777                                  (symleft,RBRACKETright)                                  (symleft,RBRACKETright)
778                   in LISTexp(enumExp(err,loc,sym,exps),NONE) end                   in LISTexp(enumExp(err,loc,sym,exps),NONE) end
779                  )                  )
780  |               LBRACKET exps RBRACKET CONCAT sym  |               LBRACKET exps RBRACKET CONCAT sym
781                  (let val loc = SourceMap.location srcMap                  (let val loc = SourceMapping.location srcMap
782                                  (symleft,RBRACKETright)                                  (symleft,RBRACKETright)
783                   in LISTexp(enumExp'(err,loc,exps,sym),NONE) end                   in LISTexp(enumExp'(err,loc,exps,sym),NONE) end
784                  )                  )
785    
786  |               sym CONCAT LBRACKET exps RBRACKET CONCAT sym  |               sym CONCAT LBRACKET exps RBRACKET CONCAT sym
787                  (let val loc = SourceMap.location srcMap                  (let val loc = SourceMapping.location srcMap
788                                  (symleft,RBRACKETright)                                  (symleft,RBRACKETright)
789                   in LISTexp(enumExp'(err,loc,                   in LISTexp(enumExp'(err,loc,
790                                      enumExp(err,loc,sym1,exps),sym2),                                      enumExp(err,loc,sym1,exps),sym2),
# Line 794  Line 809 
809  labexps:        labexp                  ([labexp])  labexps:        labexp                  ([labexp])
810  |               labexp COMMA labexps    (labexp::labexps)  |               labexp COMMA labexps    (labexp::labexps)
811    
812  labexp:         id EQ exp               (id,exp)  labexp:         id EQ typedexp          (id,typedexp)
813  |               id                      (id,IDexp(IDENT([],id)))  |               id                      (id,IDexp(IDENT([],id)))
814    
815  appexp:         aexp2                   ([aexp2])  appexp:         aexp2                   ([aexp2])
816  |               appexp aexp2            (appexp @ [aexp2])  |               appexp aexp2            (appexp @ [aexp2])
817    
818  exp:            appexp                  (parseExp precStack err  exp:            appexp                  (parseExp precStack err
819                   (SourceMap.location srcMap (appexpleft,appexpright)) appexp)                   (SourceMapping.location srcMap (appexpleft,appexpright)) appexp)
820  |               IF exp THEN exp ELSE exp (IFexp(exp1,exp2,exp3))  |               IF typedexp THEN typedexp ELSE exp
821  |               CASE exp OF clauses     (CASEexp(exp,clauses))                          (IFexp(typedexp1,typedexp2,exp))
822    |               CASE typedexp OF clauses        (CASEexp(typedexp,clauses))
823  |               FN clauses              (LAMBDAexp clauses)  |               FN clauses              (LAMBDAexp clauses)
824  |               exp HANDLE clauses      (HANDLEexp(exp,clauses))  |               exp HANDLE clauses      (HANDLEexp(exp,clauses))
825  |               RAISE exp               (RAISEexp exp)  |               RAISE exp               (RAISEexp exp)
826    
827  expseq:         exp                     ([exp])  typedexp:       exp                     (exp)
828  |               exp SEMICOLON expseq    (exp::expseq)  |               typedexp COLON ty       (TYPEDexp(typedexp,ty))
829    
830  expseq2:        exp SEMICOLON expseq    (exp::expseq)  expseq:         typedexp                        ([typedexp])
831    |               typedexp SEMICOLON expseq       (typedexp::expseq)
832    
833  exps1:          exp             ([exp])  expseq2:        typedexp SEMICOLON expseq       (typedexp::expseq)
 |               exp COMMA exps1 (exp::exps1)  
834    
835  exps2:          exp COMMA exps1 (exp::exps1)  exps1:          typedexp                ([typedexp])
836    |               typedexp COMMA exps1    (typedexp::exps1)
837    
838    exps2:          typedexp COMMA exps1 (typedexp::exps1)
839    
840  exps:                   ([])  exps:                   ([])
841  |               exps1   (exps1)  |               exps1   (exps1)
# Line 829  Line 848 
848  |               LPAREN pats2 RPAREN             (TUPLEpat pats2)  |               LPAREN pats2 RPAREN             (TUPLEpat pats2)
849  |               LPAREN orpats2 RPAREN           (ORpat orpats2)  |               LPAREN orpats2 RPAREN           (ORpat orpats2)
850  |               LPAREN andpats2 RPAREN          (ANDpat andpats2)  |               LPAREN andpats2 RPAREN          (ANDpat andpats2)
851  |               LPAREN pat RPAREN               (pat)  |               LPAREN typedpat RPAREN          (typedpat)
852  |               LPAREN pat WHERE exp RPAREN     (WHEREpat(pat,exp))  |               LPAREN typedpat WHERE typedexp RPAREN
853  |               LPAREN pat WHERE exp IN pat RPAREN                          (WHEREpat(typedpat,typedexp))
854                                                  (NESTEDpat(pat1,exp,pat2))  |               LPAREN typedpat WHERE typedexp IN typedpat RPAREN
855                            (NESTEDpat(typedpat1,typedexp,typedpat2))
856  |               LBRACE labpats0 RBRACE          (RECORDpat(labpats0))  |               LBRACE labpats0 RBRACE          (RECORDpat(labpats0))
857  |               sym CONCAT LBRACKET pats RBRACKET  |               sym CONCAT LBRACKET pats RBRACKET
858                  (let val loc = SourceMap.location srcMap                  (let val loc = SourceMapping.location srcMap
859                                     (symleft,RBRACKETright)                                     (symleft,RBRACKETright)
860                   in LISTpat(enumPat(err,loc,sym,pats),NONE) end                   in LISTpat(enumPat(err,loc,sym,pats),NONE) end
861                  )                  )
862  |               sym CONCAT LBRACKET pats RBRACKET CONCAT sym  |               sym CONCAT LBRACKET pats RBRACKET CONCAT sym
863                  (let val loc = SourceMap.location srcMap                  (let val loc = SourceMapping.location srcMap
864                                     (symleft,RBRACKETright)                                     (symleft,RBRACKETright)
865                   in LISTpat(enumPat'(err,loc,                   in LISTpat(enumPat'(err,loc,
866                                  enumPat(err,loc,sym1,pats),sym2),NONE) end                                  enumPat(err,loc,sym1,pats),sym2),NONE) end
867                  )                  )
868    
869  |               LBRACKET pats RBRACKET CONCAT sym  |               LBRACKET pats RBRACKET CONCAT sym
870                  (let val loc = SourceMap.location srcMap                  (let val loc = SourceMapping.location srcMap
871                                     (symleft,RBRACKETright)                                     (symleft,RBRACKETright)
872                   in LISTpat(enumPat'(err,loc,pats,sym),NONE) end                   in LISTpat(enumPat'(err,loc,pats,sym),NONE) end
873                  )                  )
874    
875    
876  orpats2:        pat BAR pat     ([pat1,pat2])  orpats2:        typedpat BAR typedpat   ([typedpat1,typedpat2])
877  |               pat BAR orpats2 (pat::orpats2)  |               typedpat BAR orpats2    (typedpat::orpats2)
878    
879  andpats2:       pat AND pat             ([pat1,pat2])  andpats2:       typedpat AND typedpat           ([typedpat1,typedpat2])
880  |               pat AND andpats2        (pat::andpats2)  |               typedpat AND andpats2   (typedpat::andpats2)
881    
882  apat2:          apat                    (Prec.EXP apat)  apat2:          apat                    (Prec.EXP apat)
883  |               sym                     (Prec.ID sym)  |               sym                     (Prec.ID sym)
# Line 867  Line 887 
887  |               apppat apat2            (apppat@[apat2])  |               apppat apat2            (apppat@[apat2])
888    
889  pat:            apppat          (parsePat precStack err  pat:            apppat          (parsePat precStack err
890                                      (SourceMap.location srcMap                                      (SourceMapping.location srcMap
891                                         (apppatleft,apppatright)) apppat)                                         (apppatleft,apppatright)) apppat)
892  |               id AS pat       (ASpat(id,pat))  |               id AS pat       (ASpat(id,pat))
893    
894    typedpat:       pat                     (pat)
895    |               typedpat COLON ty       (TYPEDpat(typedpat,ty))
896    
897  asapat:         apat            (apat)  asapat:         apat            (apat)
898  |               id AS asapat    (ASpat(id,asapat))  |               id AS asapat    (ASpat(id,asapat))
899    
900  pats:                   ([])  pats:                   ([])
901  |               pats1   (pats1)  |               pats1   (pats1)
902    
903  pats1:          pat             ([pat])  pats1:          typedpat                ([typedpat])
904  |               pat COMMA pats1 (pat::pats1)  |               typedpat COMMA pats1    (typedpat::pats1)
905    
906  pats2:          pat COMMA pats1 (pat::pats1)  pats2:          typedpat COMMA pats1    (typedpat::pats1)
907    
908  labpats0:                       ([],false)  labpats0:                       ([],false)
909  |               labpats         (labpats)  |               labpats         (labpats)
# Line 890  Line 913 
913  |               labpat COMMA labpats    (labpat:: #1 labpats, #2 labpats)  |               labpat COMMA labpats    (labpat:: #1 labpats, #2 labpats)
914    
915  labpat:         sym             (sym,IDpat sym)  labpat:         sym             (sym,IDpat sym)
916  |               sym EQ pat      (sym,pat)  |               sym EQ typedpat (sym,typedpat)
917  |               sym AS pat      (sym,ASpat(sym,pat))  |               sym AS typedpat         (sym,ASpat(sym,typedpat))
918  |               sym WHERE exp   (sym,WHEREpat(IDpat sym,exp))  |               sym WHERE typedexp      (sym,WHEREpat(IDpat sym,typedexp))
919  |               sym WHERE exp IN pat (sym,NESTEDpat(IDpat sym,exp,pat))  |               sym WHERE typedexp IN typedpat
920                            (sym,NESTEDpat(IDpat sym,typedexp,typedpat))
921    
922  clause:         pat guard cont DARROW exp       (clause([pat],guard,cont,exp))  clause:         typedpat guard cont DARROW exp
923                            (clause([typedpat],guard,cont,exp))
924    
925  cont:                           (NONE)  cont:                           (NONE)
926  |               EXCEPTION id    (SOME id)  |               EXCEPTION id    (SOME id)
927    
928  guard:                          (NONE)  guard:                          (NONE)
929  |               WHERE exp       (SOME exp)  |               WHERE typedexp  (SOME typedexp)
930    
931  clauses:        clause                  ([clause])  clauses:        clause                  ([clause])
932  |               clause BAR clauses      (clause::clauses)  |               clause BAR clauses      (clause::clauses)
933    
934  funclause:      apppat funguard cont EQ exp  funclause:      apppat funguard cont EQ typedexp
935                  (let val loc = SourceMap.location srcMap (apppatleft,expright)                  (let val loc = SourceMapping.location srcMap (apppatleft,typedexpright)
936                   in case parseFunPat precStack err loc apppat of                   in case parseFunPat precStack err loc apppat of
937                        (SOME f,ps) => (f,clause(ps,funguard,cont,exp))                        (SOME f,ps) => (f,clause(ps,funguard,cont,typedexp))
938                      | (NONE,ps) =>                      | (NONE,ps) =>
939                        (err(loc,                        (err(loc,
940                             "in clause "^                             "in clause "^
941                               PP.text(AstPP.clause (CLAUSE(ps,funguard,exp))));                               PP.text(AstPP.clause (CLAUSE(ps,funguard,typedexp))));
942                         ("dummy",clause(ps,funguard,cont,exp)))                         ("dummy",clause(ps,funguard,cont,typedexp)))
943                   end                   end
944                  )                  )
945    
946  funguard:                               (NONE)  funguard:                               (NONE)
947  |               WHERE LPAREN exp RPAREN (SOME exp)  |               WHERE LPAREN typedexp RPAREN (SOME typedexp)
948    
949  funclauses:     funclause               (#1 funclause,[#2 funclause])  funclauses:     funclause               (#1 funclause,[#2 funclause])
950  |               funclause BAR funclauses (#1 funclause,#2 funclause:: #2 funclauses)  |               funclause BAR funclauses (#1 funclause,#2 funclause:: #2 funclauses)
951    
952  aty:            tident                  (IDty tident)  aty:            tident                  (idty(tident))
953  |               HASH int                (INTVARty int)  |               HASH int                (INTVARty int)
954  |               tyvar                   (TYVARty tyvar)  |               tyvar                   (TYVARty tyvar)
955  |               DOLLAR id               (CELLty id)  |               DOLLAR id               (CELLty id)
956  |               LPAREN RPAREN           (IDty(IDENT([],"unit")))  |               LPAREN RPAREN           (TUPLEty [])
957  |               LPAREN ty RPAREN        (ty)  |               LPAREN ty RPAREN        (ty)
958  |               LBRACE labtys RBRACE    (RECORDty labtys)  |               LBRACE labtys RBRACE    (RECORDty labtys)
959    

Legend:
Removed from v.775  
changed lines
  Added in v.1002

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0