Midterm study guide =================== The midterm will be available from 8:00am on Monday, November 1st until 7:59am on Tuesday, November 2nd. This means that it is available for 24 hours. You will have 2 hours to take the midterm. While it is available for a long time, it's best practice to take it as early as is practicable. Waiting until the last minute is a very bad strategy; if there are any technical impediments, then you may not to complete the midterm. The reason that I give you 24 hours is to give you plenty of time to solve technical problems. Here are the topics that will be covered on the midterm: Evolution of programming languages Advantages and disadvantages of assembly language; advantages and disadvantages with higher-level languages Language considerations: Expressivity Environments The spectrum from compilation through interpretation, Domain specificity Ease of learning Ease of use Ease of implementation Open source Luck (early adoption by a community, significant financial backing) Language types: Assembly Dataflow Dictionary-based Functional Imperative Logic Scripting [Object-oriented] Syntax Tokenization Regular expressions Derivations and parse trees Finite automata How to scan: one-off, formalizations such as flex Lexical errors Pragmas Parsing: Recursive descent Bottom-up parsing Language and grammar classes Allocating space Static allocation Allocation via stack(s) Allocation via heap(s) Garbage collection and its strategies Scope Static scope Dynamic scope Nesting Declarations and type inferencing Modules Symbol tables Aliasing Overloading Closures First-class values Macro expansion Separate compilation Semantics Analysis Attribute grammars Synax tree decoration Evaluating attributes and transference of semantic information through a syntax tree Action routines in attribute grammars Expression evaluation Infix, prefix, postfix notation Associativity and precedence Assignment Initialization Ordering with expressions Short-circuit evaluation Unstructured control flow Structured control flow Continuations Case/switch structures Iteration and alternation Iterators Recursion Stack issues Applicative versus normal-order evaluation Types Meaning of? Polymorphsim Orthogonality Type checking Equivalence Compatibility Inferencing Parametric polymorphism Composite types Records / structs Syntax and operations Memory layout Unions Arrays Strings Sets Pointers and recursive types Lists Files and i/o