Topics for ECS 140A Final Exam

  1. Syntax and Parsing.
    • Context-free grammars, derivations and parse trees.
    • BNFS.
    • EBNFs.
  2. Semantics and Go.
    • Scope in Go.
    • Basic types, structs, pointers, arrays, maps, and user-defined types.
    • Type conversion.
    • Interfaces.
    • Type assertions and type switches.
    • Type embeddings.
    • Closures.
  3. Functional Programming (Lisp).
    • Basic list operations (list, car, cdr, cons).
    • Predicates (atom, null, equal, etc.)
    • User-defined functions (defun).
    • Lisp constructs (cond, if, let, let*, quote, eval, funcall, apply).
    • High-order functions (mapcar, maplist, reduce).
  4. Parsing Revisited.
    • FIRST sets.
    • FOLLOW sets.
    • Parsing tables.
    • Removirig immediate left recursion.
  5. Prolog.
    • Unification.
    • Lists in Prolog.
    • Arithmetic operators, logical operators, and comparison operators.
    • Defining facts and rules.
    • Solving goals — search and backtracking, goal and rule ordering.
    • Cuts (green and red)
  6. Concurrency in Go.
    • Creating Goroutines.
    • WaitGroups (Add, Done, and Wait).
    • Channels — channel creation, send statement, receive statement, and closing channels.
    • Range statement to receive values from a channel.
    • Select statement to wait on multiple communication operations.
    • Mutex type (Lock and Unlock).
  7. Dynamic Data Race Detection.
    • Identifying data races.
    • Channels and mutexes to fix data races.
    • Happens-before analysis.
    • Lockset analysis.