Let’s match them one by one:
| (a) Lexical analysis | → (s) Finite automaton |
Lexical analysis uses finite automata for token recognition.
| (b) Code optimization | → (p) DAG’s |
DAG (Directed Acyclic Graph) is used to represent expressions and eliminate common subexpressions during optimization.
| (c) Code generation | → (q) Syntax trees |
Syntax trees are used to generate intermediate or target code.
| (d) Abelian groups | → (r) Push down automaton | ❌ (Incorrect)
Actually, Abelian groups are from Abstract Algebra, not automata. There is no direct relation to compiler design.
But among the given options, none fit perfectly — so (d) is unrelated to compiler concepts.
(a) → (s)
(b) → (p)
(c) → (q)
(d) → (r) (by elimination, though conceptually unrelated)