Some fast answers/hints on Problems in chapter 3 Problem 2. Probably the quickest way of finding reliable syntax for common languages like Pascal and C i3 to use my lookup320 program on the WWW: http://www.csci.csusb.edu/cgi-bin/dick/lookup320 and type in patterns like pascal.*proce and select the relevant link. A "procedure call statement"in the book is officially described as a procedure statement Similarly my syntax for C has no switch_statement but it does have a selection_statement. A float leteral is listed as a float constant... Another approach is to find the complete syntax description and use your browser's "Search in page" menu item. Problem 5. Needs a "for instance" of ambiguity....so Draw TWO trees for one sentence. No waffle! Problem 7. You can rewrite the grammar in English, but if you think a bit more you can describe the whole language in a single phrase: "one or more 'a's followed by one or more 'b's followed by one or more 'c's" Problem 10. This needs you to either know or create a trick.... it is tempting to start S ::= A B, but if you do, you loose control over the number of 'a's in A and the number of 'b's in B. You need to back out of this obvious blind alley and think of a different way of looking at the language: Look at the incomplete list below: ab aabb aaabbb aaaabbbb Does it suggest a different pattern to you? If not look at this: ab a ab b = aabb a aabb b = aaabbb a aaabbb b = ??? Does that give you a different structure for { a^n b^n | n>0}? If not here is a clue: It is a single BNF statement like this: S ::= ?? | ? S ? . Problem 12. There won't be any Pascal in the final, but could you do the virtual semantics for the equivalent C/C++ a. do-while b. for(i=start; i>=stop; i--)S ? Problem 13 is actually a simple exercise in algebra.... substitute a=2*(b-1)-1 in {a>0} to get {2*(b-1)-1>0} and simplify. Problem 14 is slightly harder. Two steps. Work BACKWARDS. Problem 15. Very tough.... in fact I'd only set this in the 600 level programming language class final. :-)