This is intended to give you a sense of what I think is important from the course so far, and what I will be thinking of when creating the exam. I hate disclaimers, but here are some anyway. This is not a contract. I may have inadvertently left something off this list that ends up in an exam question. I make no guarantees that the exam will be 100% limited to items listed below. Moreover, I will not be able to test all of this material given the time limitations of the exam. I will have to pick and choose some subset of it. You are permitted one 8.5 x 11 sheet of paper with notes (both sides) for use as a reference during the exam. Here are the specifics: Students should be able to... Be able to produce FIRST, FOLLOW, and PREDICT sets for a particular grammar. Be able to demonstrate how this information would be used in coding a parser. Write C functions on paper to do specified tasks, or answer questions about provided code. Specifically, students should be able to successfully make use of: - pointers, addresses, arrays, *, &, -> - allocating and deallocating memory: malloc, free - programming data structures without objects: how to structure with functions, return values, etc. Evaluate lambda calculus expressions, and define well-known logical or arithmetic operations on Church booleans or numerals. Distinguish between value model and reference model for variable assignments, identify which languages we have studied obey which model, and identify advantages and disadvantages of each approach. Define, explain, compare, and contrast dangling pointer strategies such as tombstones and locks-and-keys; and garbage collection techniques, such as reference counters, mark and sweep, stop and copy, and generational approaches. Be able to distinguish among stack,and heap objects. For a known language (Scheme, Python, C), be able to identify whether a particular language characteristic is a stack or heap object. Be able to discuss or answer questions about how such objects are implemented.