#include <stdio.h>
#include <string.h>
#include <stdlib.h>
+#include <stdbool.h>
enum lambda_which {lambda_ident, lambda_abs, lambda_app};
struct lambda {
union {
struct {
char *ident;
- unsigned int revision;
+ struct lambda *binding;
} identifier;
struct {
char *ident;
- unsigned int revision;
+ bool strict;
struct lambda *expr;
} abstraction;
struct {
struct lambda *value;
};
+struct lambda *make_lambda();
struct lambda *make_ident(char *);
-struct lambda *make_abstraction(char *, struct lambda *);
+struct lambda *make_abstraction(char *, bool, struct lambda *);
struct lambda *make_application(struct lambda *, struct lambda *);
+struct lambda *make_numeral(unsigned int i);
+struct lambda *make_bool(bool b);
#define YYSTYPE struct lambda *
#endif