sig lpbasic_absyn. % higher-order abstract syntax and execution of lpbasic kind lbexp type. % lpbasic expressions kind lbst type. % lpbasic statements (strings will represent types) kind lbtype type. % lpbasic types type intexp int -> lbexp. type strexp, varexp string -> lbexp. type sumexp, difexp, multexp, divexp, andexp, orexp lbexp -> lbexp -> lbexp. type eqexp, ineqexp lbexp -> lbexp -> lbexp. type notexp lbexp -> lbexp. type printst lbexp -> lbst. type assignst lbexp -> lbexp -> lbst. type ifst lbexp -> lbst -> lbst. type ifelsest lbexp -> lbst -> lbst -> lbst. type blockst (list lbst) -> lbst. type whilest lbexp -> lbst -> lbst. type letst lbexp -> (lbexp -> lbst) -> lbst. type welltyped lbst -> o. type hastype lbexp -> lbtype -> o. type integer, ascii, boolean, void lbtype. % A program will be a (list lbst) % other predicate declarations: type copyexp lbexp -> lbexp -> o. type copyst lbst -> lbst -> o. type lbeval lbexp -> lbexp -> o. type lbexecute (list lbst) -> o. type bind lbexp -> lbexp -> o. % variable bindings (not used) type formlet lbst -> lbst -> lbst -> o. type printit lbexp -> o. type process_string string -> string -> o. type run string -> o. type appendd (list A) -> (list A) -> (list A) -> o.