Ans D
Why ?
A) inherited attributes can have cyclic dependencis. Due to which we can not be sure whether they can be evaluated in First Place.
So A is wrong.
B) This is wrong because even defination is is L-attributed, we need to go top down, left to right. We can not do standard bottom up Traversal.
example :-
T' -> *FT1' | T1'.inh = T'.inh * F.val -> This move is allowed in L attributed, which can not be computed using bottom up traversal. We need to go from left to right, top down. So B is out of question.
reference :- https://en.wikipedia.org/wiki/L-attributed_grammar
L-attributed grammars are a special type of attribute grammars. They allow the attributes to be evaluated in one depth-first left-to-right traversal of the abstract syntax tree. As a result, attribute evaluation in L-attributed grammars can be incorporated conveniently in top-down parsing.
A syntax-directed definition is L-attributed if each inherited attribute of Xj on the right side of
A → X1 X2 … Xn
depends only on
1.the attributes of the symbols X1, X2, …, Xj-1
2.the inherited attributes of A // This is why B is false.
C) This is wrong because it says " definition has synthesized attributes". So along with Synthesized attributes, I can even have cycles. Which makes this wrong..
So answer is One and only D. Never !