Chapter 1: introduction - programming languages classification + what makes a successful programming language? + declarative languages (definition) - functional programming languages - logical programming languages + imperative languages (definition) - procedureal and object-oriented languages - compilation and interpretation + definition, what is the main difference between compilation and interpretation? + compilation and execution on virtual machines + compilation: static linking and dynamic linking + preprocessing: what is its relation with compilation? + IDE definition - Compiler phases and what each phase does Chapter 2: Programming language syntax - lexical analysis + tokens and regular expressions - formal definitions and how to write regular expressions for different types of tokens + regular expressions and NFA - formal definition of NFA - algorithm to convert a regular expression to the corresponding NFA. - syntax analysis + formal definition of grammar + derivation and the language recognized by a grammar + Chomsky hierarchy (grammar classification) + context free grammar - definition - writing context free grammar for a language + leftmost and rightmost derivation + parse tree + ambiguity grammar + Parsing - two general approaches + Recursive descent parsing + LL(1) Predictive parsing - Parse structure - step by step trace of the LL(1) parsing algorithm - construct LL(1) parsing table + algorithm for computing First and Follow sets + Using First and Follow sets to compute the parsing table - Sufficient and necessary conditions for a grammar to be LL(1) - Left recursion and left common factor - Algorithms to remove left recursion and left common factor Chapter 3: Names, Scopes, and Bindings - Names and issues related to names + Name and binding + potential binding time + effective of binding time + objective lifetime and binding lifetime + deactivation/reactivation of bindings - Objective storage management schemes + the memory layout of a process/program + static allocation - Example of objects with static allocation - Can static allocation be used for local variabls? + subroutine frame/activation record format + stack allocation - how is the storage for running subroutines managed? + Heap allocation - algorithms - internal and external fragmentations - block selection: first fit/best fit - garbabe collection, what does it do? - Scope: + definition + dynamic scoping and static scoping + static scope implementation - static chains for nonlocal variables + dynamic scope implementation - binding stack + module and module scopes Chapter 4: Semantic analysis - static semantics and dynamic semantics - attribute grammar + definition + writing attribute grammar - adding semantic rules on a given grammar to perform some function - writing an attribute grammar to enhance the underlying context free grammar. - building decorated parse tree (parse tree annotated with attributes) - synthesized and inherited attributes - S-attributed and L-attributed grammars