What are the difference between interpreted and compiled languages?
What makes a compiler “good”?
What is the difference between call by value and call by reference?
What is the difference between a name, an identifier, a location, a variable, a value and a litteral?
What is the difference between a formal parameter (argument) and the actual parameter?
What is the difference between imperative and declarative programming languages?
Understand how a transition table, a transition diagram and a transition function can be mapped to each other in DFAs (cf. for instance p. 5 of those notes).
Converting NFA to DFA will not be required, I am assuming you know it from Theory and will not assess it.
Define regular expression and the |, *, - (range), ?, +, . and ϵ symbols.
Understand the difference between a token’s type and its value.
Know that comments, pre-processor directive, macros, tabs, blank, spaces, …, are not tokens.
Understand that the lexical analysis process a stream of characters to output a stream of tokens.
Have basic understanding of .lex files and how to use them.
Be able to map a simple regular expression to a DFA or NFA (you can practise on-line).
Understand that, in case of ambiguity, the longest match is used to break ties between regular expression, and then the order of the expressions.
Define context-free grammar and Backus-Naur form.
Know how to convert a regular expression with recursion into a context-free grammar, and reciprocally.
Define grammar (terminal symbol, non-terminal symbol, production rule, start symbol).
Find simple derivations and map them to parse trees.
Understand the difference between left-recursive and right-recursive regular expressions.
Be able to identify when a grammar is ambiguous.
Express e.g. the precedence or associativity of operators based on their production rules.
Understand a basic recursive descent parsing.
Understand that every ambiguous grammar is not LL(1), but that not being ambiguous does not imply being LL(1).
Understand the general version of the algorithm that remove left-recursion (you can find it, illustrated, on this page).
Understand that 1 symbol of look-ahead may not always be enough.
Be able to “simulate” the execution of an automata implementing an LR(0) algorithm on a simple grammar.
Have basic understanding of bison’s rules and structure, as well as its features (associativity, precedence, resolution of conflicts, …) and limitations (limited to LALR(1) grammar, cannot handle all ambiguous cases, …).