Merge branch 'master' of git.martlubbers.net:lambda
[lambda.git] / print.c
1 #include <stdio.h>
2 #include "lambda.h"
3
4 void print_apos(unsigned int revision)
5 {
6 if(revision == 1)
7 printf("\'");
8 if(revision > 2){
9 printf("\"");
10 print_apos(revision - 2);
11 }
12 }
13
14 void term_print(struct lambda *t)
15 {
16 switch(t->which){
17 case lambda_ident:
18 printf("%s", t->data.identifier.ident);
19 print_apos(t->data.identifier.revision);
20 break;
21 case lambda_abs:
22 printf("(λ");
23 printf("%s", t->data.abstraction.ident);
24 print_apos(t->data.abstraction.revision);
25 putchar('.');
26 term_print(t->data.abstraction.expr);
27 putchar(')');
28 break;
29 case lambda_app:
30 putchar('(');
31 term_print(t->data.application.expr1);
32 term_print(t->data.application.expr2);
33 putchar(')');
34 break;
35 }
36 }
37
38 void lambda_print(struct lambda *t)
39 {
40 term_print(t);
41 putchar('\n');
42 }