%{
#include <string.h>
#include "frontend/smt2/smt2_lexer.h"
%}
%struct-type
%define slot-name word
struct keyword_s;
%%
Bool,                         SMT2_SYM_BOOL
true,                         SMT2_SYM_TRUE
false,                        SMT2_SYM_FALSE
not,                          SMT2_SYM_NOT
=>,                           SMT2_SYM_IMPLIES
and,                          SMT2_SYM_AND
or,                           SMT2_SYM_OR
xor,                          SMT2_SYM_XOR
=,                            SMT2_SYM_EQ
distinct,                     SMT2_SYM_DISTINCT
ite,                          SMT2_SYM_ITE
Array,                        SMT2_SYM_ARRAY
select,                       SMT2_SYM_SELECT
store,                        SMT2_SYM_STORE
Int,                          SMT2_SYM_INT
Real,                         SMT2_SYM_REAL
-,                            SMT2_SYM_MINUS
+,                            SMT2_SYM_PLUS
*,                            SMT2_SYM_TIMES
/,                            SMT2_SYM_DIVIDES
<=,                           SMT2_SYM_LE
<,                            SMT2_SYM_LT
>=,                           SMT2_SYM_GE
>,                            SMT2_SYM_GT
div,                          SMT2_SYM_DIV
mod,                          SMT2_SYM_MOD
abs,                          SMT2_SYM_ABS
to_real,                      SMT2_SYM_TO_REAL
to_int,                       SMT2_SYM_TO_INT
is_int,                       SMT2_SYM_IS_INT
divisible,                    SMT2_SYM_DIVISIBLE
BitVec,                       SMT2_SYM_BITVEC
concat,                       SMT2_SYM_CONCAT
extract,                      SMT2_SYM_EXTRACT
repeat,                       SMT2_SYM_REPEAT
bvcomp,                       SMT2_SYM_BVCOMP
bvredand,                     SMT2_SYM_BVREDAND
bvredor,                      SMT2_SYM_BVREDOR
bvnot,                        SMT2_SYM_BVNOT
bvand,                        SMT2_SYM_BVAND
bvor,                         SMT2_SYM_BVOR
bvnand,                       SMT2_SYM_BVNAND
bvnor,                        SMT2_SYM_BVNOR
bvxor,                        SMT2_SYM_BVXOR
bvxnor,                       SMT2_SYM_BVXNOR
bvneg,                        SMT2_SYM_BVNEG
bvadd,                        SMT2_SYM_BVADD
bvsub,                        SMT2_SYM_BVSUB
bvmul,                        SMT2_SYM_BVMUL
bvudiv,                       SMT2_SYM_BVUDIV
bvurem,                       SMT2_SYM_BVUREM
bvsdiv,                       SMT2_SYM_BVSDIV
bvsrem,                       SMT2_SYM_BVSREM
bvsmod,                       SMT2_SYM_BVSMOD
bvshl,                        SMT2_SYM_BVSHL
bvlshr,                       SMT2_SYM_BVLSHR
bvashr,                       SMT2_SYM_BVASHR
zero_extend,                  SMT2_SYM_ZERO_EXTEND
sign_extend,                  SMT2_SYM_SIGN_EXTEND
rotate_left,                  SMT2_SYM_ROTATE_LEFT
rotate_right,                 SMT2_SYM_ROTATE_RIGHT
bvult,                        SMT2_SYM_BVULT
bvule,                        SMT2_SYM_BVULE
bvugt,                        SMT2_SYM_BVUGT
bvuge,                        SMT2_SYM_BVUGE
bvslt,                        SMT2_SYM_BVSLT
bvsle,                        SMT2_SYM_BVSLE
bvsgt,                        SMT2_SYM_BVSGT
bvsge,                        SMT2_SYM_BVSGE
FiniteField,                  SMT2_SYM_FINITEFIELD
ff.add,                       SMT2_SYM_FFADD
ff.mul,                       SMT2_SYM_FFMUL
