Project directory structure root/src [all your src should reside here] root/build [build files] root/test [input test files, covering all the src grammar and given optimizations] root/Makefile root/README [mention dependencies] Invoking make in root directory should build the project and generate the executable of compiler in the build directory. Name of the generated executable file should be lab1c. Following command line args should be supported by lab1c 1. lab1c [optional flags] - Compiles the given file and generates assembly file (srcfilename.s) in CWD - If the input syntax is incorrect then report proper error message on console. - It should verify the translation - Flags --disable-verification [disables verification] --disable-opt [disables optimization] 2. lab1c - performs verification of src and dst files, writes true/false on console Note: You should not have Z3 sources in your project. Build and install it separately. Building Z3: cd python scripts/mk_make.py --prefix=/usr cd build make sudo make install If working on GCL machines then use --prefix=~/z3-install. And please don't hard code your username in the Makefile.