change printing
[lambda.git] / lambda.h
1 #ifndef LAMBDA_H
2 #define LAMBDA_H
3
4 #include <stdio.h>
5 #include <string.h>
6 #include <stdlib.h>
7 #include <stdbool.h>
8
9 enum lambda_which {lambda_ident, lambda_abs, lambda_app};
10 struct lambda {
11 enum lambda_which which;
12 union {
13 struct {
14 char *ident;
15 struct lambda *binding;
16 } identifier;
17 struct {
18 char *ident;
19 bool strict;
20 struct lambda *expr;
21 } abstraction;
22 struct {
23 struct lambda *expr1;
24 struct lambda *expr2;
25 } application;
26 } data;
27 };
28
29 struct decllist {
30 struct decllist *next;
31 char *ident;
32 struct lambda *value;
33 };
34
35 struct lambda *make_lambda();
36 struct lambda *make_ident(char *);
37 struct lambda *make_abstraction(char *, bool, struct lambda *);
38 struct lambda *make_application(struct lambda *, struct lambda *);
39 struct lambda *make_numeral(unsigned int i);
40 struct lambda *make_bool(bool b);
41 #define YYSTYPE struct lambda *
42 #endif