(* Copyright (c) 1997 Andrew W. Appel. *) functor TigerLexFun(structure Tokens : Tiger_TOKENS)= struct structure UserDeclarations = struct open ErrorMsg; type svalue = Tokens.svalue type pos = int type ('a,'b) token = ('a,'b) Tokens.token type lexresult = (svalue,pos) token fun inc x = x := !x + 1 fun dec x = x := !x - 1 val stringstart = ref 0 val charlist = ref (nil: char list) val lineNum = ErrorMsg.lineNum val linePos = ErrorMsg.linePos val comLevel = ref 0 fun err(p1,p2) = ErrorMsg.error p1 val eof = fn () => let val pos = Int.max(!stringstart+2, hd(!linePos)) in if !comLevel>0 then err (!stringstart,pos) "unclosed comment" else (); Tokens.EOF(pos,pos) end fun addString (s:char) = charlist := s :: (!charlist) fun makeString () = (implode(rev(!charlist)) before charlist := nil) fun makeInt s = foldl (fn (c,a) => a*10 + ord c - ord #"0") 0 (explode s) end (* end of user routines *) exception LexError (* raised if illegal leaf action tried *) structure Internal = struct datatype yyfinstate = N of int type statedata = {fin : yyfinstate list, trans: string} (* transition & final state table *) val tab = let val s = [ (0, "\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\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\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\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" ), (1, "\010\010\010\010\010\010\010\010\010\096\098\010\096\010\010\010\ \\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\010\ \\096\010\095\010\010\010\094\010\092\091\089\088\087\086\085\084\ \\082\082\082\082\082\082\082\082\082\082\080\079\076\075\073\010\ \\010\014\014\014\014\014\014\014\014\014\014\014\014\014\014\014\ \\014\014\014\014\014\014\014\014\014\014\014\072\010\071\010\010\ \\010\066\061\014\059\053\043\014\014\040\014\014\037\014\034\032\ \\014\014\014\014\024\014\021\016\014\014\014\013\012\011\010\010\ \\009" ), (3, "\099\099\099\099\099\099\099\099\099\099\104\099\099\099\099\099\ \\099\099\099\099\099\099\099\099\099\099\099\099\099\099\099\099\ \\099\099\099\099\099\099\099\099\102\099\100\099\099\099\099\099\ \\099\099\099\099\099\099\099\099\099\099\099\099\099\099\099\099\ \\099\099\099\099\099\099\099\099\099\099\099\099\099\099\099\099\ \\099\099\099\099\099\099\099\099\099\099\099\099\099\099\099\099\ \\099\099\099\099\099\099\099\099\099\099\099\099\099\099\099\099\ \\099\099\099\099\099\099\099\099\099\099\099\099\099\099\099\099\ \\099" ), (5, "\105\105\105\105\105\105\105\105\105\105\119\105\105\105\105\105\ \\105\105\105\105\105\105\105\105\105\105\105\105\105\105\105\105\ \\105\105\118\105\105\105\105\105\105\105\105\105\105\105\105\105\ \\105\105\105\105\105\105\105\105\105\105\105\105\105\105\105\105\ \\105\105\105\105\105\105\105\105\105\105\105\105\105\105\105\105\ \\105\105\105\105\105\105\105\105\105\105\105\105\106\105\105\105\ \\105\105\105\105\105\105\105\105\105\105\105\105\105\105\105\105\ \\105\105\105\105\105\105\105\105\105\105\105\105\105\105\105\105\ \\105" ), (7, "\120\120\120\120\120\120\120\120\120\122\124\120\122\120\120\120\ \\120\120\120\120\120\120\120\120\120\120\120\120\120\120\120\120\ \\122\120\120\120\120\120\120\120\120\120\120\120\120\120\120\120\ \\120\120\120\120\120\120\120\120\120\120\120\120\120\120\120\120\ \\120\120\120\120\120\120\120\120\120\120\120\120\120\120\120\120\ \\120\120\120\120\120\120\120\120\120\120\120\120\121\120\120\120\ \\120\120\120\120\120\120\120\120\120\120\120\120\120\120\120\120\ \\120\120\120\120\120\120\120\120\120\120\120\120\120\120\120\120\ \\120" ), (14, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (16, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\017\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (17, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\018\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (18, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\015\019\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (19, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\020\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (21, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\022\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (22, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\023\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (24, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\029\015\015\015\015\015\015\028\ \\015\015\015\015\015\015\015\015\015\025\015\000\000\000\000\000\ \\000" ), (25, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\026\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (26, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\027\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (29, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\030\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (30, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\031\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (32, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\033\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (34, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\035\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (35, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\015\036\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (37, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\038\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (38, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\039\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (40, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\042\015\015\015\015\015\015\015\041\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (43, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\051\ \\015\015\015\015\015\044\015\015\015\015\015\000\000\000\000\000\ \\000" ), (44, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\045\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (45, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\046\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (46, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\047\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (47, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\048\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (48, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\049\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (49, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\050\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (51, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\052\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (53, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\015\056\015\054\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (54, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\055\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (56, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\057\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (57, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\058\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (59, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\060\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (61, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\062\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (62, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\063\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (63, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\064\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (64, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\065\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (66, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\067\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (67, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\068\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (68, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\069\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\ \\000" ), (69, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\015\015\015\015\015\015\015\015\015\015\000\000\000\000\000\000\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\015\015\000\000\000\000\015\ \\000\015\015\015\015\015\015\015\015\015\015\015\015\015\015\015\ \\015\015\015\015\015\015\015\015\015\070\015\000\000\000\000\000\ \\000" ), (73, "\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\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\074\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\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\ \\000" ), (76, "\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\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\078\077\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\ \\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" ), (80, "\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\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\081\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\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\ \\000" ), (82, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\083\083\083\083\083\083\083\083\083\083\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\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\000\000\000\000\ \\000" ), (89, "\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\000\000\000\000\000\000\000\000\090\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\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\000\000\000\000\ \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\000" ), (92, "\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\000\000\000\000\000\000\000\000\000\093\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\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\000\000\000\ \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\000" ), (96, "\000\000\000\000\000\000\000\000\000\097\000\000\097\000\000\000\ \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\097\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\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\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" ), (100, "\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\000\000\000\000\000\000\000\000\101\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\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\000\000\000\000\ \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\000" ), (102, "\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\000\000\000\000\000\000\000\000\000\103\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\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\000\000\000\ \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\000" ), (106, "\000\000\000\000\000\000\000\000\000\116\117\000\000\000\000\000\ \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\116\000\115\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\112\112\112\112\112\112\112\112\112\112\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\000\111\000\109\000\ \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\108\000\ \\000\000\000\000\107\000\000\000\000\000\000\000\000\000\000\000\ \\000" ), (109, "\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\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\ \\110\110\110\110\110\110\110\110\110\110\110\110\110\110\110\110\ \\110\110\110\110\110\110\110\110\110\110\110\110\110\110\110\110\ \\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" ), (112, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\113\113\113\113\113\113\113\113\113\113\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\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\000\000\000\000\ \\000" ), (113, "\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\114\114\114\114\114\114\114\114\114\114\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\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\000\000\000\000\ \\000" ), (122, "\000\000\000\000\000\000\000\000\000\123\000\000\123\000\000\000\ \\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ \\123\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\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\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" ), (0, "")] fun f x = x val s = map f (rev (tl (rev s))) exception LexHackingError fun look ((j,x)::r, i) = if i = j then x else look(r, i) | look ([], i) = raise LexHackingError fun g {fin=x, trans=i} = {fin=x, trans=look(s,i)} in Vector.fromList(map g [{fin = [], trans = 0}, {fin = [(N 2)], trans = 1}, {fin = [(N 2)], trans = 1}, {fin = [], trans = 3}, {fin = [], trans = 3}, {fin = [], trans = 5}, {fin = [], trans = 5}, {fin = [(N 174)], trans = 7}, {fin = [(N 174)], trans = 7}, {fin = [(N 147),(N 149)], trans = 0}, {fin = [(N 149)], trans = 0}, {fin = [(N 10),(N 149)], trans = 0}, {fin = [(N 36),(N 149)], trans = 0}, {fin = [(N 8),(N 149)], trans = 0}, {fin = [(N 134),(N 149)], trans = 14}, {fin = [(N 134)], trans = 14}, {fin = [(N 134),(N 149)], trans = 16}, {fin = [(N 134)], trans = 17}, {fin = [(N 134)], trans = 18}, {fin = [(N 134)], trans = 19}, {fin = [(N 64),(N 134)], trans = 14}, {fin = [(N 134),(N 149)], trans = 21}, {fin = [(N 134)], trans = 22}, {fin = [(N 101),(N 134)], trans = 14}, {fin = [(N 134),(N 149)], trans = 24}, {fin = [(N 134)], trans = 25}, {fin = [(N 134)], trans = 26}, {fin = [(N 106),(N 134)], trans = 14}, {fin = [(N 84),(N 134)], trans = 14}, {fin = [(N 134)], trans = 29}, {fin = [(N 134)], trans = 30}, {fin = [(N 120),(N 134)], trans = 14}, {fin = [(N 134),(N 149)], trans = 32}, {fin = [(N 131),(N 134)], trans = 14}, {fin = [(N 134),(N 149)], trans = 34}, {fin = [(N 134)], trans = 35}, {fin = [(N 81),(N 134)], trans = 14}, {fin = [(N 134),(N 149)], trans = 37}, {fin = [(N 134)], trans = 38}, {fin = [(N 74),(N 134)], trans = 14}, {fin = [(N 134),(N 149)], trans = 40}, {fin = [(N 77),(N 134)], trans = 14}, {fin = [(N 115),(N 134)], trans = 14}, {fin = [(N 134),(N 149)], trans = 43}, {fin = [(N 134)], trans = 44}, {fin = [(N 134)], trans = 45}, {fin = [(N 134)], trans = 46}, {fin = [(N 134)], trans = 47}, {fin = [(N 134)], trans = 48}, {fin = [(N 134)], trans = 49}, {fin = [(N 97),(N 134)], trans = 14}, {fin = [(N 134)], trans = 51}, {fin = [(N 58),(N 134)], trans = 14}, {fin = [(N 134),(N 149)], trans = 53}, {fin = [(N 134)], trans = 54}, {fin = [(N 88),(N 134)], trans = 14}, {fin = [(N 134)], trans = 56}, {fin = [(N 134)], trans = 57}, {fin = [(N 125),(N 134)], trans = 14}, {fin = [(N 134),(N 149)], trans = 59}, {fin = [(N 128),(N 134)], trans = 14}, {fin = [(N 134),(N 149)], trans = 61}, {fin = [(N 134)], trans = 62}, {fin = [(N 134)], trans = 63}, {fin = [(N 134)], trans = 64}, {fin = [(N 70),(N 134)], trans = 14}, {fin = [(N 134),(N 149)], trans = 66}, {fin = [(N 134)], trans = 67}, {fin = [(N 134)], trans = 68}, {fin = [(N 134)], trans = 69}, {fin = [(N 112),(N 134)], trans = 14}, {fin = [(N 14),(N 149)], trans = 0}, {fin = [(N 12),(N 149)], trans = 0}, {fin = [(N 46),(N 149)], trans = 73}, {fin = [(N 51)], trans = 0}, {fin = [(N 41),(N 149)], trans = 0}, {fin = [(N 48),(N 149)], trans = 76}, {fin = [(N 44)], trans = 0}, {fin = [(N 54)], trans = 0}, {fin = [(N 18),(N 149)], trans = 0}, {fin = [(N 16),(N 149)], trans = 80}, {fin = [(N 39)], trans = 0}, {fin = [(N 137),(N 149)], trans = 82}, {fin = [(N 137)], trans = 82}, {fin = [(N 32),(N 149)], trans = 0}, {fin = [(N 24),(N 149)], trans = 0}, {fin = [(N 28),(N 149)], trans = 0}, {fin = [(N 6),(N 149)], trans = 0}, {fin = [(N 26),(N 149)], trans = 0}, {fin = [(N 30),(N 149)], trans = 89}, {fin = [(N 145)], trans = 0}, {fin = [(N 22),(N 149)], trans = 0}, {fin = [(N 20),(N 149)], trans = 92}, {fin = [(N 142)], trans = 0}, {fin = [(N 34),(N 149)], trans = 0}, {fin = [(N 139),(N 149)], trans = 0}, {fin = [(N 2),(N 149)], trans = 96}, {fin = [(N 2)], trans = 96}, {fin = [(N 4)], trans = 0}, {fin = [(N 159)], trans = 0}, {fin = [(N 159)], trans = 100}, {fin = [(N 157)], trans = 0}, {fin = [(N 159)], trans = 102}, {fin = [(N 152)], trans = 0}, {fin = [(N 154)], trans = 0}, {fin = [(N 203)], trans = 0}, {fin = [(N 201),(N 203)], trans = 106}, {fin = [(N 181)], trans = 0}, {fin = [(N 184)], trans = 0}, {fin = [], trans = 109}, {fin = [(N 194)], trans = 0}, {fin = [(N 187)], trans = 0}, {fin = [], trans = 112}, {fin = [], trans = 113}, {fin = [(N 199)], trans = 0}, {fin = [(N 190)], trans = 0}, {fin = [(N 169)], trans = 0}, {fin = [(N 166)], trans = 0}, {fin = [(N 161),(N 203)], trans = 0}, {fin = [(N 163)], trans = 0}, {fin = [(N 178)], trans = 0}, {fin = [(N 176),(N 178)], trans = 0}, {fin = [(N 174),(N 178)], trans = 122}, {fin = [(N 174)], trans = 122}, {fin = [(N 171)], trans = 0}]) end structure StartStates = struct datatype yystartstate = STARTSTATE of int (* start state definitions *) val A = STARTSTATE 3; val F = STARTSTATE 7; val INITIAL = STARTSTATE 1; val S = STARTSTATE 5; end type result = UserDeclarations.lexresult exception LexerError (* raised if illegal leaf action tried *) end fun makeLexer yyinput = let val yyb = ref "\n" (* buffer *) val yybl = ref 1 (*buffer length *) val yybufpos = ref 1 (* location of next character to use *) val yygone = ref 1 (* position in file of beginning of buffer *) val yydone = ref false (* eof found yet? *) val yybegin = ref 1 (*Current 'start state' for lexer *) val YYBEGIN = fn (Internal.StartStates.STARTSTATE x) => yybegin := x fun lex () : Internal.result = let fun continue() = lex() in let fun scan (s,AcceptingLeaves : Internal.yyfinstate list list,l,i0) = let fun action (i,nil) = raise LexError | action (i,nil::l) = action (i-1,l) | action (i,(node::acts)::l) = case node of Internal.N yyk => (let val yytext = substring(!yyb,i0,i-i0) val yypos = i0+ !yygone open UserDeclarations Internal.StartStates in (yybufpos := i; case yyk of (* Application actions *) 10 => (Tokens.RBRACE(yypos,yypos+1)) | 101 => (Tokens.VAR(yypos,yypos+3)) | 106 => (Tokens.TYPE(yypos,yypos+4)) | 112 => (Tokens.ARRAY(yypos,yypos+5)) | 115 => (Tokens.IF(yypos,yypos+2)) | 12 => (Tokens.LBRACK(yypos,yypos+1)) | 120 => (Tokens.THEN(yypos,yypos+4)) | 125 => (Tokens.ELSE(yypos,yypos+4)) | 128 => (Tokens.DO(yypos,yypos+2)) | 131 => (Tokens.OF(yypos,yypos+2)) | 134 => (Tokens.ID(yytext,yypos,yypos+size yytext)) | 137 => (Tokens.INT(makeInt yytext handle Overflow => (err (yypos,yypos+size yytext) "integer too large"; 1), yypos,yypos+size yytext)) | 139 => (charlist := nil; stringstart := yypos; YYBEGIN S; continue()) | 14 => (Tokens.RBRACK(yypos,yypos+1)) | 142 => (YYBEGIN A; stringstart := yypos; comLevel := 1; continue()) | 145 => (err (yypos,yypos+1) "unmatched close comment"; continue()) | 147 => (err (yypos,yypos) "non-Ascii character"; continue()) | 149 => (err (yypos,yypos) "illegal token"; continue()) | 152 => (inc comLevel; continue()) | 154 => (inc lineNum; linePos := yypos :: !linePos; continue()) | 157 => (dec comLevel; if !comLevel=0 then YYBEGIN INITIAL else (); continue()) | 159 => (continue()) | 16 => (Tokens.COLON(yypos,yypos+1)) | 161 => (YYBEGIN INITIAL; Tokens.STRING(makeString(), !stringstart,yypos+1)) | 163 => (err (!stringstart,yypos) "unclosed string"; inc lineNum; linePos := yypos :: !linePos; YYBEGIN INITIAL; Tokens.STRING(makeString(),!stringstart,yypos)) | 166 => (inc lineNum; linePos := yypos :: !linePos; YYBEGIN F; continue()) | 169 => (YYBEGIN F; continue()) | 171 => (inc lineNum; linePos := yypos :: !linePos; continue()) | 174 => (continue()) | 176 => (YYBEGIN S; stringstart := yypos; continue()) | 178 => (err (!stringstart,yypos) "unclosed string"; YYBEGIN INITIAL; Tokens.STRING(makeString(),!stringstart,yypos+1)) | 18 => (Tokens.SEMICOLON(yypos,yypos+1)) | 181 => (addString #"\t"; continue()) | 184 => (addString #"\n"; continue()) | 187 => (addString #"\\"; continue()) | 190 => (addString #"\""; continue()) | 194 => (addString(chr(ord(String.sub(yytext,2))-ord(#"@"))); continue()) | 199 => (let val x = ord(String.sub(yytext,1))*100 +ord(String.sub(yytext,2))*10 +ord(String.sub(yytext,3)) -(ord #"0" * 111) in (if x>255 then err (yypos,yypos+4) "illegal ascii escape" else addString(chr x); continue()) end) | 2 => (continue()) | 20 => (Tokens.LPAREN(yypos,yypos+1)) | 201 => (err (yypos,yypos+1) "illegal string escape"; continue()) | 203 => (addString(String.sub(yytext,0)); continue()) | 22 => (Tokens.RPAREN(yypos,yypos+1)) | 24 => (Tokens.DOT(yypos,yypos+1)) | 26 => (Tokens.PLUS(yypos,yypos+1)) | 28 => (Tokens.MINUS(yypos,yypos+1)) | 30 => (Tokens.TIMES(yypos,yypos+1)) | 32 => (Tokens.DIVIDE(yypos,yypos+1)) | 34 => (Tokens.AND(yypos,yypos+1)) | 36 => (Tokens.OR(yypos,yypos+1)) | 39 => (Tokens.ASSIGN(yypos,yypos+2)) | 4 => (inc lineNum; linePos := yypos :: !linePos; continue()) | 41 => (Tokens.EQ(yypos,yypos+1)) | 44 => (Tokens.NEQ(yypos,yypos+2)) | 46 => (Tokens.GT(yypos,yypos+1)) | 48 => (Tokens.LT(yypos,yypos+1)) | 51 => (Tokens.GE(yypos,yypos+2)) | 54 => (Tokens.LE(yypos,yypos+2)) | 58 => (Tokens.FOR(yypos,yypos+3)) | 6 => (Tokens.COMMA(yypos,yypos+1)) | 64 => (Tokens.WHILE(yypos,yypos+5)) | 70 => (Tokens.WHILE(yypos,yypos+5)) | 74 => (Tokens.LET(yypos,yypos+3)) | 77 => (Tokens.IN(yypos,yypos+2)) | 8 => (Tokens.LBRACE(yypos,yypos+1)) | 81 => (Tokens.NIL(yypos,yypos+3)) | 84 => (Tokens.TO(yypos,yypos+2)) | 88 => (Tokens.END(yypos,yypos+3)) | 97 => (Tokens.FUNCTION(yypos,yypos+8)) | _ => raise Internal.LexerError ) end ) val {fin,trans} = Vector.sub(Internal.tab, s) val NewAcceptingLeaves = fin::AcceptingLeaves in if l = !yybl then if trans = #trans(Vector.sub(Internal.tab,0)) then action(l,NewAcceptingLeaves ) else let val newchars= if !yydone then "" else yyinput 1024 in if (size newchars)=0 then (yydone := true; if (l=i0) then UserDeclarations.eof () else action(l,NewAcceptingLeaves)) else (if i0=l then yyb := newchars else yyb := substring(!yyb,i0,l-i0)^newchars; yygone := !yygone+i0; yybl := size (!yyb); scan (s,AcceptingLeaves,l-i0,0)) end else let val NewChar = Char.ord(String.sub(!yyb,l)) val NewState = if NewChar<128 then Char.ord(String.sub(trans,NewChar)) else Char.ord(String.sub(trans,128)) in if NewState=0 then action(l,NewAcceptingLeaves) else scan(NewState,NewAcceptingLeaves,l+1,i0) end end (* val start= if substring(!yyb,!yybufpos-1,1)="\n" then !yybegin+1 else !yybegin *) in scan(!yybegin (* start *),nil,!yybufpos,!yybufpos) end end in lex end end