diff options
author | Ting-Wei Lan <lantw44@gmail.com> | 2015-10-21 15:49:44 +0800 |
---|---|---|
committer | Ting-Wei Lan <lantw44@gmail.com> | 2015-10-21 15:49:44 +0800 |
commit | 40b7d032402279a5758415a9c98afa4892d76ebf (patch) | |
tree | 17d8f849383b04e70bc9a73b6c50514a88cdb34d | |
parent | aba262ecc68beb3dc9e7d4dda65f334fc3186a70 (diff) | |
download | compiler2015-40b7d032402279a5758415a9c98afa4892d76ebf.tar compiler2015-40b7d032402279a5758415a9c98afa4892d76ebf.tar.gz compiler2015-40b7d032402279a5758415a9c98afa4892d76ebf.tar.bz2 compiler2015-40b7d032402279a5758415a9c98afa4892d76ebf.tar.lz compiler2015-40b7d032402279a5758415a9c98afa4892d76ebf.tar.xz compiler2015-40b7d032402279a5758415a9c98afa4892d76ebf.tar.zst compiler2015-40b7d032402279a5758415a9c98afa4892d76ebf.zip |
Print sorted list of identifiers in main
-rw-r--r-- | main.c | 23 |
1 files changed, 20 insertions, 3 deletions
@@ -1,14 +1,31 @@ #include <stdio.h> +#include <stdlib.h> #include "lexer.h" #include "symbol-table.h" -int main(int argc, char **argv) -{ +static int id_compare(const void *a, const void *b) { + const symtab *aa = *(const symtab**)a; + const symtab *bb = *(const symtab**)b; + return strcmp(aa->lexeme, bb->lexeme); +} + +int main(int argc, char **argv) { if (argc > 1) yyin = fopen(argv[1], "r"); else yyin = stdin; yylex(); - printSymTab(); + + int len; + symtab **id_list = fillTab(&len); + qsort(id_list, len, sizeof(symtab*), id_compare); + + puts("Frequency of identifiers:"); + for (int i = 0; i < len; i++) { + printf("%-16s%d\n", id_list[i]->lexeme, id_list[i]->counter); + } + return 0; } + +// vim: set sw=4 ts=4 sts=4 et: |