type op = Add | Sub | Mult | Div | Equal | Neq | Less | Leq | Greater | Geq

type expr =
    Int_Literal of string                   (* 42 *)
	| String_Literal of string                (* "foo" *)	 
  | Id of string                            (* foo *)  
  | Binop of expr * op * expr               (* a + b *) 
  | Assign of string * expr                 (* foo = 42 *)
	| IntAssign of string * expr
	| LinkAssign of string * expr * expr 
	| TitleAssign of string * expr 
	| FormAssign of string * expr * expr 
	| InputAssign of string * expr * expr * expr 
	| Bold of expr
	| Button of expr * expr 	
	| Close of ""
  | Call of string * expr list              (* foo(1, 25 *)
  | Noexpr                                  (* for (;;) *) 

type stmt =
    Block of stmt list
  | Expr of expr                            (* foo = bar + 3; *)
  | Return of expr                          (* return 42; *)
  | For of expr * expr * expr * stmt        (* for (i=0;i<10;i=i+1) { ... } *)
 	
type func_decl = {
	fname : string;                           (* Name of the function *) 
  formals : string list;                    (* Formal / Passed-In argument names *) 
  locals : string list;                     (* Locally defined variables *)
  body : stmt list;
}

type program = string list * func_decl list (* global vars, funcs *)
