====== Formal Languages and Compilers ====== ---- ===== News ===== * **July 3rd, 2016**: The exam on July 5th has been anticipated to 9.30am * **May 22nd, 2016**: On Wednesday 24th an additional lesson is planned from 9am to 11am, in place of the Software Engineering II course. * **May 2nd, 2016**: There will be **no lesson in the week May 9-13**. In the same days I'll be attending the Learn PAd EU research project periodic meeting. * **April 19th, 2016**: Tomorrow Wednesday April 20th starting from 3pm I need to attend at the "Consiglio di Scuola". The lesson will not be held * **April 12th, 2016**: Tomorrow Wednesday April 13th there will be a session of thesis defences. The lesson will not be held * **March 18th, 2016**: The lesson of Wednesday March 23rd is cancelled. Next lesson after the Easter period will be on Wednesday March 30th. * **March 2nd, 2016**: From March 8th lessons will be held in room D.M.Ritchie * **February 27th, 2016**: As per request of some student, on Wednesday March 2nd there will be no lesson * **February 22nd, 2016**: There will be no lessons in the week April 4th - April 8th * **February 22nd, 2016**: The page is on-line ---- ===== General Information ===== **Teacher**: * [[http://www.cs.unicam.it/polini|Andrea Polini]] **Lessons schedule**: * Tuesday 11am - 1pm * Wednesday 3pm - 5 pm **Office Hours **: * Tuesday 5pm - 6pm (better if you announce yourself via e-mail) ---- ===== Course Objectives ===== The course intends to provide to the students the theoretical background to understand how a language compiler can be built. The general architecture of a compiler is presented and which are the tools and mechanisms (theoretical and practical) need in order to derive a real compiler. Competences are put in place with the construction of a simple compiler for a simple language. ---- ===== Course Contents ===== The course will delve into the following topics (for students convenience chapters in the textbook are indicated within parenthesis) * **General Introduction to Compilers construction** [ALSU - Ch.1] * Structure of a compiler * Evolution of programming languages * Generalities on programming languages * **Lexical Analysis** [ALSU - Ch.3] * Lexical analysis objectives and issues * Tokens, patterns, and lexemes * Regular expressions and definitions * Finite Automata * DFA - Deterministic Finite Automata * NFA - Non Deterministic Finite Automata * From RegExp to NFA * From NFA to DFA * DFA Minimization * Recongnition of tokens * **Syntax Analysis** [ALSU - Ch.4] * Introduction to CF grammars and Push-Down automata * Parse tree and derivations * Ambiguity * Top-down parsing * Left recursion and left factoring * Recursive descent parsing * FIRST and FOLLOW sets * Non recursive predictive parsing * Error recovery in predictive parsing * Bottom-up parsing * Reductions, Handles * Shift-reduce parsing * LR(0) automaton and table * SLR table * LR(1) automaton and table * LALR table * Error recovery in LR parsing * **Syntax-Directed Translation ** [ALSU - Ch.5 (section 5.5 excluded)] * Syntax-Directed Definitions * Inherited and Synthesized Attributes * Dependency Graphs * Syntax-Directed Translation Schemes * **Intermediate Code Generation** [ALSU - Ch. 6 (sections 6.7,6.8,6.9 excluded) * Three-Address Code * Type Checking * Control Flow Translation schemes ---- ===== Study Material ===== **Course Slides** * {{:didattica:magistrale:flc:ay_1516:01_introduzione.pdf|Course Introduction}} - March 1st * {{:didattica:magistrale:flc:ay_1516:lexicalanalysis.pdf|Lexical Analysis}} - March 8th, 9th, 15th * {{:didattica:magistrale:flc:ay_1516:syntaxanalysis.pdf|Syntax Analysis}} - March 16th, 22nd, 30th, April 12th, 19th, 26th, 27th, May 3rd, 4th. * {{:didattica:magistrale:flc:ay_1516:semanticanalysis1.pdf|Semantic Analysis I}} - May 17th, 24th, 25th * {{:didattica:magistrale:flc:ay_1516:semanticanalysisii.pdf|Semantic Analysis II}} - May 31st, June 7th * {{:didattica:magistrale:flc:ay_1516:esercizi.pdf|Exercises}} - June 1st, 8th **Textbooks** * [ALSU] Alfred V. Aho, Monica S. Lam, Ravi Sethi and Jeffrey D. Ullman, [[http://dragonbook.stanford.edu/|Compilers -- Principles, Techniques and Tools]], 2nd Edition, Addison-Wesley, 2007. * [TP] Terence Parr [[https://pragprog.com/book/tpantlr2/the-definitive-antlr-4-reference|The Definitive ANTLR4 Reference]], The Pragmatic Programmers, 2012. ---- ===== Exams ===== **Exam Dates A.Y. 2015/2016** * June 14th and July 5th, 2016 * September 6th and 27th, 2016 * February 7th and 21st, 2017 **Exam rules**: The Exam foresees two different papers: * Written paper – on the date fixed for the exam the students will be required to solve some theoretical and practical exercises. * Oral paper – the student that have passed the previous paper ** Results ** Results for the written paper of xxx (in red marks below the threshold): ^ Matr. N. ^ Ex.1 ^ Ex.2 ^ Ex.3 ^ Ex.4 ^ Mark ^ | | | | | | | * Solutions * {{:didattica:magistrale:flc:ay_1516:20160614_solution.pdf|June 14th, 2016}} * {{:didattica:magistrale:flc:ay_1516:20160705_solution.pdf|July 5th, 2016}}