module coremlgram. accumulate lambdayacc. % Grammar file for core sml, from the Definition of Standard ML. non_terminal X :- member X [exp,atexp,exprow,match,mrule,dec,valbind,typbind, datbind,exbind,conbind,atpat,patrow,pat,ty, tyrow,scon,tyseq,tyvarseq,lparen2,shared1]. ntnum 23. terminal X :- oncememb X [minust,dividet,plust,expt,timest,lparen,rparen,eqt,(iconst V), slist,(id S),(sconst St),ort,andt,assignt,ift,thent,elset, idlist,lesst,whilet,lett,intok,endt,semicolon,comma]. terminal X :- oncememb X [abstypet, andalsot, ast, caset, dot, datatypet, exceptiont, fnt, funt, handlet, infixt, infixrt, localt, nonfixt, oft, opt, opent, orelset, raiset, rect, typet, valt, witht, withtypet, prime, slparen, srparen, clparen, crparen, colon, ldot, underscore, vbar, lambda, arrow, numbersign,epsilont]. %%% tokenizer declarations: printname _ "abstype" abstypet. printname _ "andalso" andalsot. printname _ "as" ast. printname _ "case" caset. printname _ "do" dot. printname _ "datatype" datatypet. printname _ "exception" exceptiont. printname _ "fn" fnt. printname _ "fun" funt. printname _ "handle" handlet. printname _ "infix" infixt. printname _ "infixr" infixrt. printname _ "local" localt. printname _ "nonfix" nonfixt. printname _ "of" oft. printname _ "op" opt. printname _ "open" opent. printname _ "orelse" orelset. printname _ "raise" raiset. printname _ "rec" rect. printname _ "type" typet. printname _ "val" valt. printname _ "with" witht. printname _ "withtype" withtypet. printname _ "'" prime. printname _ "[" slparen. printname _ "]" srparen. printname _ "{" clparen. printname _ "}" crparen. printname _ ":" colon. printname _ "..." ldot. printname _ "?_" underscore. printname _ "|" vbar. printname _ "\\" lambda. printname _ "->" arrow. printname _ "#" numbersign. printname _ "(" lparen. printname _ ")" rparen. printname _ "+" plust. printname _ "-" minust. printname _ "*" timest. printname _ "/" dividet. printname _ "^" expt. printname _ "|" ort. printname _ "and" andt. printname _ "=" eqt. printname _ "<" lesst. printname _ "if" ift. printname _ "then" thent. printname _ "else" elset. printname _ "while" whilet. printname _ "let" lett. printname _ "in" intok. printname _ "end" endt. printname _ ";" semicolon. printname _ "," comma. printname _ "epsilon" epsilont. % iconst, sconst and id are universal start_symbol exp. cfg [ rule (atexp ==> [scon]) true, rule (atexp ==> [id Long1]) true, rule (atexp ==> [opt, id Long2]) true, rule (atexp ==> [clparen,exprow,crparen]) true, rule (atexp ==> [lett,dec,intok,exp,endt]) true, rule (atexp ==> [lparen,exp,rparen]) true, rule (exprow ==> [exp]) true, rule (exprow ==> [exp,comma,exprow]) true, rule (exp ==> [atexp]) true, rule (exp ==> [exp,atexp]) true, rule (exp ==> [exp,id I1,exp]) true, rule (exp ==> [exp,colon,ty]) true, rule (exp ==> [exp,handlet,match]) true, rule (exp ==> [raiset,match]) true, rule (exp ==> [fnt,match]) true, rule (match ==> [mrule]) true, rule (match ==> [mrule,vbar,match]) true, rule (mrule ==> [pat,lambda,exp]) true, rule (dec ==> [valt,valbind]) true, rule (dec ==> [typet,typbind]) true, rule (dec ==> [datatypet,datbind]) true, rule (dec ==> [abstypet,datbind,witht,dec,endt]) true, rule (dec ==> [exceptiont,exbind]) true, rule (dec ==> [localt,dec,intok,dec,endt]) true, rule (dec ==> [opent,slist]) true, rule (dec ==> [epsilont]) true, rule (dec ==> [dec,dec]) true, rule (dec ==> [dec,semicolon,dec]) true, rule (dec ==> [infixt,idlist]) true, rule (dec ==> [infixrt,idlist]) true, rule (dec ==> [nonfixt,idlist]) true, rule (valbind ==> [pat,eqt,exp]) true, rule (valbind ==> [pat,eqt,exp,andt,valbind]) true, rule (valbind ==> [rect,valbind]) true, rule (typbind ==> [tyvarseq,id Tycon1,eqt,ty]) true, rule (typbind ==> [tyvarseq,id Tycon2,eqt,ty,andt,typbind]) true, rule (datbind ==> [tyvarseq,id Tycon3,eqt,conbind]) true, rule (datbind ==> [tyvarseq,id Tycon4,eqt,conbind,andt,datbind]) true, rule (conbind ==> [id Con1,oft,ty]) true, rule (conbind ==> [id Con2,oft,ty,conbind]) true, rule (conbind ==> [opt,conbind]) true, rule (exbind ==> [id Excon1,oft,ty]) true, rule (exbind ==> [id Excon2,eqt,id Lexcon1]) true, rule (exbind ==> [exbind,andt,exbind]) true, rule (exbind ==> [opt,exbind]) true, rule (atpat ==> [underscore]) true, rule (atpat ==> [scon]) true, rule (atpat ==> [id VLL]) true, rule (atpat ==> [opt,id VLL1]) true, rule (atpat ==> [clparen,patrow,crparen]) true, rule (atpat ==> [lparen,pat,rparen]) true, rule (patrow ==> [ldot]) true, rule (patrow ==> [id Lab1,eqt,pat]) true, rule (patrow ==> [id Lab2,eqt,pat,comma,patrow]) true, rule (pat ==> [atpat]) true, rule (pat ==> [id Lconp1,atpat]) true, rule (pat ==> [opt,id Leconp1,atpat]) true, rule (pat ==> [pat,id EANDCon4,pat]) true, rule (pat ==> [pat,colon,ty]) true, rule (pat ==> [id VAR1,colon,ty,ast,pat]) true, rule (pat ==> [id VAR5,ast,pat]) true, rule (ty ==> [prime,id TVar2]) true, rule (ty ==> [clparen,tyrow,crparen]) true, rule (ty ==> [tyseq,id Ltycon6]) true, rule (ty ==> [ty,arrow,ty]) true, rule (ty ==> [lparen2,ty,rparen]) true, rule (tyrow ==> [id Label2,colon,ty]) true, rule (tyrow ==> [id Label5,colon,ty,comma,tyrow]) true, rule (lparen2 ==> [lparen]) true, rule (tyvarseq ==> [prime,id Tv1]) true, rule (tyvarseq ==> [tyvarseq,prime,id Tv2]) true, rule (tyseq ==> [ty]) true, rule (tyseq ==> [tyseq,ty]) true, rule (idlist ==> [id IL1]) true, rule (idlist ==> [idlist,id IL2]) true, rule (slist ==> [sconst SC1]) true, rule (slist ==> [slist,sconst SC1]) true, rule (scon ==> [iconst S]) true, rule (scon ==> [sconst SS]) true ]. % oh my! freshcopy T T.