From 5392258a0dac890e98400e90c71893c3311551de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?b=CA=B0edoh=E2=82=82=20sw=C3=A9?= Date: Mon, 3 Jun 2024 22:27:50 +0500 Subject: [PATCH] Print parsed tree on run --- src/main.c | 2 ++ src/parser.h | 3 +++ src/printtree.c | 37 +++++++++++++++++++++++++++++++++++++ src/printtree.h | 2 ++ 4 files changed, 44 insertions(+) create mode 100644 src/printtree.c create mode 100644 src/printtree.h diff --git a/src/main.c b/src/main.c index 32a6db6..8e53609 100644 --- a/src/main.c +++ b/src/main.c @@ -2,6 +2,7 @@ #include #include "parser.h" +#include "printtree.h" int main(int argc, char *argv[]) { @@ -18,5 +19,6 @@ int main(int argc, char *argv[]) { fprintf(stderr, "Error during parsing.\n"); return 1; } + printtree(code,0); return 0; } diff --git a/src/parser.h b/src/parser.h index cdb773a..ac60f55 100644 --- a/src/parser.h +++ b/src/parser.h @@ -1,5 +1,7 @@ #include +#ifndef PARSER_H +#define PARSER_H enum SyntaxElementType { TOPTREE, TREE, @@ -17,3 +19,4 @@ struct SyntaxElement { }; struct SyntaxElement* parse(FILE* file); +#endif diff --git a/src/printtree.c b/src/printtree.c new file mode 100644 index 0000000..4bf73c3 --- /dev/null +++ b/src/printtree.c @@ -0,0 +1,37 @@ +#include +#include + +#include "parser.h" + +void printtree(struct SyntaxElement* syntaxtree, int depth) { + if (syntaxtree == NULL) + return; + for (int i = 1; i <= depth; i++) + putc(' ',stdout); + switch (syntaxtree->type) { + case TOPTREE: + printf("TOPTREE\n"); + printtree((struct SyntaxElement*)syntaxtree->content, depth + 1); + break; + case TREE: + printf("TREE\n"); + printtree((struct SyntaxElement*)syntaxtree->content, depth + 1); + break; + case TOKEN: + printf("TOKEN: %s\n", (char*)syntaxtree->content); + break; + case STRING: + printf("STRING: %s\n", (char*)syntaxtree->content); + break; + case NUMBER: + // TODO: printtree NUMBER + fprintf(stderr,"TODO: printtree NUMBER\n"); + exit(1); + case NONE: + printf("NONE\n"); + break; + } + if (syntaxtree->next != NULL) + printtree(syntaxtree->next, depth); + return; +} diff --git a/src/printtree.h b/src/printtree.h new file mode 100644 index 0000000..87dd6d2 --- /dev/null +++ b/src/printtree.h @@ -0,0 +1,2 @@ +#include "parser.h" +void printtree(struct SyntaxElement* syntaxtree, int depth);