The checking of if then else construct can be done by a CFG..The CFG ia written as :
S --> i C t S A
A --> ; e S | epsilon
where S stands for the statement or a block of statements in case of nesting if then else block ..i for if C for condition, t for then, A handles the else part and there e stands for else and after that further if then else block may be there in case of nested if then else blocks and epsilon for termination condition..
Reference : http://infolab.stanford.edu/~ullman/ialc/spr10/slides/cfl1.pdf
Syntax of recursive programs can also be implemented by CFG by allowing self recursion [Productions of type S --> aS etc..]
The CFG for nested parantheses is also there..
But variable declared before use is something which cannot be done by a CFL ..As it is a CSL..
Hence 2) is the correct answer..