For MP4: Exercise 3.38: [*] Extend the lexical address translator to handle cond from exercise 3.12. This question is correctly marked with a single star. Can you write the lexical address translator in such a way, called structure-shy, that this exercise disappears? In the new solution, all you need is to add an additional alternative CondExp to Exp in the class dictionary: Exp : ... | CondExp. CondExp = "cond" List(CondElement) "end". CondElement = Exp "==>" Exp. No other changes should be needed in your structure-shy solution. In this exercise you don't have to write such a program. But you should identify constructs that your programming language should have so that you can program in a structure-shy manner. You have already seen many programming language extensions in this course. In this exercise we look for extension needed for structure-shy programming. How would you extend Scheme? How would you extend one of the languages covered in EOPL? It is important to recognize that for the lexical address computation, a CondExp is just a consumer but not a producer that influences the lexical address computation. All we need to do in the CondExp is to find all the bound variables and replace them by a lexical address. The same can be said of an application: we need to traverse to all bound variables in the rator and rand and replace them by a lexical address. Once you have a structure-shy solution, it will be easy to add new constructs to the language provided they are consumers in the sense described above. Turn in a list of constructs you would need and an informal program that uses those constructs to solve the problem in a structure-shy way. Hint: We have already done a structure-shy solution for the occurs-free problem.