#include <stdio.h>
#include "lambda.h"
+#define PRINT_ABS(t) {\
+ if(t->data.abstraction.strict)\
+ putchar('!');\
+ printf("%s", t->data.abstraction.ident);\
+ print_apos(t->data.abstraction.revision);\
+ }
+
+
void print_apos(unsigned int revision)
{
if(revision == 1)
}
}
-void print_ident(char *ident, unsigned int revision)
-{
- printf("%s", ident);
- while(revision > 2){
- putchar('\"');
- revision -= 2;
- }
- if(revision == 1)
- putchar('\'');
-}
-
void term_print(struct lambda *t, struct lambda *mark)
{
if(t == mark)
putchar('|');
switch(t->which){
case lambda_ident:
- print_ident(t->data.identifier.ident, t->data.identifier.revision);
+ printf("%s", t->data.identifier.ident);
+ print_apos(t->data.identifier.revision);
break;
case lambda_abs:
printf("λ");
- print_ident(t->data.abstraction.ident, t->data.abstraction.revision);
+ PRINT_ABS(t);
while((t = t->data.abstraction.expr)->which == lambda_abs){
putchar(' ');
- print_ident(t->data.abstraction.ident, t->data.abstraction.revision);
+ PRINT_ABS(t);
}
putchar('.');
term_print(t, mark);
void lambda_print(struct lambda *t, struct lambda *mark)
{
term_print(t, mark);
- putchar('\n');
+ printf(";\n");
}