Match each stage of compiler design (List 1) with its corresponding output (List 2):
| List 1 (Stages): | List 2 (Outputs): |
| A) Lexical Analysis | 1. Enforced type rules and annotations |
| B) Syntax Analysis | 2. Tokens |
| C) Semantic Analysis | 3. Optimized Machine Code |
| D) Optimization | 4. Syntax Tree |
1
A-4, B-2, C-1, D-3
2
A-2, B-4, C-3, D-1
3
A-2, B-1, C-4, D-3
4
A-2, B-4, C-1, D-3