Add grammar
[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
8 enum lambda_which {lambda_ident, lambda_abs, lambda_app};
9 struct lambda {
10 enum lambda_which which;
11 union {
12 struct {
13 char *ident;
14 unsigned int revision;
15 } identifier;
16 struct {
17 char *ident;
18 unsigned int revision;
19 struct lambda *expr;
20 } abstraction;
21 struct {
22 struct lambda *expr1;
23 struct lambda *expr2;
24 } application;
25 } data;
26 };
27
28 struct decllist {
29 struct decllist *next;
30 char *ident;
31 struct lambda *value;
32 };
33
34 struct lambda *make_ident(char *);
35 struct lambda *make_abstraction(char *, struct lambda *);
36 struct lambda *make_application(struct lambda *, struct lambda *);
37 void decls_free();
38 #define YYSTYPE struct lambda *
39 #endif