summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTing-Wei Lan <lantw44@gmail.com>2015-10-21 15:49:44 +0800
committerTing-Wei Lan <lantw44@gmail.com>2015-10-21 15:49:44 +0800
commit40b7d032402279a5758415a9c98afa4892d76ebf (patch)
tree17d8f849383b04e70bc9a73b6c50514a88cdb34d
parentaba262ecc68beb3dc9e7d4dda65f334fc3186a70 (diff)
downloadcompiler2015-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.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/main.c b/main.c
index 2f939d9..2fd1c2c 100644
--- a/main.c
+++ b/main.c
@@ -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: