This is the second-year compiler group project, which was written fully in Java. Implemented a compiler for WACC language that generates assembly for the ARM11 architecture. It consists of a lever, parse, and semantic analyser in the frontend, and a code generator in the backend. The ANTLR tool is used to generate the language parser which constructs the syntax tree. Syntax and semantic checks are performed in the frontend, and error messages are generated if any syntax or semantic errors occur. The compiler is capable of analysing basic control flows, including if-else statements, for/while loops, switch statements and break/continue. It supports full pair type as well as macros.