2025 Fall Midterm Study Guide ============================= 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