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, context free 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 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 lex & yacc: need to be able to write basic regular expressions for lex and simple grammars for some language.