Flat: Print connecting lines in Term tree output
diff --git a/experiments/flat/src/Term.c b/experiments/flat/src/Term.c
index 902dfd7..359d539 100644
--- a/experiments/flat/src/Term.c
+++ b/experiments/flat/src/Term.c
@@ -52,11 +52,8 @@
*listPtr = &(**listPtr)->next;
}
-void TermPrint(Term *term, const char *input, int indent)
+void TermPrint(Term *term, const char *input, const char *indent)
{
- for (int i = 0; i < indent; i++)
- printf(" ");
-
switch (ExpressionKind(term->type)) {
case IdentExpr:
printf("%s %s\n",ExprKindAsString(ExpressionKind(term->type)),ExprIdentValue(term->type));
@@ -88,10 +85,21 @@
break;
}
+ int indentLen = strlen(indent);
+ char *nextIndent = (char *)malloc(indentLen+5);
+
for (TermList *child = term->children; child != NULL; child = child->next) {
- if (child->next != NULL)
- TermPrint(child->term,input,indent+1);
- else
- TermPrint(child->term,input,indent+1);
+ if (child->next != NULL) {
+ printf("%s|-- ",indent);
+ snprintf(nextIndent,indentLen+5,"%s| ",indent);
+ TermPrint(child->term,input,nextIndent);
+ }
+ else {
+ printf("%s\\-- ",indent);
+ snprintf(nextIndent,indentLen+5,"%s ",indent);
+ TermPrint(child->term,input,nextIndent);
+ }
}
+
+ free(nextIndent);
}
diff --git a/experiments/flat/src/Term.h b/experiments/flat/src/Term.h
index 911396a..865618e 100644
--- a/experiments/flat/src/Term.h
+++ b/experiments/flat/src/Term.h
@@ -39,4 +39,4 @@
TermList *TermListNew(Term *term, TermList *next);
void TermListPtrAppend(TermList ***listPtr, Term *term);
-void TermPrint(Term *term, const char *input, int indent);
+void TermPrint(Term *term, const char *input, const char *indent);
diff --git a/experiments/flat/src/flat.c b/experiments/flat/src/flat.c
index 51003b8..179bd9c 100644
--- a/experiments/flat/src/flat.c
+++ b/experiments/flat/src/flat.c
@@ -63,8 +63,7 @@
}
Grammar *gram = GrammarNewBuiltin();
Term *term = parse(gram,"Grammar",input,0,strlen(input));
- printf("Parsed term %p\n",term);
- TermPrint(term,input,0);
+ TermPrint(term,input,"");
free(input);
GrammarFree(gram);
}