///|
let keyword_table : @hashmap.HashMap[String, Token] = [
    ("as", AS),
    ("else", ELSE),
    ("extern", EXTERN),
    ("fn", FN),
    ("fnalias", FNALIAS),
    ("if", IF),
    ("let", LET),
    ("proof_assert", PROOF_ASSERT),
    ("proof_let", PROOF_LET),
    ("const", CONST),
    ("match", MATCH),
    ("using", USING),
    ("mut", MUTABLE),
    ("type", TYPE),
    ("typealias", TYPEALIAS),
    ("struct", STRUCT),
    ("enum", ENUM),
    ("extenum", EXTENUM),
    ("trait", TRAIT),
    ("traitalias", TRAITALIAS),
    ("derive", DERIVE),
    ("while", WHILE),
    ("break", BREAK),
    ("continue", CONTINUE),
    ("import", IMPORT),
    ("return", RETURN),
    ("throw", THROW),
    ("raise", RAISE),
    ("try", TRY),
    ("catch", CATCH),
    ("pub", PUB),
    ("priv", PRIV),
    ("readonly", READONLY),
    ("true", TRUE),
    ("false", FALSE),
    ("_", UNDERSCORE),
    ("test", TEST),
    ("loop", LOOP),
    ("for", FOR),
    ("in", IN),
    ("impl", IMPL),
    ("with", WITH),
    ("guard", GUARD),
    ("async", ASYNC),
    ("is", IS),
    ("suberror", SUBERROR),
    ("and", AND),
    ("letrec", LETREC),
    ("enumview", ENUMVIEW),
    ("extend", EXTEND),
    ("noraise", NORAISE),
    ("defer", DEFER),
    ("lexmatch", LEXMATCH),
    ("lexscan", LEXSCAN),
    ("where", WHERE),
    ("declare", DECLARE),
    ("nobreak", NOBREAK),
    ("package", PACKAGE),
  ]
  |> @hashmap.from_array()

///|
let reserved_keyword_table : @hashset.HashSet[String] = [
    "module", "move", "ref", "static", "super", "unsafe", "use", "await", "dyn",
    "abstract", "do", "final", "macro", "override", "typeof", "virtual", "yield",
    "local", "method", "alias", "assert",
  ]
  |> @hashset.from_array()