From 24eeb2825c9f755c92812ec3a257e6709ccb6576 Mon Sep 17 00:00:00 2001 From: katherine Date: Mon, 20 May 2019 19:23:47 -0700 Subject: implement analyse function anlyises the parse results to build a tree for deterministic parser generation --- src/main.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index a101849..0c0e510 100644 --- a/src/main.c +++ b/src/main.c @@ -1,12 +1,34 @@ #include "err.h" #include "opt.h" #include "parse.h" +#include "analyse.h" + +static void print_tree(struct analyse_tree_s *t) +{ + unsigned i; + if (t->is_terminal) + printf("!"); + + if (t->branch_count > 1) + printf("("); + + for (i = 0; i < t->branch_count; i++) { + printf("%c", t->branch_chars[i]); + print_tree(t->branches[i]); + if (t->branch_count > 1 && i < t->branch_count - 1) + printf("|"); + } + + if (t->branch_count > 1) + printf(")"); +} int main(int argc, char **argv) { FILE *fi = stdin; const char *finame = "stdin"; struct parse_result_s pr; + struct analyse_result_s ar; opt_parse(argc, argv); @@ -21,7 +43,15 @@ int main(int argc, char **argv) if (fi != stdin) fclose(fi); + ar = analyse(pr); + + print_tree(&ar.deftype_tree); + puts(""); + print_tree(&ar.var_tree); + puts(""); + parse_result_wipe(&pr); + analyse_result_wipe(&ar); return 0; } -- cgit v1.2.3