let keyword =
let kw_table = Hashtbl.create 31 in
List.iter
(fun (s,tk) -> Hashtbl.add kw_table s tk)
[ "arith", ARITH; "tuple", TUPLE;
"in", IN; "inf", INF;
"bot", BOT; "int", INT; "real", REAL; "top", TOP;
"bitvector", BV; "with", WITH;
"proj", PROJ;
"cons", CONS; "car", CAR; "cdr", CDR;
"conc", CONC; "sub", SUB; "ite", BWITE;
"drop", DROP; "can", CAN; "assert", ASSERT; "exit", EXIT;
"valid", VALID; "unsat", UNSAT;
"save", SAVE; "restore", RESTORE; "remove", REMOVE; "forget", FORGET;
"reset", RESET; "sig", SIG; "type", TYPE; "def", DEF; "prop", PROP;
"sigma", SIGMA; "solve", SOLVE; "help", HELP; "model", MODEL;
"set", SET; "toggle", TOGGLE; "trace", TRACE; "untrace", UNTRACE;
"find", FIND; "inv", INV; "use", USE; "solution", SOLUTION; "partition", PARTITION;
"syntax", SYNTAX; "commands", COMMANDS; "ctxt", CTXT; "diseq", DISEQ; "echo", ECHO;
"show", SHOW; "symtab", SYMTAB; "sign", SIGN; "dom", DOM; "split", SPLIT; "sat", SAT;
"true", TRUE; "false", FALSE;
"tt", TT; "ff", FF;
"inr", INR; "inl", INL; "outr", OUTR; "outl", OUTL;
"inj", INJ; "out", OUT;
"hd", HEAD; "tl", TAIL;
"unsigned", UNSIGNED; "apply", APPLY;
"lambda", LAMBDA;
"if", IF; "then", THEN; "else", ELSE; "end", END;
"create", CREATE
];
fun s ->
try Hashtbl.find kw_table s with Not_found -> IDENT s