(* keywords.sml * * COPYRIGHT (c) 2010 The Diderot Project (http://diderot.cs.uchicago.edu) * All rights reserved. * * Diderot keywords. *) structure Keywords : sig val idToken : string -> DiderotTokens.token end = struct structure T = ManticoreTokens val keywords = [ ("actor", T.KW_actor), ("bool", T.KW_bool), ("die", T.KW_die), ("else", T.KW_else), ("field", T.KW_field), ("if", T.KW_if), ("image", T.KW_image), ("input", T.KW_input), ("int", T.KW_int), ("kernel", T.KW_kernel), ("new", T.KW_new), ("real", T.KW_real), ("stabilize", T.KW_stabilize), ("string", T.KW_string), ("tensor", T.KW_tensor), ("vec", T.KW_vec) ] (* create a keyword lookup table *) local fun mkFind kws = let val tbl = AtomTable.mkTable (17, Fail "keywords") fun ins (id, tok) = AtomTable.insert tbl (Atom.atom id, tok) val find = AtomTable.find tbl fun idToken id = let val id = Atom.atom id in case find id of NONE => T.ID id | SOME kw => kw (* end case *) end in List.app ins kws; idToken end in (* return either a keyword token or an ID token *) val idToken = mkFind keywords end end
Click to toggle
does not end with </html> tag
does not end with </body> tag
The output has ended thus: * return either a keyword token or an ID token *) val idToken = mkFind keywords end end