From 2eecfca85b2b703318e57fcce33c864757b79c00 Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Tue, 13 Dec 2022 15:43:39 +0100 Subject: Basic parsing --- src/parse.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/parse.c (limited to 'src/parse.c') diff --git a/src/parse.c b/src/parse.c new file mode 100644 index 0000000..00fd498 --- /dev/null +++ b/src/parse.c @@ -0,0 +1,36 @@ +// Just for debugging purposes +// -> parses custom bruijn syntax + +#include +#include +#include + +static struct term *rec(const char **term) +{ + struct term *res = 0; + if (!**term) { + fprintf(stderr, "invalid parsing state!\n"); + } else if (**term == '[') { + (*term)++; + res = new_term(ABS); + res->u.abs.term = rec(term); + } else if (**term == '(') { + (*term)++; + res = new_term(APP); + res->u.app.lhs = rec(term); + res->u.app.rhs = rec(term); + } else if (**term >= '0' && **term <= '9') { + res = new_term(VAR); + res->u.var = **term - '0'; + (*term)++; + } else { + (*term)++; + res = rec(term); // this is quite tolerant.. + } + return res; +} + +struct term *parse(const char *term) +{ + return rec(&term); +} -- cgit v1.2.3