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

revision 744, Fri Dec 8 04:11:42 2000 UTC revision 775, Fri Jan 12 01:17:51 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 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  %%  %%
106  %header (functor MDLParser(structure Token   : TOKEN  %header (functor MDLParser(structure Token   : TOKEN
107                             structure AstPP   : MDL_AST_PRETTY_PRINTER                             structure AstPP   : MDL_AST_PRETTY_PRINTER
# Line 121  Line 125 
125          HANDLE | LET | STRUCTURE | FUNCTOR | SIGNATURE | SIG | STRUCT | WHERE |          HANDLE | LET | STRUCTURE | FUNCTOR | SIGNATURE | SIG | STRUCT | WHERE |
126          SHARING | INSTRUCTION | REGISTER | CELL | CELLS | ORDERING |          SHARING | INSTRUCTION | REGISTER | CELL | CELLS | ORDERING |
127          FIELD | FIELDS | VLIW | SUPERSCALAR | SIGNED | UNSIGNED |          FIELD | FIELDS | VLIW | SUPERSCALAR | SIGNED | UNSIGNED |
128          FORMATS | AS | ENCODING | WITHTYPE | FUN | VAL | INCLUDE | OPEN |          FORMATS | AS | ENCODING | WITHTYPE | FUN | VAL | INCLUDE | OPEN | OP |
129          LITTLE | BIG | ENDIAN | PIPELINE | PREDICATED |          LITTLE | BIG | ENDIAN | PIPELINE | PREDICATED |
130          LOWERCASE | UPPERCASE | VERBATIM | WHEN | BRANCHING | TAKEN |          LOWERCASE | UPPERCASE | VERBATIM | WHEN | BRANCHING | TAKEN |
131          ASSEMBLY | RTL | SPAN | DEPENDENT | ASSIGN | DELAYSLOT |          ASSEMBLY | RTL | SPAN | DEPENDENT | ASSIGN | DELAYSLOT |
# Line 130  Line 134 
134          ASM_COLON | MC_COLON | RTL_COLON | DELAYSLOT_COLON | NULLIFIED_COLON |          ASM_COLON | MC_COLON | RTL_COLON | DELAYSLOT_COLON | NULLIFIED_COLON |
135          PADDING_COLON | CANDIDATE_COLON | AGGREGABLE | ALIASING |          PADDING_COLON | CANDIDATE_COLON | AGGREGABLE | ALIASING |
136          RESOURCE | CPU | RESERVATION | TABLE | LATENCY | EQUATION |          RESOURCE | CPU | RESERVATION | TABLE | LATENCY | EQUATION |
137            EXCEPTION |
138          ID of string |          ID of string |
139          SYMBOL of string |          SYMBOL of string |
140          TYVAR of string |          TYVAR of string |
141          WORD of Word32.word |          WORD of Word32.word |
142          INT of int |          INT of int |
143            INTINF of IntInf.int |
144            REAL of string |
145          STRING of string |          STRING of string |
146          CHAR of char |          CHAR of char |
147          ASMTEXT of string |          ASMTEXT of string |
# Line 162  Line 169 
169           newScope of unit |           newScope of unit |
170           oldScope of unit |           oldScope of unit |
171           mldecls of decl list |           mldecls of decl list |
172             exceptionbind of exceptionbind |
173             exceptionbinds of exceptionbind list |
174           decl of decl |           decl of decl |
175           locdecl of loc * decl |           locdecl of loc * decl |
176           loc of loc |           loc of loc |
# Line 178  Line 187 
187           exp of exp |           exp of exp |
188           guard of exp option |           guard of exp option |
189           funguard of exp option |           funguard of exp option |
190             cont of id option |
191           region of id option |           region of id option |
192           opt_exp of exp option |           opt_exp of exp option |
193           exps of exp list |           exps of exp list |
# Line 197  Line 207 
207           pats1 of pat list |           pats1 of pat list |
208           pats2 of pat list |           pats2 of pat list |
209           orpats2 of pat list |           orpats2 of pat list |
210             andpats2 of pat list |
211           labpat of id * pat |           labpat of id * pat |
212           labpats0 of (id * pat) list * bool |           labpats0 of (id * pat) list * bool |
213           labpats of (id * pat) list  * bool|           labpats of (id * pat) list  * bool|
# Line 215  Line 226 
226           unsignedint_opt of Word32.word option |           unsignedint_opt of Word32.word option |
227           width of width |           width of width |
228           int of int |           int of int |
229             intopt of int |
230             intinf of IntInf.int |
231             real of string |
232           endianess of endianess |           endianess of endianess |
233           kind of archKind |           kind of archKind |
234           string of string |           string of string |
235           char of char |           char of char |
236           bool of bool |           bool of bool |
237             literal of literal |
238           slice of int * int |           slice of int * int |
239           slices of (int * int) list |           slices of (int * int) list |
240           storagedecl of storagedecl |           storagedecl of storagedecl |
# Line 303  Line 318 
318           latencybinds of latencybind list |           latencybinds of latencybind list |
319           latencybind of latencybind |           latencybind of latencybind |
320           latencyclauses of (id * pat * exp) list |           latencyclauses of (id * pat * exp) list |
321           latencyclause of (id * pat * exp)           latencyclause of (id * pat * exp) |
322             optsemi of unit
323    
324    
325  %verbose  %verbose
326  %nodefault  %nodefault
# Line 334  Line 351 
351  mldecls:                        ([])  mldecls:                        ([])
352  |               mldecl mldecls  (mldecl::mldecls)  |               mldecl mldecls  (mldecl::mldecls)
353    
354  decl:           mldecl  (mldecl)  optsemi:                                ()
355  |               mddecl  (mddecl)  |               SEMICOLON optsemi       ()
356  |               INCLUDE string  
357    decl:           mldecl optsemi  (mldecl)
358    |               mddecl optsemi  (mddecl)
359    |               INCLUDE string optsemi
360                  (SEQdecl(import                  (SEQdecl(import
361                    (SourceMap.location srcMap                    (SourceMap.location srcMap
362                        (INCLUDEleft,stringright), string)))                        (INCLUDEleft,stringright), string)))
# Line 451  Line 471 
471                          (STRUCTUREdecl(id,functorarg,NONE,structexp))                          (STRUCTUREdecl(id,functorarg,NONE,structexp))
472  |               FUNCTOR id LPAREN functorarg RPAREN COLON sigexp EQ structexp  |               FUNCTOR id LPAREN functorarg RPAREN COLON sigexp EQ structexp
473                          (STRUCTUREdecl(id,functorarg,SOME sigexp,structexp))                          (STRUCTUREdecl(id,functorarg,SOME sigexp,structexp))
474    |               FUNCTOR id EQ structexp (FUNCTORdecl(id,[],NONE,structexp))
475  |               SHARING sharingdecls (SHARINGdecl sharingdecls)  |               SHARING sharingdecls (SHARINGdecl sharingdecls)
476  |               INFIX int syms (Infix precStack (int,syms); INFIXdecl(int,syms))  |               INFIX intopt syms (Infix precStack (intopt,syms); INFIXdecl(intopt,syms))
477  |               INFIXR int syms (Infixr precStack (int,syms); INFIXRdecl(int,syms))  |               INFIXR intopt syms (Infixr precStack (intopt,syms); INFIXRdecl(intopt,syms))
478  |               NONFIX syms (Nonfix precStack (syms); NONFIXdecl(syms))  |               NONFIX syms (Nonfix precStack (syms); NONFIXdecl(syms))
479  |               OPEN idents (OPENdecl(idents))  |               OPEN idents (OPENdecl(idents))
480    |               INCLUDE sigexp (INCLUDESIGdecl sigexp)
481    |               EXCEPTION exceptionbinds (EXCEPTIONdecl exceptionbinds)
482    
483    exceptionbinds: exceptionbind                    ([exceptionbind])
484    |               exceptionbind AND exceptionbinds (exceptionbind::exceptionbinds)
485    
486    exceptionbind:  id              (EXCEPTIONbind(id,NONE))
487    |               id OF ty        (EXCEPTIONbind(id,SOME ty))
488    |               id EQ ident     (EXCEPTIONEQbind(id,ident))
489    
490    
491  functorarg:     scopeddecls             (scopeddecls)  functorarg:     scopeddecls             (scopeddecls)
# Line 508  Line 538 
538  |               HASH id (COMPOSITErtl id)  |               HASH id (COMPOSITErtl id)
539    
540  structexp:      ident                           (IDsexp ident)  structexp:      ident                           (IDsexp ident)
 |               ident LPAREN scopeddecls RPAREN (APPsexp(ident,DECLsexp scopeddecls))  
 |               ident LPAREN ident RPAREN       (APPsexp(ident1,IDsexp ident2))  
541  |               STRUCT scopeddecls END          (DECLsexp scopeddecls)  |               STRUCT scopeddecls END          (DECLsexp scopeddecls)
542    |               structexp LPAREN scopeddecls RPAREN
543                            (APPsexp(structexp,DECLsexp scopeddecls))
544    |               structexp LPAREN ident RPAREN
545                            (APPsexp(structexp,IDsexp ident))
546    
547  datatypebinds:  datatypebind                    ([datatypebind])  datatypebinds:  datatypebind                    ([datatypebind])
548  |               datatypebind AND datatypebinds  (datatypebind::datatypebinds)  |               datatypebind AND datatypebinds  (datatypebind::datatypebinds)
# Line 702  Line 734 
734    
735  valbind:        pat EQ exp              (VALbind(pat,exp))  valbind:        pat EQ exp              (VALbind(pat,exp))
736    
737  aexp:           word                    (LITexp(WORD32lit word))  literal:        word                    (WORD32lit word)
738  |               int                     (LITexp(INTlit int))  |               int                     (INTlit int)
739  |               string                  (STRINGexp string)  |               intinf                  (INTINFlit intinf)
740  |               char                    (LITexp(CHARlit char))  |               string                  (STRINGlit string)
741  |               bool                    (BOOLexp bool)  |               char                    (CHARlit char)
742    |               bool                    (BOOLlit bool)
743    |               real                    (REALlit real)
744    
745    aexp:           literal                 (LITexp literal)
746  |               ident2                  (IDexp ident2)  |               ident2                  (IDexp ident2)
747  |               HASH id                 (TYPEexp(TYVARty(INTtv id)))  |               HASH id                 (TYPEexp(TYVARty(INTtv id)))
748    |               OP symb                 (IDexp(IDENT([],symb)))
749  |               LPAREN symb RPAREN      (IDexp (IDENT([],symb)))  |               LPAREN symb RPAREN      (IDexp (IDENT([],symb)))
750  |               LPAREN exp COLON ty RPAREN      (TYPEDexp(exp,ty))  |               LPAREN exp COLON ty RPAREN      (TYPEDexp(exp,ty))
751  |               LDQUOTE asms RDQUOTE    (ASMexp(ASMasm asms))  |               LDQUOTE asms RDQUOTE    (ASMexp(ASMasm asms))
# Line 739  Line 776 
776                              NONE)                              NONE)
777                   end                   end
778                  )                  )
779    |               LET decls IN expseq END (LETexp(decls,expseq))
780    
781  region:           (NONE)  region:           (NONE)
782  |       COLON id (SOME id)  |       COLON id (SOME id)
# Line 769  Line 807 
807  |               FN clauses              (LAMBDAexp clauses)  |               FN clauses              (LAMBDAexp clauses)
808  |               exp HANDLE clauses      (HANDLEexp(exp,clauses))  |               exp HANDLE clauses      (HANDLEexp(exp,clauses))
809  |               RAISE exp               (RAISEexp exp)  |               RAISE exp               (RAISEexp exp)
 |               LET decls IN expseq END (LETexp(decls,expseq))  
810    
811  expseq:         exp                     ([exp])  expseq:         exp                     ([exp])
812  |               exp SEMICOLON expseq    (exp::expseq)  |               exp SEMICOLON expseq    (exp::expseq)
# Line 785  Line 822 
822  |               exps1   (exps1)  |               exps1   (exps1)
823    
824  apat:           ident2                          (CONSpat(ident2,NONE))  apat:           ident2                          (CONSpat(ident2,NONE))
825  |               int                             (LITpat(INTlit int))  |               literal                         (LITpat literal)
 |               word                            (LITpat(WORD32lit word))  
 |               string                          (LITpat(STRINGlit string))  
 |               bool                            (LITpat(BOOLlit bool))  
 |               char                            (LITpat(CHARlit char))  
826  |               WILD                            (WILDpat)  |               WILD                            (WILDpat)
827  |               LPAREN RPAREN                   (TUPLEpat [])  |               LPAREN RPAREN                   (TUPLEpat [])
828  |               LBRACKET pats RBRACKET          (LISTpat(pats,NONE))  |               LBRACKET pats RBRACKET          (LISTpat(pats,NONE))
829  |               LPAREN pats2 RPAREN             (TUPLEpat pats2)  |               LPAREN pats2 RPAREN             (TUPLEpat pats2)
830  |               LPAREN orpats2 RPAREN           (ORpat orpats2)  |               LPAREN orpats2 RPAREN           (ORpat orpats2)
831    |               LPAREN andpats2 RPAREN          (ANDpat andpats2)
832  |               LPAREN pat RPAREN               (pat)  |               LPAREN pat RPAREN               (pat)
833    |               LPAREN pat WHERE exp RPAREN     (WHEREpat(pat,exp))
834    |               LPAREN pat WHERE exp IN pat RPAREN
835                                                    (NESTEDpat(pat1,exp,pat2))
836  |               LBRACE labpats0 RBRACE          (RECORDpat(labpats0))  |               LBRACE labpats0 RBRACE          (RECORDpat(labpats0))
837  |               sym CONCAT LBRACKET pats RBRACKET  |               sym CONCAT LBRACKET pats RBRACKET
838                  (let val loc = SourceMap.location srcMap                  (let val loc = SourceMap.location srcMap
# Line 819  Line 856 
856  orpats2:        pat BAR pat     ([pat1,pat2])  orpats2:        pat BAR pat     ([pat1,pat2])
857  |               pat BAR orpats2 (pat::orpats2)  |               pat BAR orpats2 (pat::orpats2)
858    
859    andpats2:       pat AND pat             ([pat1,pat2])
860    |               pat AND andpats2        (pat::andpats2)
861    
862  apat2:          apat                    (Prec.EXP apat)  apat2:          apat                    (Prec.EXP apat)
863  |               sym                     (Prec.ID sym)  |               sym                     (Prec.ID sym)
864    |               OP sym                  (Prec.ID sym)
865    
866  apppat:         apat2                   ([apat2])  apppat:         apat2                   ([apat2])
867  |               apppat apat2            (apppat@[apat2])  |               apppat apat2            (apppat@[apat2])
# Line 851  Line 892 
892  labpat:         sym             (sym,IDpat sym)  labpat:         sym             (sym,IDpat sym)
893  |               sym EQ pat      (sym,pat)  |               sym EQ pat      (sym,pat)
894  |               sym AS pat      (sym,ASpat(sym,pat))  |               sym AS pat      (sym,ASpat(sym,pat))
895    |               sym WHERE exp   (sym,WHEREpat(IDpat sym,exp))
896    |               sym WHERE exp IN pat (sym,NESTEDpat(IDpat sym,exp,pat))
897    
898  clause:         pat guard DARROW exp    (CLAUSE([pat],guard,exp))  clause:         pat guard cont DARROW exp       (clause([pat],guard,cont,exp))
899    
900    cont:                           (NONE)
901    |               EXCEPTION id    (SOME id)
902    
903  guard:                          (NONE)  guard:                          (NONE)
904  |               WHERE exp       (SOME exp)  |               WHERE exp       (SOME exp)
# Line 860  Line 906 
906  clauses:        clause                  ([clause])  clauses:        clause                  ([clause])
907  |               clause BAR clauses      (clause::clauses)  |               clause BAR clauses      (clause::clauses)
908    
909  funclause:      apppat funguard EQ exp  funclause:      apppat funguard cont EQ exp
910                  (let val loc = SourceMap.location srcMap (apppatleft,expright)                  (let val loc = SourceMap.location srcMap (apppatleft,expright)
911                   in case parseFunPat precStack err loc apppat of                   in case parseFunPat precStack err loc apppat of
912                        (SOME f,ps) => (f,CLAUSE(ps,funguard,exp))                        (SOME f,ps) => (f,clause(ps,funguard,cont,exp))
913                      | (NONE,ps) =>                      | (NONE,ps) =>
914                        (err(loc,                        (err(loc,
915                             "in clause "^                             "in clause "^
916                               PP.text(AstPP.clause (CLAUSE(ps,funguard,exp))));                               PP.text(AstPP.clause (CLAUSE(ps,funguard,exp))));
917                         ("dummy",CLAUSE(ps,funguard,exp)))                         ("dummy",clause(ps,funguard,cont,exp)))
918                   end                   end
919                  )                  )
920    
# Line 952  Line 998 
998    
999  int:            INT (INT)  int:            INT (INT)
1000    
1001    intopt:         int     (int)
1002    |                       (0)
1003    
1004    intinf:         INTINF  (INTINF)
1005    
1006    real:           REAL    (REAL)
1007    
1008  aliasing:                       (NONE)  aliasing:                       (NONE)
1009  |               ALIASING  id    (SOME id)  |               ALIASING  id    (SOME id)
1010    

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

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