10 cons
,plus
,minus
,times
,divide
,modulo
,power
12 enum unop
{negate
,inverse
};
14 an_binop
, an_bool
, an_char
, an_cons
, an_fundecl
, an_ident
, an_if
,
15 an_int
, an_list
, an_stmt_expr
, an_unop
, an_vardecl
, an_while
35 struct ast
*body
; // make struct ast **?
48 struct ast
*an_stmt_expr
;
64 struct ast
*ast_bool(bool b
);
65 struct ast
*ast_binop(struct ast
*l
, enum binop op
, struct ast
*tail
);
66 struct ast
*ast_char(const char *c
);
67 struct ast
*ast_cons(struct ast
*el
, struct ast
*tail
);
68 struct ast
*ast_fundecl(struct ast
*ident
, struct ast
*args
, struct ast
*body
);
69 struct ast
*ast_if(struct ast
*pred
, struct ast
*then
, struct ast
*els
);
70 struct ast
*ast_int(int integer
);
71 struct ast
*ast_ident(char *ident
);
72 struct ast
*ast_list(struct ast
*llist
);
73 struct ast
*ast_stmt_expr(struct ast
*expr
);
74 struct ast
*ast_unop(enum unop op
, struct ast
*l
);
75 struct ast
*ast_vardecl(struct ast
*ident
, struct ast
*l
);
76 struct ast
*ast_while(struct ast
*pred
, struct ast
*body
);
78 int ast_llistlength(struct ast
*list
);
80 void ast_print(struct ast
* ast
, int indent
, FILE *out
);
81 void ast_free(struct ast
*ast
);