there are lots of places in which the program doesn't free the allocated memory properly (esp `lexer.c`). let's fix them at some point. 