Mini C Compiler lexical analysis syntax analysis semantic analysis intermediate tree generation destination code generation register allocation