diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-05-06 13:57:43 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2011-05-06 13:57:43 +0300 |
commit | 352b268186931579ae8dcc6a19aaaa89547555f5 (patch) | |
tree | 6b8797f63ee7ca085526ec97c392c5f52d856109 /tests | |
parent | 52c12573a505bf29a0301a1c9553e88c3270713e (diff) | |
download | grecs-352b268186931579ae8dcc6a19aaaa89547555f5.tar.gz grecs-352b268186931579ae8dcc6a19aaaa89547555f5.tar.bz2 |
Implement tree sorting.
* src/sort.c: New file.
* src/Make.am: Add sort.c.
* tests/gcffmt.c: New option -sort.
* src/grecs-lex.l (ID): Allow for single-character identifiers.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/gcffmt.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/tests/gcffmt.c b/tests/gcffmt.c index cacf7d2..29aa69a 100644 --- a/tests/gcffmt.c +++ b/tests/gcffmt.c @@ -24,11 +24,18 @@ static void usage(const char *arg, FILE *fp, int code) { - fprintf(fp, "usage: %s [-h] [-locus] [-delim=char] [-reduce] file\n", + fprintf(fp, + "usage: %s [-h] [-locus] [-delim=char] [-reduce] [-sort] file\n", arg); exit(code); } +static int +node_ident_cmp(struct grecs_node const *a, struct grecs_node const *b) +{ + return strcmp(a->ident, b->ident); +} + int main(int argc, char **argv) { @@ -37,6 +44,7 @@ main(int argc, char **argv) struct grecs_node *tree, *node; int flags = GRECS_NODE_FLAG_DEFAULT; int reduce = 0; + int sort = 0; while (--argc) { char *arg = *++argv; @@ -46,6 +54,8 @@ main(int argc, char **argv) flags |= arg[7]; else if (strcmp(arg, "-reduce") == 0) reduce = 1; + else if (strcmp(arg, "-sort") == 0) + sort = 1; else if (strcmp(arg, "-h") == 0) usage(progname, stdout, 0); else if (arg[0] == '-') @@ -64,6 +74,8 @@ main(int argc, char **argv) exit(1); if (reduce) grecs_tree_reduce(tree, NULL); + if (sort) + grecs_tree_sort(tree, node_ident_cmp); for (node = tree; node; node = node->next) { grecs_format_node(node, flags, stdout); fputc('\n', stdout); |