10 cons
,plus
,minus
,times
,divide
,modulo
,power
12 enum unop
{negate
,inverse
};
14 an_assign
, an_binop
, an_bool
, an_char
, an_cons
, an_funcall
, an_fundecl
,
15 an_ident
, an_if
, an_int
, an_list
, an_nil
, an_return
, an_stmt_expr
,
16 an_unop
, an_vardecl
, an_while
62 struct ast
*an_return
;
63 struct ast
*an_stmt_expr
;
80 struct ast
*ast_assign(struct ast
*ident
, struct ast
*expr
);
81 struct ast
*ast_binop(struct ast
*l
, enum binop op
, struct ast
*tail
);
82 struct ast
*ast_bool(bool b
);
83 struct ast
*ast_char(const char *c
);
84 struct ast
*ast_cons(struct ast
*el
, struct ast
*tail
);
85 struct ast
*ast_funcall(struct ast
*ident
, struct ast
*args
);
86 struct ast
*ast_fundecl(struct ast
*ident
, struct ast
*args
, struct ast
*body
);
87 struct ast
*ast_if(struct ast
*pred
, struct ast
*then
, struct ast
*els
);
88 struct ast
*ast_int(int integer
);
89 struct ast
*ast_ident(char *ident
);
90 struct ast
*ast_list(struct ast
*llist
);
91 struct ast
*ast_nil();
92 struct ast
*ast_return(struct ast
*rtrn
);
93 struct ast
*ast_stmt_expr(struct ast
*expr
);
94 struct ast
*ast_unop(enum unop op
, struct ast
*l
);
95 struct ast
*ast_vardecl(struct ast
*ident
, struct ast
*l
);
96 struct ast
*ast_while(struct ast
*pred
, struct ast
*body
);
98 int ast_llistlength(struct ast
*list
);
100 void ast_print(struct ast
* ast
, int indent
, FILE *out
);
101 void ast_free(struct ast
*ast
);