From 75c40090e9302e11fc32863270360ef597a93933 Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Tue, 30 May 2023 13:10:00 +0200 Subject: Initial bootstrapping --- src/parse.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 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..18dfffe --- /dev/null +++ b/src/parse.c @@ -0,0 +1,37 @@ +// Copyright (c) 2023, Marvin Borner +// SPDX-License-Identifier: MIT + +#include + +#include +#include + +struct term *parse_blc(char **term) +{ + if (!**term) { + fatal("invalid parsing state!\n"); + } else if (**term == '0' && *(*term + 1) == '0') { + (*term) += 2; + struct term *new = term_new(ABS); + new->u.abs.term = parse_blc(term); + return new; + } else if (**term == '0' && *(*term + 1) == '1') { + (*term) += 2; + struct term *new = term_new(APP); + new->u.app.lhs = parse_blc(term); + new->u.app.rhs = parse_blc(term); + return new; + } else if (**term == '1') { + const char *cur = *term; + while (**term == '1') + (*term)++; + int index = *term - cur - 1; + (*term)++; + struct term *new = term_new(VAR); + new->u.var.index = index; + return new; + } else { + (*term)++; + return parse_blc(term); + } +} -- cgit v1.2.3