diff options
author | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-06-29 06:56:11 -0400 |
---|---|---|
committer | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-09-15 23:01:27 -0400 |
commit | 762330d6fa626e57a0b350cd89680d59b3158ba6 (patch) | |
tree | b22418242490d80fd291da7ea83fbdd35355f52f /lisc/lo.c | |
parent | bab23d801eb12767f12ae8a04c24fdb29ece5aa8 (diff) | |
download | roux-762330d6fa626e57a0b350cd89680d59b3158ba6.tar.gz |
try writing a parser, painful
Diffstat (limited to 'lisc/lo.c')
-rw-r--r-- | lisc/lo.c | 37 |
1 files changed, 27 insertions, 10 deletions
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; i<nb; i++, b++) { + if (b->suc0 >= 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<nb; i++) { - printf("%02d -> [%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; } |