12263a7f20d0368e4583dc7ac37413d95d2faf8f
10 cons
,plus
,minus
,times
,divide
,modulo
,power
12 enum fieldspec
{fst
,snd
,hd
,tl
};
13 enum unop
{negate
,inverse
};
15 an_assign
, an_binop
, an_bool
, an_char
, an_cons
, an_funcall
, an_fundecl
,
16 an_ident
, an_if
, an_int
, an_list
, an_nil
, an_return
, an_stmt_expr
,
17 an_tuple
, an_unop
, an_vardecl
, an_while
60 enum fieldspec
*fields
;
67 struct ast
*an_return
;
68 struct ast
*an_stmt_expr
;
89 struct ast
*ast_assign(struct ast
*ident
, struct ast
*expr
);
90 struct ast
*ast_binop(struct ast
*l
, enum binop op
, struct ast
*tail
);
91 struct ast
*ast_bool(bool b
);
92 struct ast
*ast_char(const char *c
);
93 struct ast
*ast_cons(struct ast
*el
, struct ast
*tail
);
94 struct ast
*ast_funcall(struct ast
*ident
, struct ast
*args
);
95 struct ast
*ast_fundecl(struct ast
*ident
, struct ast
*args
, struct ast
*body
);
96 struct ast
*ast_if(struct ast
*pred
, struct ast
*then
, struct ast
*els
);
97 struct ast
*ast_int(int integer
);
98 struct ast
*ast_identc(char *ident
);
99 struct ast
*ast_ident(struct ast
*ident
, struct ast
*fields
);
100 struct ast
*ast_list(struct ast
*llist
);
101 struct ast
*ast_nil();
102 struct ast
*ast_return(struct ast
*rtrn
);
103 struct ast
*ast_stmt_expr(struct ast
*expr
);
104 struct ast
*ast_tuple(struct ast
*left
, struct ast
*right
);
105 struct ast
*ast_unop(enum unop op
, struct ast
*l
);
106 struct ast
*ast_vardecl(struct ast
*ident
, struct ast
*l
);
107 struct ast
*ast_while(struct ast
*pred
, struct ast
*body
);
109 int ast_llistlength(struct ast
*list
);
111 void ast_print(struct ast
* ast
, int indent
, FILE *out
);
112 void ast_free(struct ast
*ast
);