1. Read and write grammars for programming language constructs

2. Perform lexical analysis and use lexical analyzer generators

3. Perform top-down parsing, bottom-up parsing and use parser generators

4. Perform semantic analysis including static checking, intermediate representstions and attribute grammars

5. Create symbol tables

6. Perform run-time analysis

7. Perform code generation

8. Perform optimizations

9. Implement the phases of a compiler for a small recursive language