From 762330d6fa626e57a0b350cd89680d59b3158ba6 Mon Sep 17 00:00:00 2001 From: Quentin Carbonneaux Date: Mon, 29 Jun 2015 06:56:11 -0400 Subject: try writing a parser, painful --- lisc/lo.c | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) (limited to 'lisc/lo.c') diff --git a/lisc/lo.c b/lisc/lo.c index 931385e..19b3a7d 100644 --- a/lisc/lo.c +++ b/lisc/lo.c @@ -1,8 +1,5 @@ -/*% clang -Wall -o # % - */ #include "lisc.h" - static void rporec(int *rpo, int *cnt, Blk *bs, int b) { @@ -16,7 +13,7 @@ rporec(int *rpo, int *cnt, Blk *bs, int b) } int -dorpo(Blk *bs, int nb) +rposched(Blk *bs, int nb) { static int rpo[MaxBlks]; Blk t; @@ -55,6 +52,23 @@ dorpo(Blk *bs, int nb) } +void +cfdump(FILE *f, char *pname, Blk *bs, int nb) +{ + Blk *b; + int i; + + fprintf(f, "digraph %s {\n", pname); + for (b=bs, i=0; isuc0 >= 0) + fprintf(f, "b%d -> b%d;\n", i, b->suc0); + if (b->suc1 >= 0) + fprintf(f, "b%d -> b%d;\n", i, b->suc1); + fprintf(f, "b%d [shape=box]\n", i); + } + fprintf(f, "}\n"); +} + #define LEN(a) sizeof a / sizeof a[0] Blk rpocond[] = { @@ -69,14 +83,17 @@ int main() { Blk *bs; - int i, nb; + int nb; + FILE *f; bs = rpocond; nb = LEN(rpocond); - nb = dorpo(bs, nb); - for (i=0; i [%02d, %02d]\n", i, - bs[i].suc0, bs[i].suc1); - } + + f = fopen("cf.dot", "w"); + cfdump(f, "bef", bs, nb); + nb = rposched(bs, nb); + cfdump(f, "aft", bs, nb); + fclose(f); + return 0; } -- cgit 1.4.1