Match the description of several parts of a classic optimizing compiler in $\textbf{List-I}$, with the names of those parts in $\textbf{List-II}$ :
$\begin{array}{clcl} & \textbf{List-I} && \textbf{List-II} \\ \text{(a)}& \text{A part of a compiler that is responsible} & \text{(i)}& \text{Optimizer} \\ & \text{for recognizing syntax.} \\ \\ \text{(b)} & \text{A part of a compiler that takes as input a stream of} & \text{(ii)} & \text{Semantic Analysis} \\ & \text{characters and produces as output a stream of words} \\ & \text{along with their associated syntactic categories.} \\ \\ \text{(c)} & \text{A part of a compiler that understand the meanings of} & \text{(iii)} & \text{Parser} \\ & \text{variable names and other symbols and checks that they} \\ & \text{are used in ways consistent with their definitions.} \\ \\ \text{(d)} & \text{An IR-to-IR transformer that tries to improve the IR} & \text{(iv)} & \text{Scanner} \\ & \text{program in some way (Intermediate Representation).} \end{array}$
$\textbf{Code :}$
- $\text{(a)-(iii); (b)-(iv); (c)-(ii); (d)-(i)}$
- $\text{(a)-(iv); (b)-(iii); (c)-(ii); (d)-(i)}$
- $\text{(a)-(ii); (b)-(iv); (c)-(i); (d)-(iii)}$
- $\text{(a)-(ii); (b)-(iv); (c)-(iii); (d)-(i)}$