Type Checking Compiler Design