From 05f3cde3e7924c9ffcc1937661b3cc290d89c11a Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Sat, 7 Sep 2024 17:53:27 +0200 Subject: Initial bootstrap --- src/print.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/print.c (limited to 'src/print.c') diff --git a/src/print.c b/src/print.c new file mode 100644 index 0000000..b6493e1 --- /dev/null +++ b/src/print.c @@ -0,0 +1,52 @@ +// Copyright (c) 2024, Marvin Borner +// SPDX-License-Identifier: MIT + +#include + +#include +#include + +void print_bruijn(Term *term) +{ + switch (term->type) { + case ABS: + fprintf(stderr, "["); + print_bruijn(term->u.abs.body); + fprintf(stderr, "]"); + break; + case APP: + fprintf(stderr, "("); + print_bruijn(term->u.app.lhs); + fprintf(stderr, " "); + print_bruijn(term->u.app.rhs); + fprintf(stderr, ")"); + break; + case IDX: + fprintf(stderr, "%lu", term->u.index); + break; + default: + fatal("invalid type %d\n", term->type); + } +} + +void print_blc(Term *term) +{ + switch (term->type) { + case ABS: + printf("00"); + print_blc(term->u.abs.body); + break; + case APP: + printf("01"); + print_blc(term->u.app.lhs); + print_blc(term->u.app.rhs); + break; + case IDX: + for (size_t i = 0; i <= term->u.index; i++) + printf("1"); + printf("0"); + break; + default: + fatal("invalid type %d\n", term->type); + } +} -- cgit v1.2.3