functor TigerLrValsFun(structure Token : TOKEN) : sig structure ParserData : PARSER_DATA structure Tokens : Tiger_TOKENS end = struct structure ParserData= struct structure Header = struct open Absyn; open Symbol; end structure LrTable = Token.LrTable structure Token = Token local open LrTable in val table=let val actionRows = "\ \\001\000\001\000\000\000\000\000\ \\001\000\001\000\189\000\005\000\189\000\007\000\189\000\009\000\189\000\ \\011\000\189\000\013\000\189\000\015\000\031\000\016\000\030\000\ \\017\000\029\000\018\000\028\000\021\000\189\000\022\000\189\000\ \\023\000\189\000\024\000\189\000\025\000\189\000\026\000\189\000\ \\030\000\189\000\031\000\189\000\034\000\189\000\035\000\189\000\ \\037\000\189\000\038\000\189\000\042\000\189\000\043\000\189\000\ \\044\000\189\000\000\000\ \\001\000\001\000\190\000\005\000\190\000\007\000\190\000\009\000\190\000\ \\011\000\190\000\013\000\190\000\015\000\031\000\016\000\030\000\ \\017\000\029\000\018\000\028\000\021\000\190\000\022\000\190\000\ \\023\000\190\000\024\000\190\000\025\000\190\000\026\000\190\000\ \\030\000\190\000\031\000\190\000\034\000\190\000\035\000\190\000\ \\037\000\190\000\038\000\190\000\042\000\190\000\043\000\190\000\ \\044\000\190\000\000\000\ \\001\000\002\000\016\000\003\000\015\000\004\000\014\000\008\000\013\000\ \\009\000\039\000\016\000\012\000\029\000\011\000\032\000\010\000\ \\033\000\009\000\036\000\008\000\040\000\007\000\041\000\006\000\000\000\ \\001\000\002\000\016\000\003\000\015\000\004\000\014\000\008\000\013\000\ \\009\000\080\000\016\000\012\000\029\000\011\000\032\000\010\000\ \\033\000\009\000\036\000\008\000\040\000\007\000\041\000\006\000\000\000\ \\001\000\002\000\016\000\003\000\015\000\004\000\014\000\008\000\013\000\ \\009\000\103\000\016\000\012\000\029\000\011\000\032\000\010\000\ \\033\000\009\000\036\000\008\000\040\000\007\000\041\000\006\000\000\000\ \\001\000\002\000\016\000\003\000\015\000\004\000\014\000\008\000\013\000\ \\016\000\012\000\029\000\011\000\032\000\010\000\033\000\009\000\ \\036\000\008\000\040\000\007\000\041\000\006\000\000\000\ \\001\000\002\000\016\000\003\000\015\000\004\000\014\000\008\000\087\000\ \\016\000\012\000\029\000\011\000\032\000\010\000\033\000\009\000\ \\036\000\008\000\040\000\007\000\041\000\006\000\000\000\ \\001\000\002\000\033\000\000\000\ \\001\000\002\000\046\000\000\000\ \\001\000\002\000\073\000\000\000\ \\001\000\002\000\076\000\013\000\075\000\000\000\ \\001\000\002\000\083\000\000\000\ \\001\000\002\000\084\000\000\000\ \\001\000\002\000\085\000\000\000\ \\001\000\002\000\106\000\000\000\ \\001\000\002\000\113\000\012\000\112\000\028\000\111\000\000\000\ \\001\000\002\000\115\000\000\000\ \\001\000\002\000\118\000\009\000\117\000\000\000\ \\001\000\002\000\118\000\013\000\126\000\000\000\ \\001\000\002\000\135\000\000\000\ \\001\000\002\000\140\000\000\000\ \\001\000\002\000\142\000\000\000\ \\001\000\002\000\143\000\000\000\ \\001\000\002\000\146\000\000\000\ \\001\000\002\000\150\000\000\000\ \\001\000\005\000\093\000\013\000\092\000\000\000\ \\001\000\005\000\097\000\009\000\096\000\000\000\ \\001\000\005\000\129\000\009\000\128\000\000\000\ \\001\000\005\000\129\000\013\000\136\000\000\000\ \\001\000\006\000\100\000\027\000\099\000\000\000\ \\001\000\006\000\131\000\019\000\130\000\000\000\ \\001\000\006\000\132\000\000\000\ \\001\000\006\000\139\000\019\000\138\000\000\000\ \\001\000\006\000\147\000\000\000\ \\001\000\007\000\071\000\009\000\070\000\000\000\ \\001\000\007\000\071\000\038\000\102\000\000\000\ \\001\000\008\000\101\000\000\000\ \\001\000\011\000\081\000\015\000\031\000\016\000\030\000\017\000\029\000\ \\018\000\028\000\019\000\027\000\020\000\026\000\021\000\025\000\ \\022\000\024\000\023\000\023\000\024\000\022\000\025\000\021\000\ \\026\000\020\000\000\000\ \\001\000\011\000\095\000\015\000\031\000\016\000\030\000\017\000\029\000\ \\018\000\028\000\019\000\027\000\020\000\026\000\021\000\025\000\ \\022\000\024\000\023\000\023\000\024\000\022\000\025\000\021\000\ \\026\000\020\000\000\000\ \\001\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\025\000\021\000\026\000\020\000\ \\030\000\069\000\000\000\ \\001\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\025\000\021\000\026\000\020\000\ \\034\000\104\000\000\000\ \\001\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\025\000\021\000\026\000\020\000\ \\035\000\068\000\000\000\ \\001\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\025\000\021\000\026\000\020\000\ \\035\000\133\000\000\000\ \\001\000\019\000\094\000\000\000\ \\001\000\019\000\098\000\000\000\ \\001\000\019\000\122\000\000\000\ \\001\000\019\000\148\000\000\000\ \\001\000\019\000\149\000\000\000\ \\001\000\027\000\067\000\000\000\ \\001\000\027\000\127\000\000\000\ \\001\000\037\000\066\000\042\000\065\000\043\000\064\000\044\000\063\000\000\000\ \\001\000\039\000\124\000\000\000\ \\154\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\025\000\021\000\026\000\020\000\000\000\ \\155\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\025\000\021\000\026\000\020\000\000\000\ \\156\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\025\000\021\000\026\000\020\000\000\000\ \\157\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\025\000\021\000\026\000\020\000\000\000\ \\158\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\025\000\021\000\026\000\020\000\000\000\ \\159\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\025\000\021\000\026\000\020\000\000\000\ \\160\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\025\000\021\000\026\000\020\000\000\000\ \\161\000\008\000\044\000\010\000\043\000\012\000\042\000\014\000\041\000\ \\027\000\040\000\000\000\ \\162\000\010\000\019\000\014\000\018\000\027\000\017\000\000\000\ \\163\000\000\000\ \\164\000\000\000\ \\165\000\000\000\ \\165\000\038\000\119\000\000\000\ \\166\000\000\000\ \\167\000\000\000\ \\168\000\000\000\ \\169\000\000\000\ \\170\000\000\000\ \\171\000\000\000\ \\172\000\000\000\ \\173\000\000\000\ \\174\000\000\000\ \\175\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\025\000\021\000\026\000\020\000\000\000\ \\176\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\025\000\021\000\026\000\020\000\000\000\ \\177\000\000\000\ \\178\000\031\000\105\000\000\000\ \\179\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\025\000\021\000\026\000\020\000\000\000\ \\180\000\000\000\ \\181\000\000\000\ \\182\000\000\000\ \\183\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\000\000\ \\184\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\000\000\ \\185\000\017\000\029\000\018\000\028\000\000\000\ \\186\000\017\000\029\000\018\000\028\000\000\000\ \\187\000\000\000\ \\188\000\000\000\ \\191\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\000\000\ \\192\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\000\000\ \\193\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\000\000\ \\194\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\000\000\ \\195\000\000\000\ \\196\000\000\000\ \\197\000\000\000\ \\198\000\000\000\ \\199\000\039\000\108\000\000\000\ \\200\000\000\000\ \\201\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\025\000\021\000\026\000\020\000\000\000\ \\202\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\025\000\021\000\026\000\020\000\000\000\ \\203\000\042\000\065\000\000\000\ \\204\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\025\000\021\000\026\000\020\000\000\000\ \\205\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\025\000\021\000\026\000\020\000\000\000\ \\206\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\025\000\021\000\026\000\020\000\000\000\ \\207\000\015\000\031\000\016\000\030\000\017\000\029\000\018\000\028\000\ \\019\000\027\000\020\000\026\000\021\000\025\000\022\000\024\000\ \\023\000\023\000\024\000\022\000\025\000\021\000\026\000\020\000\000\000\ \\208\000\000\000\ \\209\000\000\000\ \\210\000\000\000\ \\211\000\000\000\ \\212\000\000\000\ \\213\000\000\000\ \\214\000\000\000\ \\215\000\000\000\ \\216\000\000\000\ \\217\000\000\000\ \" val actionRowNumbers = "\006\000\093\000\061\000\053\000\ \\062\000\081\000\108\000\008\000\ \\006\000\006\000\006\000\003\000\ \\068\000\067\000\060\000\006\000\ \\009\000\006\000\006\000\006\000\ \\006\000\006\000\006\000\006\000\ \\006\000\006\000\006\000\006\000\ \\006\000\006\000\051\000\049\000\ \\042\000\040\000\069\000\035\000\ \\058\000\064\000\006\000\010\000\ \\011\000\006\000\004\000\076\000\ \\094\000\038\000\084\000\083\000\ \\091\000\089\000\092\000\090\000\ \\002\000\001\000\088\000\087\000\ \\086\000\085\000\101\000\106\000\ \\109\000\012\000\013\000\014\000\ \\007\000\006\000\006\000\006\000\ \\063\000\006\000\075\000\096\000\ \\026\000\073\000\044\000\039\000\ \\027\000\056\000\070\000\095\000\ \\107\000\045\000\030\000\037\000\ \\036\000\005\000\041\000\079\000\ \\078\000\059\000\072\000\015\000\ \\006\000\097\000\071\000\006\000\ \\016\000\006\000\017\000\018\000\ \\082\000\065\000\006\000\006\000\ \\046\000\054\000\006\000\057\000\ \\098\000\052\000\019\000\110\000\ \\099\000\050\000\028\000\031\000\ \\032\000\066\000\043\000\077\000\ \\006\000\074\000\020\000\029\000\ \\111\000\006\000\033\000\021\000\ \\006\000\022\000\023\000\006\000\ \\055\000\113\000\112\000\100\000\ \\006\000\024\000\034\000\104\000\ \\047\000\114\000\080\000\102\000\ \\048\000\025\000\006\000\006\000\ \\115\000\105\000\103\000\000\000" val gotoT = "\ \\001\000\003\000\002\000\151\000\008\000\002\000\009\000\001\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\004\000\030\000\000\000\ \\000\000\ \\001\000\032\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\033\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\034\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\036\000\006\000\035\000\008\000\002\000\009\000\001\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\001\000\043\000\008\000\002\000\009\000\001\000\000\000\ \\000\000\ \\001\000\045\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\046\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\047\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\048\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\049\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\050\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\051\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\052\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\053\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\054\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\055\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\056\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\057\000\008\000\002\000\009\000\001\000\000\000\ \\003\000\060\000\012\000\059\000\013\000\058\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\001\000\070\000\008\000\002\000\009\000\001\000\000\000\ \\000\000\ \\007\000\072\000\000\000\ \\001\000\075\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\077\000\005\000\076\000\008\000\002\000\009\000\001\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\012\000\080\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\001\000\036\000\006\000\084\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\086\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\087\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\088\000\008\000\002\000\009\000\001\000\000\000\ \\000\000\ \\001\000\089\000\008\000\002\000\009\000\001\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\001\000\036\000\006\000\035\000\008\000\002\000\009\000\001\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\001\000\105\000\008\000\002\000\009\000\001\000\000\000\ \\000\000\ \\000\000\ \\001\000\107\000\008\000\002\000\009\000\001\000\000\000\ \\010\000\108\000\000\000\ \\001\000\112\000\008\000\002\000\009\000\001\000\000\000\ \\000\000\ \\011\000\114\000\000\000\ \\000\000\ \\000\000\ \\001\000\118\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\119\000\008\000\002\000\009\000\001\000\000\000\ \\000\000\ \\000\000\ \\001\000\121\000\008\000\002\000\009\000\001\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\011\000\123\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\001\000\132\000\008\000\002\000\009\000\001\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\001\000\135\000\008\000\002\000\009\000\001\000\000\000\ \\000\000\ \\000\000\ \\001\000\139\000\008\000\002\000\009\000\001\000\000\000\ \\000\000\ \\000\000\ \\001\000\142\000\008\000\002\000\009\000\001\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\001\000\143\000\008\000\002\000\009\000\001\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \\001\000\149\000\008\000\002\000\009\000\001\000\000\000\ \\001\000\150\000\008\000\002\000\009\000\001\000\000\000\ \\000\000\ \\000\000\ \\000\000\ \\000\000\ \" val numstates = 152 val numrules = 64 val s = ref "" and index = ref 0 val string_to_int = fn () => let val i = !index in index := i+2; Char.ord(String.sub(!s,i)) + Char.ord(String.sub(!s,i+1)) * 256 end val string_to_list = fn s' => let val len = String.size s' fun f () = if !index < len then string_to_int() :: f() else nil in index := 0; s := s'; f () end val string_to_pairlist = fn (conv_key,conv_entry) => let fun f () = case string_to_int() of 0 => EMPTY | n => PAIR(conv_key (n-1),conv_entry (string_to_int()),f()) in f end val string_to_pairlist_default = fn (conv_key,conv_entry) => let val conv_row = string_to_pairlist(conv_key,conv_entry) in fn () => let val default = conv_entry(string_to_int()) val row = conv_row() in (row,default) end end val string_to_table = fn (convert_row,s') => let val len = String.size s' fun f ()= if !index < len then convert_row() :: f() else nil in (s := s'; index := 0; f ()) end local val memo = Array.array(numstates+numrules,ERROR) val _ =let fun g i=(Array.update(memo,i,REDUCE(i-numstates)); g(i+1)) fun f i = if i=numstates then g i else (Array.update(memo,i,SHIFT (STATE i)); f (i+1)) in f 0 handle Subscript => () end in val entry_to_action = fn 0 => ACCEPT | 1 => ERROR | j => Array.sub(memo,(j-2)) end val gotoT=Array.fromList(string_to_table(string_to_pairlist(NT,STATE),gotoT)) val actionRows=string_to_table(string_to_pairlist_default(T,entry_to_action),actionRows) val actionRowNumbers = string_to_list actionRowNumbers val actionT = let val actionRowLookUp= let val a=Array.fromList(actionRows) in fn i=>Array.sub(a,i) end in Array.fromList(map actionRowLookUp actionRowNumbers) end in LrTable.mkLrTable {actions=actionT,gotos=gotoT,numRules=numrules, numStates=numstates,initialState=STATE 0} end end local open Header in type pos = int type arg = unit structure MlyValue = struct datatype svalue = VOID | ntVOID of unit -> unit | STRING of unit -> (string) | INT of unit -> (int) | ID of unit -> (string) | FUNCTIONLIST of unit -> (fundec list) | DEFUN of unit -> (fundec) | TY_FIELD_SEQ of unit -> (field list) | TY of unit -> (ty) | QUALIFIEDLVALUE of unit -> (var) | LVALUE of unit -> (var) | EXP_ID_COMMA_SEQ of unit -> ( ( symbol * exp * pos ) list) | EXP_SC_SEQ of unit -> ( ( exp * pos ) list) | EXP_COMMA_SEQ of unit -> (exp list) | DECS of unit -> (dec list) | DEC of unit -> (dec) | PROGRAM of unit -> (exp) | EXP of unit -> (exp) end type svalue = MlyValue.svalue type result = exp end structure EC= struct open LrTable val is_keyword = fn (T 31) => true | (T 32) => true | (T 33) => true | (T 39) => true | (T 35) => true | (T 36) => true | (T 37) => true | (T 41) => true | (T 42) => true | (T 43) => true | (T 27) => true | (T 28) => true | (T 29) => true | (T 30) => true | (T 34) => true | (T 38) => true | (T 40) => true | _ => false val preferred_change = (nil ,(T 29) :: nil ):: (nil ,(T 30) :: nil ):: (nil ,(T 7) :: nil ):: nil val noShift = fn (T 0) => true | _ => false val showTerminal = fn (T 0) => "EOF" | (T 1) => "ID" | (T 2) => "INT" | (T 3) => "STRING" | (T 4) => "COMMA" | (T 5) => "COLON" | (T 6) => "SEMICOLON" | (T 7) => "LPAREN" | (T 8) => "RPAREN" | (T 9) => "LBRACK" | (T 10) => "RBRACK" | (T 11) => "LBRACE" | (T 12) => "RBRACE" | (T 13) => "DOT" | (T 14) => "PLUS" | (T 15) => "MINUS" | (T 16) => "TIMES" | (T 17) => "DIVIDE" | (T 18) => "EQ" | (T 19) => "NEQ" | (T 20) => "LT" | (T 21) => "LE" | (T 22) => "GT" | (T 23) => "GE" | (T 24) => "AND" | (T 25) => "OR" | (T 26) => "ASSIGN" | (T 27) => "ARRAY" | (T 28) => "IF" | (T 29) => "THEN" | (T 30) => "ELSE" | (T 31) => "WHILE" | (T 32) => "FOR" | (T 33) => "TO" | (T 34) => "DO" | (T 35) => "LET" | (T 36) => "IN" | (T 37) => "END" | (T 38) => "OF" | (T 39) => "BREAK" | (T 40) => "NIL" | (T 41) => "FUNCTION" | (T 42) => "VAR" | (T 43) => "TYPE" | (T 44) => "UMINUS" | (T 45) => "RIGHT_DUMMY" | _ => "bogus-term" local open Header in val errtermvalue= fn (T 1) => MlyValue.ID(fn () => ("bogus")) | (T 2) => MlyValue.INT(fn () => (1)) | (T 3) => MlyValue.STRING(fn () => ("")) | _ => MlyValue.VOID end val terms = (T 0) :: (T 4) :: (T 5) :: (T 6) :: (T 7) :: (T 8) :: (T 9 ) :: (T 10) :: (T 11) :: (T 12) :: (T 13) :: (T 14) :: (T 15) :: (T 16 ) :: (T 17) :: (T 18) :: (T 19) :: (T 20) :: (T 21) :: (T 22) :: (T 23 ) :: (T 24) :: (T 25) :: (T 26) :: (T 27) :: (T 28) :: (T 29) :: (T 30 ) :: (T 31) :: (T 32) :: (T 33) :: (T 34) :: (T 35) :: (T 36) :: (T 37 ) :: (T 38) :: (T 39) :: (T 40) :: (T 41) :: (T 42) :: (T 43) :: (T 44 ) :: (T 45) :: nil end structure Actions = struct exception mlyAction of int local open Header in val actions = fn (i392,defaultPos,stack, (()):arg) => case (i392,stack) of (0,(_,(MlyValue.EXP EXP1,EXP1left,EXP1right))::rest671) => let val result=MlyValue.PROGRAM(fn _ => let val EXP as EXP1=EXP1 () in (EXP) end ) in (LrTable.NT 1,(result,EXP1left,EXP1right),rest671) end | (1,(_,(MlyValue.EXP EXP1,_,EXP1right))::_::(_,(MlyValue.ID ID1, IDleft as ID1left,_))::rest671) => let val result= MlyValue.EXP_ID_COMMA_SEQ(fn _ => let val ID as ID1=ID1 () val EXP as EXP1=EXP1 () in ([(symbol ID, EXP, IDleft)]) end ) in (LrTable.NT 6,(result,ID1left,EXP1right),rest671) end | (2,(_,(MlyValue.EXP EXP1,_,EXP1right))::_::(_,(MlyValue.ID ID1,_,_)) ::_::(_,(MlyValue.EXP_ID_COMMA_SEQ EXP_ID_COMMA_SEQ1, EXP_ID_COMMA_SEQleft as EXP_ID_COMMA_SEQ1left,_))::rest671) => let val result=MlyValue.EXP_ID_COMMA_SEQ(fn _ => let val EXP_ID_COMMA_SEQ as EXP_ID_COMMA_SEQ1=EXP_ID_COMMA_SEQ1 () val ID as ID1=ID1 () val EXP as EXP1=EXP1 () in (EXP_ID_COMMA_SEQ @ [(symbol ID, EXP, EXP_ID_COMMA_SEQleft)]) end ) in (LrTable.NT 6,(result,EXP_ID_COMMA_SEQ1left,EXP1right),rest671) end | (3,(_,(MlyValue.EXP EXP1,EXP1left,EXP1right))::rest671) => let val result=MlyValue.EXP_COMMA_SEQ(fn _ => let val EXP as EXP1=EXP1 () in ([EXP]) end ) in (LrTable.NT 4,(result,EXP1left,EXP1right),rest671) end | (4,(_,(MlyValue.EXP EXP1,_,EXP1right))::_::(_,( MlyValue.EXP_COMMA_SEQ EXP_COMMA_SEQ1,EXP_COMMA_SEQ1left,_))::rest671) => let val result=MlyValue.EXP_COMMA_SEQ(fn _ => let val EXP_COMMA_SEQ as EXP_COMMA_SEQ1=EXP_COMMA_SEQ1 () val EXP as EXP1=EXP1 () in (EXP_COMMA_SEQ @ [EXP]) end ) in (LrTable.NT 4,(result,EXP_COMMA_SEQ1left,EXP1right),rest671) end | (5,(_,(MlyValue.EXP EXP1,EXPleft as EXP1left,EXP1right))::rest671) => let val result=MlyValue.EXP_SC_SEQ(fn _ => let val EXP as EXP1= EXP1 () in ([(EXP,EXPleft)]) end ) in (LrTable.NT 5,(result,EXP1left,EXP1right),rest671) end | (6,(_,(MlyValue.EXP EXP1,EXPleft,EXP1right))::_::(_,( MlyValue.EXP_SC_SEQ EXP_SC_SEQ1,EXP_SC_SEQ1left,_))::rest671) => let val result=MlyValue.EXP_SC_SEQ(fn _ => let val EXP_SC_SEQ as EXP_SC_SEQ1=EXP_SC_SEQ1 () val EXP as EXP1=EXP1 () in (EXP_SC_SEQ @ [(EXP,EXPleft)]) end ) in (LrTable.NT 5,(result,EXP_SC_SEQ1left,EXP1right),rest671) end | (7,(_,(MlyValue.ID ID1,ID1left,ID1right))::rest671) => let val result=MlyValue.EXP(fn _ => let val ID1=ID1 () in (VarExp(SimpleVar(symbol ID1, ID1left))) end ) in (LrTable.NT 0,(result,ID1left,ID1right),rest671) end | (8,(_,(MlyValue.LVALUE LVALUE1,LVALUE1left,LVALUE1right))::rest671) => let val result=MlyValue.EXP(fn _ => let val LVALUE as LVALUE1= LVALUE1 () in (VarExp LVALUE) end ) in (LrTable.NT 0,(result,LVALUE1left,LVALUE1right),rest671) end | (9,(_,(_,NIL1left,NIL1right))::rest671) => let val result= MlyValue.EXP(fn _ => (NilExp)) in (LrTable.NT 0,(result,NIL1left,NIL1right),rest671) end | (10,(_,(_,_,RPAREN1right))::(_,(MlyValue.EXP_SC_SEQ EXP_SC_SEQ1,_,_) )::(_,(_,LPAREN1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => let val EXP_SC_SEQ1=EXP_SC_SEQ1 () in (SeqExp (EXP_SC_SEQ1)) end ) in (LrTable.NT 0,(result,LPAREN1left,RPAREN1right),rest671) end | (11,(_,(_,_,RPAREN1right))::(_,(_,LPAREN1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => (SeqExp([]))) in (LrTable.NT 0,(result,LPAREN1left,RPAREN1right),rest671) end | (12,(_,(_,_,END1right))::_::_::_::(_,(MlyValue.DECS DECS1,_,_))::(_, (_,LET1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => let val DECS as DECS1=DECS1 () in (LetExp {decs=DECS, body=(SeqExp []), pos=LET1left}) end ) in (LrTable.NT 0,(result,LET1left,END1right),rest671) end | (13,(_,(MlyValue.INT INT1,INT1left,INT1right))::rest671) => let val result=MlyValue.EXP(fn _ => let val INT as INT1=INT1 () in (IntExp (INT)) end ) in (LrTable.NT 0,(result,INT1left,INT1right),rest671) end | (14,(_,(MlyValue.STRING STRING1,STRING1left,STRING1right))::rest671) => let val result=MlyValue.EXP(fn _ => let val STRING as STRING1= STRING1 () in (StringExp (STRING, STRING1left)) end ) in (LrTable.NT 0,(result,STRING1left,STRING1right),rest671) end | (15,(_,(MlyValue.EXP EXP1,_,EXP1right))::(_,(_,MINUS1left,_)):: rest671) => let val result=MlyValue.EXP(fn _ => let val EXP1=EXP1 () in (OpExp{left=IntExp 0, oper=MinusOp, right=EXP1, pos=MINUS1left}) end ) in (LrTable.NT 0,(result,MINUS1left,EXP1right),rest671) end | (16,(_,(_,_,RPAREN1right))::_::(_,(MlyValue.ID ID1,ID1left,_)):: rest671) => let val result=MlyValue.EXP(fn _ => let val ID1=ID1 () in (CallExp{func=symbol(ID1), args=[], pos=ID1left}) end ) in (LrTable.NT 0,(result,ID1left,RPAREN1right),rest671) end | (17,(_,(_,_,RPAREN1right))::(_,(MlyValue.EXP_COMMA_SEQ EXP_COMMA_SEQ1,_,_))::_::(_,(MlyValue.ID ID1,ID1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => let val ID1=ID1 () val EXP_COMMA_SEQ1=EXP_COMMA_SEQ1 () in (CallExp{func=symbol(ID1), args=EXP_COMMA_SEQ1, pos=ID1left}) end ) in (LrTable.NT 0,(result,ID1left,RPAREN1right),rest671) end | (18,(_,(_,_,RBRACE1right))::(_,(MlyValue.EXP_ID_COMMA_SEQ EXP_ID_COMMA_SEQ1,_,_))::_::(_,(MlyValue.ID ID1,ID1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => let val ID1=ID1 () val EXP_ID_COMMA_SEQ1=EXP_ID_COMMA_SEQ1 () in ( RecordExp{fields=EXP_ID_COMMA_SEQ1, typ=symbol(ID1), pos=ID1left} ) end ) in (LrTable.NT 0,(result,ID1left,RBRACE1right),rest671) end | (19,(_,(_,_,RBRACE1right))::_::(_,(MlyValue.ID ID1,ID1left,_)):: rest671) => let val result=MlyValue.EXP(fn _ => let val ID1=ID1 () in ( RecordExp {fields=[], typ=symbol (ID1), pos=ID1left }) end ) in (LrTable.NT 0,(result,ID1left,RBRACE1right),rest671) end | (20,(_,(MlyValue.EXP EXP2,_,EXP2right))::_::_::(_,(MlyValue.EXP EXP1 ,_,_))::_::(_,(MlyValue.ID ID1,ID1left,_))::rest671) => let val result =MlyValue.EXP(fn _ => let val ID1=ID1 () val EXP1=EXP1 () val EXP2=EXP2 () in ( ArrayExp{typ=symbol(ID1), size=EXP1, init=EXP2, pos=ID1left} ) end ) in (LrTable.NT 0,(result,ID1left,EXP2right),rest671) end | (21,(_,(MlyValue.EXP EXP1,_,EXP1right))::_::(_,(MlyValue.ID ID1, ID1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => let val ID1=ID1 () val EXP1=EXP1 () in ( AssignExp{var=SimpleVar(symbol ID1, ID1left), exp=EXP1, pos=ID1left}) end ) in (LrTable.NT 0,(result,ID1left,EXP1right),rest671) end | (22,(_,(MlyValue.EXP EXP1,_,EXP1right))::_::(_,(MlyValue.LVALUE LVALUE1,LVALUE1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => let val LVALUE1=LVALUE1 () val EXP1=EXP1 () in (AssignExp{var=LVALUE1, exp=EXP1, pos=LVALUE1left}) end ) in (LrTable.NT 0,(result,LVALUE1left,EXP1right),rest671) end | (23,(_,(MlyValue.EXP EXP3,_,EXP3right))::_::(_,(MlyValue.EXP EXP2,_, _))::_::(_,(MlyValue.EXP EXP1,EXP1left,_))::(_,(_,IF1left,_))::rest671 ) => let val result=MlyValue.EXP(fn _ => let val EXP1=EXP1 () val EXP2=EXP2 () val EXP3=EXP3 () in ( IfExp{test=EXP1, then'=EXP2, else'=SOME EXP3, pos=EXP1left}) end ) in (LrTable.NT 0,(result,IF1left,EXP3right),rest671) end | (24,(_,(MlyValue.EXP EXP2,_,EXP2right))::_::(_,(MlyValue.EXP EXP1, EXP1left,_))::(_,(_,IF1left,_))::rest671) => let val result= MlyValue.EXP(fn _ => let val EXP1=EXP1 () val EXP2=EXP2 () in (IfExp{test=EXP1, then'=EXP2, else'=NONE, pos=EXP1left}) end ) in (LrTable.NT 0,(result,IF1left,EXP2right),rest671) end | (25,(_,(MlyValue.EXP EXP2,_,EXP2right))::_::(_,(MlyValue.EXP EXP1, EXP1left,_))::(_,(_,WHILE1left,_))::rest671) => let val result= MlyValue.EXP(fn _ => let val EXP1=EXP1 () val EXP2=EXP2 () in (WhileExp{test=EXP1, body=EXP2, pos=EXP1left}) end ) in (LrTable.NT 0,(result,WHILE1left,EXP2right),rest671) end | (26,(_,(MlyValue.EXP EXP3,_,EXP3right))::_::(_,(MlyValue.EXP EXP2,_, _))::_::(_,(MlyValue.EXP EXP1,_,_))::_::(_,(MlyValue.ID ID1,_,_))::(_, (_,FOR1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => let val ID1=ID1 () val EXP1=EXP1 () val EXP2=EXP2 () val EXP3=EXP3 () in ( ForExp{var=symbol ID1, escape=ref false, lo=EXP1, hi=EXP2, body=EXP3, pos=FOR1left} ) end ) in (LrTable.NT 0,(result,FOR1left,EXP3right),rest671) end | (27,(_,(_,BREAK1left,BREAK1right))::rest671) => let val result= MlyValue.EXP(fn _ => (BreakExp (BREAK1left))) in (LrTable.NT 0,(result,BREAK1left,BREAK1right),rest671) end | (28,(_,(_,_,END1right))::(_,(MlyValue.EXP_SC_SEQ EXP_SC_SEQ1,_,_)):: _::(_,(MlyValue.DECS DECS1,DECS1left,_))::(_,(_,LET1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => let val DECS1=DECS1 () val EXP_SC_SEQ1=EXP_SC_SEQ1 () in ( let fun foldDecs [] = [] | foldDecs (FunctionDec(x)::FunctionDec(y)::tail) = foldDecs (FunctionDec(x @ y)::foldDecs tail) | foldDecs (TypeDec(x)::TypeDec(y)::tail) = foldDecs(TypeDec(x @ y)::tail) | foldDecs (head::tail) = head::foldDecs(tail) in LetExp{decs=foldDecs DECS1, body=(SeqExp EXP_SC_SEQ1), pos=DECS1left} end ) end ) in (LrTable.NT 0,(result,LET1left,END1right),rest671) end | (29,(_,(MlyValue.EXP EXP2,_,EXP2right))::_::(_,(MlyValue.EXP EXP1, EXP1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => let val EXP1=EXP1 () val EXP2=EXP2 () in (IfExp{test=EXP1, then'=EXP2, else'=SOME (IntExp 0), pos=EXP1left} ) end ) in (LrTable.NT 0,(result,EXP1left,EXP2right),rest671) end | (30,(_,(MlyValue.EXP EXP2,_,EXP2right))::_::(_,(MlyValue.EXP EXP1, EXP1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => let val EXP1=EXP1 () val EXP2=EXP2 () in (IfExp{test=EXP1, then'=IntExp 1, else'=SOME EXP2, pos=EXP1left}) end ) in (LrTable.NT 0,(result,EXP1left,EXP2right),rest671) end | (31,(_,(MlyValue.EXP EXP2,_,EXP2right))::_::(_,(MlyValue.EXP EXP1, EXP1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => let val EXP1=EXP1 () val EXP2=EXP2 () in (OpExp{left=EXP1,oper=PlusOp,right=EXP2,pos=EXP1left}) end ) in (LrTable.NT 0,(result,EXP1left,EXP2right),rest671) end | (32,(_,(MlyValue.EXP EXP2,_,EXP2right))::_::(_,(MlyValue.EXP EXP1, EXP1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => let val EXP1=EXP1 () val EXP2=EXP2 () in (OpExp{left=EXP1,oper=MinusOp,right=EXP2,pos=EXP1left}) end ) in (LrTable.NT 0,(result,EXP1left,EXP2right),rest671) end | (33,(_,(MlyValue.EXP EXP2,_,EXP2right))::_::(_,(MlyValue.EXP EXP1, EXP1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => let val EXP1=EXP1 () val EXP2=EXP2 () in (OpExp{left=EXP1,oper=TimesOp,right=EXP2,pos=EXP1left}) end ) in (LrTable.NT 0,(result,EXP1left,EXP2right),rest671) end | (34,(_,(MlyValue.EXP EXP2,_,EXP2right))::_::(_,(MlyValue.EXP EXP1, EXP1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => let val EXP1=EXP1 () val EXP2=EXP2 () in (OpExp{left=EXP1,oper=DivideOp,right=EXP2,pos=EXP1left}) end ) in (LrTable.NT 0,(result,EXP1left,EXP2right),rest671) end | (35,(_,(MlyValue.EXP EXP2,_,EXP2right))::_::(_,(MlyValue.EXP EXP1, EXP1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => let val EXP1=EXP1 () val EXP2=EXP2 () in (OpExp{left=EXP1,oper=EqOp,right=EXP2,pos=EXP1left}) end ) in (LrTable.NT 0,(result,EXP1left,EXP2right),rest671) end | (36,(_,(MlyValue.EXP EXP2,_,EXP2right))::_::(_,(MlyValue.EXP EXP1, EXP1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => let val EXP1=EXP1 () val EXP2=EXP2 () in (OpExp{left=EXP1,oper=NeqOp,right=EXP2,pos=EXP1left}) end ) in (LrTable.NT 0,(result,EXP1left,EXP2right),rest671) end | (37,(_,(MlyValue.EXP EXP2,_,EXP2right))::_::(_,(MlyValue.EXP EXP1, EXP1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => let val EXP1=EXP1 () val EXP2=EXP2 () in (OpExp{left=EXP1,oper=GtOp,right=EXP2,pos=EXP1left}) end ) in (LrTable.NT 0,(result,EXP1left,EXP2right),rest671) end | (38,(_,(MlyValue.EXP EXP2,_,EXP2right))::_::(_,(MlyValue.EXP EXP1, EXP1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => let val EXP1=EXP1 () val EXP2=EXP2 () in (OpExp{left=EXP1,oper=LtOp,right=EXP2,pos=EXP1left}) end ) in (LrTable.NT 0,(result,EXP1left,EXP2right),rest671) end | (39,(_,(MlyValue.EXP EXP2,_,EXP2right))::_::(_,(MlyValue.EXP EXP1, EXP1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => let val EXP1=EXP1 () val EXP2=EXP2 () in (OpExp{left=EXP1,oper=GeOp,right=EXP2,pos=EXP1left}) end ) in (LrTable.NT 0,(result,EXP1left,EXP2right),rest671) end | (40,(_,(MlyValue.EXP EXP2,_,EXP2right))::_::(_,(MlyValue.EXP EXP1, EXP1left,_))::rest671) => let val result=MlyValue.EXP(fn _ => let val EXP1=EXP1 () val EXP2=EXP2 () in (OpExp{left=EXP1,oper=LeOp,right=EXP2,pos=EXP1left}) end ) in (LrTable.NT 0,(result,EXP1left,EXP2right),rest671) end | (41,(_,(MlyValue.QUALIFIEDLVALUE QUALIFIEDLVALUE1, QUALIFIEDLVALUE1left,QUALIFIEDLVALUE1right))::rest671) => let val result=MlyValue.LVALUE(fn _ => let val QUALIFIEDLVALUE1= QUALIFIEDLVALUE1 () in (QUALIFIEDLVALUE1) end ) in (LrTable.NT 7,(result,QUALIFIEDLVALUE1left,QUALIFIEDLVALUE1right), rest671) end | (42,(_,(MlyValue.ID ID1,_,ID1right))::_::(_,(MlyValue.LVALUE LVALUE1 ,LVALUE1left,_))::rest671) => let val result=MlyValue.LVALUE(fn _ => let val LVALUE1=LVALUE1 () val ID1=ID1 () in (FieldVar(LVALUE1, symbol ID1, LVALUE1left)) end ) in (LrTable.NT 7,(result,LVALUE1left,ID1right),rest671) end | (43,(_,(_,_,RBRACK1right))::(_,(MlyValue.EXP EXP1,_,_))::_::(_,( MlyValue.LVALUE LVALUE1,LVALUE1left,_))::rest671) => let val result= MlyValue.LVALUE(fn _ => let val LVALUE1=LVALUE1 () val EXP1=EXP1 () in (SubscriptVar(LVALUE1, EXP1, LVALUE1left)) end ) in (LrTable.NT 7,(result,LVALUE1left,RBRACK1right),rest671) end | (44,(_,(MlyValue.ID ID2,ID2left,ID2right))::_::(_,(MlyValue.ID ID1, ID1left,_))::rest671) => let val result=MlyValue.QUALIFIEDLVALUE(fn _ => let val ID1=ID1 () val ID2=ID2 () in (FieldVar(SimpleVar (symbol ID1, ID1left), symbol ID2, ID2left)) end ) in (LrTable.NT 8,(result,ID1left,ID2right),rest671) end | (45,(_,(_,_,RBRACK1right))::(_,(MlyValue.EXP EXP1,EXP1left,_))::_::( _,(MlyValue.ID ID1,ID1left,_))::rest671) => let val result= MlyValue.QUALIFIEDLVALUE(fn _ => let val ID1=ID1 () val EXP1=EXP1 () in ( SubscriptVar(SimpleVar (symbol ID1, ID1left), EXP1, EXP1left) ) end ) in (LrTable.NT 8,(result,ID1left,RBRACK1right),rest671) end | (46,(_,(MlyValue.TY TY1,_,TY1right))::_::(_,(MlyValue.ID ID1,_,_)):: (_,(_,TYPE1left,_))::rest671) => let val result=MlyValue.DEC(fn _ => let val ID1=ID1 () val TY1=TY1 () in (TypeDec [{name=symbol ID1, ty=TY1, pos=TYPE1left}]) end ) in (LrTable.NT 2,(result,TYPE1left,TY1right),rest671) end | (47,(_,(MlyValue.EXP EXP1,_,EXP1right))::_::(_,(MlyValue.ID ID1,_,_) )::(_,(_,VAR1left,_))::rest671) => let val result=MlyValue.DEC(fn _ => let val ID1=ID1 () val EXP1=EXP1 () in ( VarDec {name=symbol(ID1), escape=ref false, typ=NONE, init=EXP1, pos=VAR1left} ) end ) in (LrTable.NT 2,(result,VAR1left,EXP1right),rest671) end | (48,(_,(MlyValue.EXP EXP1,_,EXP1right))::_::(_,(MlyValue.ID ID2, ID2left,_))::_::(_,(MlyValue.ID ID1,_,_))::(_,(_,VAR1left,_))::rest671 ) => let val result=MlyValue.DEC(fn _ => let val ID1=ID1 () val ID2=ID2 () val EXP1=EXP1 () in ( VarDec {name=symbol(ID1), escape=ref false, typ=SOME (symbol(ID2),ID2left), init=EXP1, pos=VAR1left} ) end ) in (LrTable.NT 2,(result,VAR1left,EXP1right),rest671) end | (49,(_,(MlyValue.FUNCTIONLIST FUNCTIONLIST1,FUNCTIONLIST1left, FUNCTIONLIST1right))::rest671) => let val result=MlyValue.DEC(fn _ => let val FUNCTIONLIST as FUNCTIONLIST1=FUNCTIONLIST1 () in (FunctionDec FUNCTIONLIST) end ) in (LrTable.NT 2,(result,FUNCTIONLIST1left,FUNCTIONLIST1right), rest671) end | (50,(_,(MlyValue.EXP EXP1,_,EXP1right))::_::_::(_,( MlyValue.TY_FIELD_SEQ TY_FIELD_SEQ1,_,_))::_::(_,(MlyValue.ID ID1,_,_) )::(_,(_,FUNCTION1left,_))::rest671) => let val result=MlyValue.DEFUN( fn _ => let val ID1=ID1 () val TY_FIELD_SEQ1=TY_FIELD_SEQ1 () val EXP1=EXP1 () in ( {name=symbol(ID1), params=TY_FIELD_SEQ1, result=NONE, body=EXP1, pos=FUNCTION1left, leaf = ref true} : Absyn.fundec ) end ) in (LrTable.NT 11,(result,FUNCTION1left,EXP1right),rest671) end | (51,(_,(MlyValue.EXP EXP1,_,EXP1right))::_::(_,(MlyValue.ID ID2, ID2left,_))::_::_::(_,(MlyValue.TY_FIELD_SEQ TY_FIELD_SEQ1,_,_))::_::( _,(MlyValue.ID ID1,_,_))::(_,(_,FUNCTION1left,_))::rest671) => let val result=MlyValue.DEFUN(fn _ => let val ID1=ID1 () val TY_FIELD_SEQ1=TY_FIELD_SEQ1 () val ID2=ID2 () val EXP1=EXP1 () in ( {name=symbol(ID1), params=TY_FIELD_SEQ1, result=SOME (symbol ID2, ID2left), body=EXP1, pos=FUNCTION1left, leaf = ref true} : Absyn.fundec ) end ) in (LrTable.NT 11,(result,FUNCTION1left,EXP1right),rest671) end | (52,(_,(MlyValue.EXP EXP1,_,EXP1right))::_::_::_::(_,(MlyValue.ID ID1,_,_))::(_,(_,FUNCTION1left,_))::rest671) => let val result= MlyValue.DEFUN(fn _ => let val ID1=ID1 () val EXP1=EXP1 () in ( {name=symbol(ID1), params=[], result=NONE, body=EXP1, pos=FUNCTION1left, leaf = ref true} : Absyn.fundec ) end ) in (LrTable.NT 11,(result,FUNCTION1left,EXP1right),rest671) end | (53,(_,(MlyValue.EXP EXP1,_,EXP1right))::_::(_,(MlyValue.ID ID2, ID2left,_))::_::_::_::(_,(MlyValue.ID ID1,_,_))::(_,(_,FUNCTION1left,_ ))::rest671) => let val result=MlyValue.DEFUN(fn _ => let val ID1=ID1 () val ID2=ID2 () val EXP1=EXP1 () in ( {name=symbol(ID1), params=[], result=SOME (symbol ID2, ID2left), body=EXP1, pos=FUNCTION1left, leaf = ref true}: Absyn.fundec ) end ) in (LrTable.NT 11,(result,FUNCTION1left,EXP1right),rest671) end | (54,(_,(MlyValue.DEFUN DEFUN1,DEFUN1left,DEFUN1right))::rest671) => let val result=MlyValue.FUNCTIONLIST(fn _ => let val DEFUN as DEFUN1= DEFUN1 () in ([DEFUN]) end ) in (LrTable.NT 12,(result,DEFUN1left,DEFUN1right),rest671) end | (55,(_,(MlyValue.DEFUN DEFUN1,_,DEFUN1right))::(_,( MlyValue.FUNCTIONLIST FUNCTIONLIST1,FUNCTIONLIST1left,_))::rest671) => let val result=MlyValue.FUNCTIONLIST(fn _ => let val FUNCTIONLIST as FUNCTIONLIST1=FUNCTIONLIST1 () val DEFUN as DEFUN1=DEFUN1 () in (FUNCTIONLIST @ [DEFUN]) end ) in (LrTable.NT 12,(result,FUNCTIONLIST1left,DEFUN1right),rest671) end | (56,rest671) => let val result=MlyValue.DECS(fn _ => ( [] )) in (LrTable.NT 3,(result,defaultPos,defaultPos),rest671) end | (57,(_,(MlyValue.DEC DEC1,_,DEC1right))::(_,(MlyValue.DECS DECS1, DECS1left,_))::rest671) => let val result=MlyValue.DECS(fn _ => let val DECS as DECS1=DECS1 () val DEC as DEC1=DEC1 () in ( DECS @ [DEC] ) end ) in (LrTable.NT 3,(result,DECS1left,DEC1right),rest671) end | (58,(_,(MlyValue.ID ID1,IDleft as ID1left,ID1right))::rest671) => let val result=MlyValue.TY(fn _ => let val ID as ID1=ID1 () in (NameTy (symbol ID, IDleft)) end ) in (LrTable.NT 9,(result,ID1left,ID1right),rest671) end | (59,(_,(_,_,RBRACE1right))::(_,(_,LBRACE1left,_))::rest671) => let val result=MlyValue.TY(fn _ => (RecordTy [])) in (LrTable.NT 9,(result,LBRACE1left,RBRACE1right),rest671) end | (60,(_,(_,_,RBRACE1right))::(_,(MlyValue.TY_FIELD_SEQ TY_FIELD_SEQ1, _,_))::(_,(_,LBRACE1left,_))::rest671) => let val result=MlyValue.TY( fn _ => let val TY_FIELD_SEQ as TY_FIELD_SEQ1=TY_FIELD_SEQ1 () in (RecordTy TY_FIELD_SEQ) end ) in (LrTable.NT 9,(result,LBRACE1left,RBRACE1right),rest671) end | (61,(_,(MlyValue.ID ID1,_,ID1right))::_::(_,(_,ARRAYleft as ARRAY1left,_))::rest671) => let val result=MlyValue.TY(fn _ => let val ID as ID1=ID1 () in (ArrayTy (symbol ID, ARRAYleft)) end ) in (LrTable.NT 9,(result,ARRAY1left,ID1right),rest671) end | (62,(_,(MlyValue.ID ID2,_,ID2right))::_::(_,(MlyValue.ID ID1,ID1left ,_))::rest671) => let val result=MlyValue.TY_FIELD_SEQ(fn _ => let val ID1=ID1 () val ID2=ID2 () in ( [{name=symbol ID1, escape=ref false, typ=symbol ID2, pos=ID1left}:field] ) end ) in (LrTable.NT 10,(result,ID1left,ID2right),rest671) end | (63,(_,(MlyValue.ID ID2,_,ID2right))::_::(_,(MlyValue.ID ID1,ID1left ,_))::_::(_,(MlyValue.TY_FIELD_SEQ TY_FIELD_SEQ1,TY_FIELD_SEQ1left,_)) ::rest671) => let val result=MlyValue.TY_FIELD_SEQ(fn _ => let val TY_FIELD_SEQ as TY_FIELD_SEQ1=TY_FIELD_SEQ1 () val ID1=ID1 () val ID2=ID2 () in ( TY_FIELD_SEQ @ [{name=symbol ID1, escape=ref false, typ=symbol ID2, pos=ID1left}:field] ) end ) in (LrTable.NT 10,(result,TY_FIELD_SEQ1left,ID2right),rest671) end | _ => raise (mlyAction i392) end val void = MlyValue.VOID val extract = fn a => (fn MlyValue.PROGRAM x => x | _ => let exception ParseInternal in raise ParseInternal end) a () end end structure Tokens : Tiger_TOKENS = struct type svalue = ParserData.svalue type ('a,'b) token = ('a,'b) Token.token fun EOF (p1,p2) = Token.TOKEN (ParserData.LrTable.T 0,( ParserData.MlyValue.VOID,p1,p2)) fun ID (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 1,( ParserData.MlyValue.ID (fn () => i),p1,p2)) fun INT (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 2,( ParserData.MlyValue.INT (fn () => i),p1,p2)) fun STRING (i,p1,p2) = Token.TOKEN (ParserData.LrTable.T 3,( ParserData.MlyValue.STRING (fn () => i),p1,p2)) fun COMMA (p1,p2) = Token.TOKEN (ParserData.LrTable.T 4,( ParserData.MlyValue.VOID,p1,p2)) fun COLON (p1,p2) = Token.TOKEN (ParserData.LrTable.T 5,( ParserData.MlyValue.VOID,p1,p2)) fun SEMICOLON (p1,p2) = Token.TOKEN (ParserData.LrTable.T 6,( ParserData.MlyValue.VOID,p1,p2)) fun LPAREN (p1,p2) = Token.TOKEN (ParserData.LrTable.T 7,( ParserData.MlyValue.VOID,p1,p2)) fun RPAREN (p1,p2) = Token.TOKEN (ParserData.LrTable.T 8,( ParserData.MlyValue.VOID,p1,p2)) fun LBRACK (p1,p2) = Token.TOKEN (ParserData.LrTable.T 9,( ParserData.MlyValue.VOID,p1,p2)) fun RBRACK (p1,p2) = Token.TOKEN (ParserData.LrTable.T 10,( ParserData.MlyValue.VOID,p1,p2)) fun LBRACE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 11,( ParserData.MlyValue.VOID,p1,p2)) fun RBRACE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 12,( ParserData.MlyValue.VOID,p1,p2)) fun DOT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 13,( ParserData.MlyValue.VOID,p1,p2)) fun PLUS (p1,p2) = Token.TOKEN (ParserData.LrTable.T 14,( ParserData.MlyValue.VOID,p1,p2)) fun MINUS (p1,p2) = Token.TOKEN (ParserData.LrTable.T 15,( ParserData.MlyValue.VOID,p1,p2)) fun TIMES (p1,p2) = Token.TOKEN (ParserData.LrTable.T 16,( ParserData.MlyValue.VOID,p1,p2)) fun DIVIDE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 17,( ParserData.MlyValue.VOID,p1,p2)) fun EQ (p1,p2) = Token.TOKEN (ParserData.LrTable.T 18,( ParserData.MlyValue.VOID,p1,p2)) fun NEQ (p1,p2) = Token.TOKEN (ParserData.LrTable.T 19,( ParserData.MlyValue.VOID,p1,p2)) fun LT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 20,( ParserData.MlyValue.VOID,p1,p2)) fun LE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 21,( ParserData.MlyValue.VOID,p1,p2)) fun GT (p1,p2) = Token.TOKEN (ParserData.LrTable.T 22,( ParserData.MlyValue.VOID,p1,p2)) fun GE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 23,( ParserData.MlyValue.VOID,p1,p2)) fun AND (p1,p2) = Token.TOKEN (ParserData.LrTable.T 24,( ParserData.MlyValue.VOID,p1,p2)) fun OR (p1,p2) = Token.TOKEN (ParserData.LrTable.T 25,( ParserData.MlyValue.VOID,p1,p2)) fun ASSIGN (p1,p2) = Token.TOKEN (ParserData.LrTable.T 26,( ParserData.MlyValue.VOID,p1,p2)) fun ARRAY (p1,p2) = Token.TOKEN (ParserData.LrTable.T 27,( ParserData.MlyValue.VOID,p1,p2)) fun IF (p1,p2) = Token.TOKEN (ParserData.LrTable.T 28,( ParserData.MlyValue.VOID,p1,p2)) fun THEN (p1,p2) = Token.TOKEN (ParserData.LrTable.T 29,( ParserData.MlyValue.VOID,p1,p2)) fun ELSE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 30,( ParserData.MlyValue.VOID,p1,p2)) fun WHILE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 31,( ParserData.MlyValue.VOID,p1,p2)) fun FOR (p1,p2) = Token.TOKEN (ParserData.LrTable.T 32,( ParserData.MlyValue.VOID,p1,p2)) fun TO (p1,p2) = Token.TOKEN (ParserData.LrTable.T 33,( ParserData.MlyValue.VOID,p1,p2)) fun DO (p1,p2) = Token.TOKEN (ParserData.LrTable.T 34,( ParserData.MlyValue.VOID,p1,p2)) fun LET (p1,p2) = Token.TOKEN (ParserData.LrTable.T 35,( ParserData.MlyValue.VOID,p1,p2)) fun IN (p1,p2) = Token.TOKEN (ParserData.LrTable.T 36,( ParserData.MlyValue.VOID,p1,p2)) fun END (p1,p2) = Token.TOKEN (ParserData.LrTable.T 37,( ParserData.MlyValue.VOID,p1,p2)) fun OF (p1,p2) = Token.TOKEN (ParserData.LrTable.T 38,( ParserData.MlyValue.VOID,p1,p2)) fun BREAK (p1,p2) = Token.TOKEN (ParserData.LrTable.T 39,( ParserData.MlyValue.VOID,p1,p2)) fun NIL (p1,p2) = Token.TOKEN (ParserData.LrTable.T 40,( ParserData.MlyValue.VOID,p1,p2)) fun FUNCTION (p1,p2) = Token.TOKEN (ParserData.LrTable.T 41,( ParserData.MlyValue.VOID,p1,p2)) fun VAR (p1,p2) = Token.TOKEN (ParserData.LrTable.T 42,( ParserData.MlyValue.VOID,p1,p2)) fun TYPE (p1,p2) = Token.TOKEN (ParserData.LrTable.T 43,( ParserData.MlyValue.VOID,p1,p2)) fun UMINUS (p1,p2) = Token.TOKEN (ParserData.LrTable.T 44,( ParserData.MlyValue.VOID,p1,p2)) fun RIGHT_DUMMY (p1,p2) = Token.TOKEN (ParserData.LrTable.T 45,( ParserData.MlyValue.VOID,p1,p2)) end end