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 744, Fri Dec 8 04:11:42 2000 UTC sml/branches/idlbasis-devel/src/MLRISC/Tools/Parser/mdl.grm revision 1002, Fri Nov 30 17:11:33 2001 UTC
# Line 29  Line 29 
29  fun e2s e = PP.text(AstPP.exp e)  fun e2s e = PP.text(AstPP.exp e)
30  fun ps2s ps = PP.text(PP.concat(map AstPP.pat ps))  fun ps2s ps = PP.text(PP.concat(map AstPP.pat ps))
31    
 fun precErr err loc msg = err(loc,msg)  
   
 fun STRINGexp s = LITexp(STRINGlit s)  
32  fun BOOLexp b = LITexp(BOOLlit b)  fun BOOLexp b = LITexp(BOOLlit b)
33    
34    fun precErr err loc msg = err(loc,msg)
35    
36  fun parseExp precStack err loc toks =  fun parseExp precStack err loc toks =
37      Prec.parse{error=precErr err loc,app=APPexp,tuple=TUPLEexp,      Prec.parse{error=precErr err loc,app=APPexp,tuple=TUPLEexp,
38                 id=fn id => IDexp(IDENT([],id)),stack= !precStack,                 id=fn id => IDexp(IDENT([],id)),stack= !precStack,
# Line 43  Line 42 
42  let fun appPat (IDpat id,p) = CONSpat(IDENT([],id),SOME p)  let fun appPat (IDpat id,p) = CONSpat(IDENT([],id),SOME p)
43        | appPat (CONSpat(id,NONE),p) = CONSpat(id,SOME p)        | appPat (CONSpat(id,NONE),p) = CONSpat(id,SOME p)
44        | appPat (p1,p2) = (err(loc,"pattern "^p2s p1^" "^p2s p2); p1)        | appPat (p1,p2) = (err(loc,"pattern "^p2s p1^" "^p2s p2); p1)
45  in  Prec.parse{error=precErr err loc,app=appPat,tuple=TUPLEpat,  in  case Prec.parse{error=precErr err loc,app=appPat,tuple=TUPLEpat,
46                 id=IDpat, stack= !precStack, kind="pattern",                 id=IDpat, stack= !precStack, kind="pattern",
47                 toString=p2s} toks                 toString=p2s} toks of
48          CONSpat(IDENT([],"not"),SOME p) => NOTpat p
49        | p => p
50  end  end
51    
52  fun parseFunPat precStack err loc toks =  fun parseFunPat precStack err loc toks =
# Line 74  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 98  Line 99 
99                    | e => (err(loc,"bad expression "^PP.text(AstPP.exp e)); e)                    | e => (err(loc,"bad expression "^PP.text(AstPP.exp e)); e)
100                  ) es                  ) es
101    
102    fun clause(pats, guard, NONE, e) = CLAUSE(pats, guard, e)
103      | 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 105  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 116  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 |
134          FIELD | FIELDS | VLIW | SUPERSCALAR | SIGNED | UNSIGNED |          FIELD | FIELDS | VLIW | SUPERSCALAR | SIGNED | UNSIGNED |
135          FORMATS | AS | ENCODING | WITHTYPE | FUN | VAL | INCLUDE | OPEN |          FORMATS | AS | ENCODING | WITHTYPE | FUN | VAL | INCLUDE | OPEN | OP |
136          LITTLE | BIG | ENDIAN | PIPELINE | PREDICATED |          LITTLE | BIG | ENDIAN | PIPELINE | PREDICATED |
137          LOWERCASE | UPPERCASE | VERBATIM | WHEN | BRANCHING | TAKEN |          LOWERCASE | UPPERCASE | VERBATIM | WHEN | BRANCHING | TAKEN |
138          ASSEMBLY | RTL | SPAN | DEPENDENT | ASSIGN | DELAYSLOT |          ASSEMBLY | RTL | SPAN | DEPENDENT | ASSIGN | DELAYSLOT |
# Line 130  Line 141 
141          ASM_COLON | MC_COLON | RTL_COLON | DELAYSLOT_COLON | NULLIFIED_COLON |          ASM_COLON | MC_COLON | RTL_COLON | DELAYSLOT_COLON | NULLIFIED_COLON |
142          PADDING_COLON | CANDIDATE_COLON | AGGREGABLE | ALIASING |          PADDING_COLON | CANDIDATE_COLON | AGGREGABLE | ALIASING |
143          RESOURCE | CPU | RESERVATION | TABLE | LATENCY | EQUATION |          RESOURCE | CPU | RESERVATION | TABLE | LATENCY | EQUATION |
144            EXCEPTION |
145          ID of string |          ID of string |
146          SYMBOL of string |          SYMBOL of string |
147          TYVAR of string |          TYVAR of string |
148          WORD of Word32.word |          WORD of Word32.word |
149          INT of int |          INT of int |
150            INTINF of IntInf.int |
151            REAL of string |
152          STRING of string |          STRING of string |
153          CHAR of char |          CHAR of char |
154          ASMTEXT of string |          ASMTEXT of string |
# Line 142  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 162  Line 177 
177           newScope of unit |           newScope of unit |
178           oldScope of unit |           oldScope of unit |
179           mldecls of decl list |           mldecls of decl list |
180             exceptionbind of exceptionbind |
181             exceptionbinds of exceptionbind list |
182           decl of decl |           decl of decl |
183           locdecl of loc * decl |           locdecl of loc * decl |
184           loc of loc |           loc of loc |
# Line 176  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 |
200           region of id option |           region of id option |
201           opt_exp of exp option |           opt_exp of exp option |
202           exps of exp list |           exps of exp list |
# Line 193  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 |
219           orpats2 of pat list |           orpats2 of pat list |
220             andpats2 of pat list |
221           labpat of id * pat |           labpat of id * pat |
222           labpats0 of (id * pat) list * bool |           labpats0 of (id * pat) list * bool |
223           labpats of (id * pat) list  * bool|           labpats of (id * pat) list  * bool|
# Line 215  Line 236 
236           unsignedint_opt of Word32.word option |           unsignedint_opt of Word32.word option |
237           width of width |           width of width |
238           int of int |           int of int |
239             intopt of int |
240             intinf of IntInf.int |
241             real of string |
242           endianess of endianess |           endianess of endianess |
243           kind of archKind |           kind of archKind |
244           string of string |           string of string |
245           char of char |           char of char |
246           bool of bool |           bool of bool |
247             literal of literal |
248           slice of int * int |           slice of int * int |
249           slices of (int * int) list |           slices of (int * int) list |
250           storagedecl of storagedecl |           storagedecl of storagedecl |
# Line 303  Line 328 
328           latencybinds of latencybind list |           latencybinds of latencybind list |
329           latencybind of latencybind |           latencybind of latencybind |
330           latencyclauses of (id * pat * exp) list |           latencyclauses of (id * pat * exp) list |
331           latencyclause of (id * pat * exp)           latencyclause of (id * pat * exp) |
332             optsemi of unit
333    
334    
335  %verbose  %verbose
336  %nodefault  %nodefault
# Line 334  Line 361 
361  mldecls:                        ([])  mldecls:                        ([])
362  |               mldecl mldecls  (mldecl::mldecls)  |               mldecl mldecls  (mldecl::mldecls)
363    
364  decl:           mldecl  (mldecl)  optsemi:                                ()
365  |               mddecl  (mddecl)  |               SEMICOLON optsemi       ()
366  |               INCLUDE string  
367                  (SEQdecl(import  decl:           mldecl optsemi  (mldecl)
368                    (SourceMap.location srcMap  |               mddecl optsemi  (mddecl)
369    |               INCLUDE string optsemi
370                    (seqdecl(import
371                      (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 432  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
486                            (FUNCTORdecl(id,[],NONE,structexp))
487  |               SHARING sharingdecls (SHARINGdecl sharingdecls)  |               SHARING sharingdecls (SHARINGdecl sharingdecls)
488  |               INFIX int syms (Infix precStack (int,syms); INFIXdecl(int,syms))  |               INFIX intopt syms (Infix precStack (intopt,syms); INFIXdecl(intopt,syms))
489  |               INFIXR int syms (Infixr precStack (int,syms); INFIXRdecl(int,syms))  |               INFIXR intopt syms (Infixr precStack (intopt,syms); INFIXRdecl(intopt,syms))
490  |               NONFIX syms (Nonfix precStack (syms); NONFIXdecl(syms))  |               NONFIX syms (Nonfix precStack (syms); NONFIXdecl(syms))
491  |               OPEN idents (OPENdecl(idents))  |               OPEN idents (OPENdecl(idents))
492    |               INCLUDE sigexp (INCLUDESIGdecl sigexp)
493    |               EXCEPTION exceptionbinds (EXCEPTIONdecl exceptionbinds)
494    
495    exceptionbinds: exceptionbind                    ([exceptionbind])
496    |               exceptionbind AND exceptionbinds (exceptionbind::exceptionbinds)
497    
498    exceptionbind:  id              (EXCEPTIONbind(id,NONE))
499    |               id OF ty        (EXCEPTIONbind(id,SOME ty))
500    |               id EQ ident     (EXCEPTIONEQbind(id,ident))
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 508  Line 553 
553  |               HASH id (COMPOSITErtl id)  |               HASH id (COMPOSITErtl id)
554    
555  structexp:      ident                           (IDsexp ident)  structexp:      ident                           (IDsexp ident)
 |               ident LPAREN scopeddecls RPAREN (APPsexp(ident,DECLsexp scopeddecls))  
 |               ident LPAREN ident RPAREN       (APPsexp(ident1,IDsexp ident2))  
556  |               STRUCT scopeddecls END          (DECLsexp scopeddecls)  |               STRUCT scopeddecls END          (DECLsexp scopeddecls)
557    |               structexp LPAREN scopeddecls RPAREN
558                            (APPsexp(structexp,DECLsexp scopeddecls))
559    |               structexp LPAREN ident RPAREN
560                            (APPsexp(structexp,IDsexp ident))
561    
562  datatypebinds:  datatypebind                    ([datatypebind])  datatypebinds:  datatypebind                    ([datatypebind])
563  |               datatypebind AND datatypebinds  (datatypebind::datatypebinds)  |               datatypebind AND datatypebinds  (datatypebind::datatypebinds)
# Line 565  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 700  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)
753    |               int                     (INTlit int)
754    |               intinf                  (INTINFlit intinf)
755    |               string                  (STRINGlit string)
756    |               char                    (CHARlit char)
757    |               bool                    (BOOLlit bool)
758    |               real                    (REALlit real)
759    
760  aexp:           word                    (LITexp(WORD32lit word))  aexp:           literal                 (LITexp literal)
 |               int                     (LITexp(INTlit int))  
 |               string                  (STRINGexp string)  
 |               char                    (LITexp(CHARlit char))  
 |               bool                    (BOOLexp bool)  
761  |               ident2                  (IDexp ident2)  |               ident2                  (IDexp ident2)
762  |               HASH id                 (TYPEexp(TYVARty(INTtv id)))  |               HASH id                 (TYPEexp(TYVARty(INTtv id)))
763    |               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 721  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),
791                              NONE)                              NONE)
792                   end                   end
793                  )                  )
794    |               LET decls IN expseq END (LETexp(decls,expseq))
795    
796  region:           (NONE)  region:           (NONE)
797  |       COLON id (SOME id)  |       COLON id (SOME id)
# Line 756  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)
 |               LET decls IN expseq END (LETexp(decls,expseq))  
826    
827  expseq:         exp                     ([exp])  typedexp:       exp                     (exp)
828  |               exp SEMICOLON expseq    (exp::expseq)  |               typedexp COLON ty       (TYPEDexp(typedexp,ty))
829    
830    expseq:         typedexp                        ([typedexp])
831    |               typedexp SEMICOLON expseq       (typedexp::expseq)
832    
833  expseq2:        exp SEMICOLON expseq    (exp::expseq)  expseq2:        typedexp SEMICOLON expseq       (typedexp::expseq)
834    
835  exps1:          exp             ([exp])  exps1:          typedexp                ([typedexp])
836  |               exp COMMA exps1 (exp::exps1)  |               typedexp COMMA exps1    (typedexp::exps1)
837    
838  exps2:          exp COMMA exps1 (exp::exps1)  exps2:          typedexp COMMA exps1 (typedexp::exps1)
839    
840  exps:                   ([])  exps:                   ([])
841  |               exps1   (exps1)  |               exps1   (exps1)
842    
843  apat:           ident2                          (CONSpat(ident2,NONE))  apat:           ident2                          (CONSpat(ident2,NONE))
844  |               int                             (LITpat(INTlit int))  |               literal                         (LITpat literal)
 |               word                            (LITpat(WORD32lit word))  
 |               string                          (LITpat(STRINGlit string))  
 |               bool                            (LITpat(BOOLlit bool))  
 |               char                            (LITpat(CHARlit char))  
845  |               WILD                            (WILDpat)  |               WILD                            (WILDpat)
846  |               LPAREN RPAREN                   (TUPLEpat [])  |               LPAREN RPAREN                   (TUPLEpat [])
847  |               LBRACKET pats RBRACKET          (LISTpat(pats,NONE))  |               LBRACKET pats RBRACKET          (LISTpat(pats,NONE))
848  |               LPAREN pats2 RPAREN             (TUPLEpat pats2)  |               LPAREN pats2 RPAREN             (TUPLEpat pats2)
849  |               LPAREN orpats2 RPAREN           (ORpat orpats2)  |               LPAREN orpats2 RPAREN           (ORpat orpats2)
850  |               LPAREN pat RPAREN               (pat)  |               LPAREN andpats2 RPAREN          (ANDpat andpats2)
851    |               LPAREN typedpat RPAREN          (typedpat)
852    |               LPAREN typedpat WHERE typedexp RPAREN
853                            (WHEREpat(typedpat,typedexp))
854    |               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:       typedpat AND typedpat           ([typedpat1,typedpat2])
880    |               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)
884    |               OP sym                  (Prec.ID sym)
885    
886  apppat:         apat2                   ([apat2])  apppat:         apat2                   ([apat2])
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 849  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 typedexp      (sym,WHEREpat(IDpat sym,typedexp))
919    |               sym WHERE typedexp IN typedpat
920                            (sym,NESTEDpat(IDpat sym,typedexp,typedpat))
921    
922    clause:         typedpat guard cont DARROW exp
923                            (clause([typedpat],guard,cont,exp))
924    
925  clause:         pat guard DARROW exp    (CLAUSE([pat],guard,exp))  cont:                           (NONE)
926    |               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 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,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,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    
# Line 952  Line 1023 
1023    
1024  int:            INT (INT)  int:            INT (INT)
1025    
1026    intopt:         int     (int)
1027    |                       (0)
1028    
1029    intinf:         INTINF  (INTINF)
1030    
1031    real:           REAL    (REAL)
1032    
1033  aliasing:                       (NONE)  aliasing:                       (NONE)
1034  |               ALIASING  id    (SOME id)  |               ALIASING  id    (SOME id)
1035    

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

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