Everything exposed in this document is expected to be known.
Next: Introduction, Up: (dir) [Contents][Index]
This document, revision of April 16, 2018, details the various tasks EPITA students must complete. It is available under various forms:
• Introduction: | Why the Tiger Project? | |
• Instructions: | The rules of the game, and some tips | |
• Source Code: | How your project should look like | |
• Compiler Stages: | What must be done and when | |
• Tools: | Tips and docs on the various tools we use | |
• Appendices: | Glossary etc. | |
— The Detailed Node Listing — Introduction | ||
---|---|---|
• How to Read this Document: | What parts must be known | |
• Why the Tiger Project: | What are the goals of this pedagogic project | |
• What the Tiger Project is not: | Common misunderstandings around Tiger | |
• History: | How the Tiger Project evolved, and why | |
History | ||
• Fair Criticism: | Understand some constraints before criticizing | |
• Tiger 2002: | Tiger Project in 1999-2000 | |
• Tiger 2003: | Tiger Project in 2000-2001 | |
• Tiger 2004: | Tiger Project in 2001-2002 | |
• Tiger 2005: | Tiger Project in 2002-2003 | |
• Tiger 2006: | Tiger Project in 2003-2004 | |
• Tiger 2005b: | Tiger Project in Fall 2004 | |
• Tiger 2007: | Tiger Project in 2004-2005 | |
• Tiger 2008: | Tiger Project in 2005-2006 | |
• Leopard 2009: | Leopard Project in 2006-2007 | |
• Tiger 2010: | Tiger Project in 2007-2008 | |
• Tiger 2011: | Tiger Project in 2008-2009 | |
• Tiger 2012: | Tiger Project in 2009-2010 | |
• Tiger 2013: | Tiger Project in 2010-2011 | |
• Tiger 2014: | Tiger Project in 2011-2012 | |
• Tiger 2015: | Tiger Project in 2012-2013 | |
• Tiger 2016: | Tiger Project in 2013-2014 | |
• Tiger 2017: | Tiger Project in 2014-2015 | |
• Tiger 2018: | Tiger Project in 2015-2016 | |
• Tiger 2019: | Tiger Project in 2016-2017 | |
• Tiger 2020: | Tiger Project in 2017-2018 | |
Instructions | ||
• Interactions: | News and emails | |
• Rules of the Game: | What can and what cannot be done | |
• Groups: | How to make your own gang of four | |
• Coding Style: | Requirement over your code | |
• Tests: | Writing a test suite for your project | |
• Submission: | When and how to submit your work | |
• Evaluation: | Oral exams and grades computation | |
Tests | ||
• Writing Tests: | Advice on writing new test cases | |
• Generating the Test Driver: | Have the test driver support VPATH builds | |
Coding Style | ||
• No Draft Allowed: | The code submitted must be clean | |
• Use of Foreign Features: | Additional Coding Freedom | |
• File Conventions: | Extensions, purpose. | |
• Name Conventions: | How to name things | |
• Use of C++ Features: | Things to prefer in C++ | |
• Use of STL: | Things to prefer in STL | |
• Matters of Style: | Tastes, Colors, etc. | |
• Documentation Style: | Writing comments | |
Evaluation | ||
• Automated Evaluation: | The automated test suite | |
• During the Examination: | How not to annoy the examiners | |
• Human Evaluation: | The examiners’ job | |
• Marks Computation: | How marks are computed | |
Source Code | ||
• Given Code: | Code we provide | |
• Project Layout: | Directory structure | |
• Given Test Cases: | A Small Set of Tests to Start From | |
Project Layout | ||
• The Top Level: | Sub Tools, Tests | |
• build-aux: | Build auxiliary tools | |
• lib/: | Helping Tools | |
• lib/misc: | Miscellaneous Tools | |
• src: | The Driver | |
• src/task: | Handling Options | |
• src/parse: | Parsing | |
• src/ast: | Abstract Syntax Tree | |
• src/bind: | Binding uses to definitions | |
• src/escapes: | Computing the escaping variables | |
• src/type: | Type Checking | |
• src/object: | Handling Object-Oriented Constructs | |
• src/overload: | Function Overloading | |
• src/astclone: | Duplicating an Abstract Syntax Tree | |
• src/desugar: | Removing Syntactic Sugar | |
• src/inlining: | Inlining of function bodies | |
• src/temp: | Fresh Registers and Labels | |
• src/tree: | Intermediate Representations | |
• src/frame: | Function Arguments and Variables | |
• src/translate: | Translation to Tree | |
• src/canon: | Simplification from HIR to LIR | |
• src/assem: | Generic Assembly Support | |
• src/target: | Translation to Assem | |
• src/target/mips: | Translation to MIPS assembly | |
• src/target/ia32: | Translation to IA-32 assembly | |
• src/target/arm: | Translation to ARM assembly | |
• src/liveness: | Flowgraph and Liveness | |
• src/llvmtranslate: | Translation to LLVM IR | |
• src/regalloc: | Register Allocation | |
Compiler Stages | ||
• Stage Presentation: | The Standard Presentation of Stages | |
• PTHL (TC-0): | Naive Scanner and Parser | |
• TC-1: | Scanner and Parser | |
• TC-2: | Building the Abstract Syntax Tree | |
• TC-3: | Bindings | |
• TC-R: | Unique Identifiers | |
• TC-E: | Computing the Escaping Variables | |
• TC-4: | Type Checking | |
• TC-D: | Removing the syntactic sugar | |
• TC-I: | Function inlining | |
• TC-B: | Array bounds checking | |
• TC-A: | Overloading Functions | |
• TC-O: | Desugaring object constructs | |
• TC-5: | Translating to the high level IR | |
• TC-6: | Translating to the low level IR | |
• TC-7: | Instruction Selection | |
• TC-8: | Liveness Analysis | |
• TC-9: | Register Allocation | |
• TC-X: | IA-32 Back End | |
• TC-Y: | ARM Back End | |
• TC-L: | LLVM IR | |
PTHL (TC-0), Naive Scanner and Parser | ||
• PTHL Goals: | What this stage teaches | |
• PTHL Samples: | See PTHL work | |
• PTHL Code to Write: | Everything! | |
• PTHL FAQ: | Questions not to ask | |
• PTHL Improvements: | Other Designs | |
TC-1, Scanner and Parser | ||
• TC-1 Goals: | What this stage teaches | |
• TC-1 Samples: | See TC-1 work | |
• TC-1 Given Code: | Explanation on the provided code | |
• TC-1 Code to Write: | Explanation on what you have to write | |
• TC-1 FAQ: | Questions not to ask | |
• TC-1 Improvements: | Other Designs | |
TC-2, Building the Abstract Syntax Tree | ||
• TC-2 Goals: | What this stage teaches | |
• TC-2 Samples: | See TC-2 work | |
• TC-2 Given Code: | Explanation on the provided code | |
• TC-2 Code to Write: | Explanation on what you have to write | |
• TC-2 FAQ: | Questions not to ask | |
• TC-2 Improvements: | Other Designs | |
TC-2 Samples | ||
• TC-2 Pretty-Printing Samples: | Output is stable and equivalent | |
• TC-2 Chunks: | Series of declarations | |
• TC-2 Error Recovery: | Parse errors do not stop the compiler | |
TC-3, Bindings | ||
• TC-3 Goals: | What this stage teaches | |
• TC-3 Samples: | See TC-3 work | |
• TC-3 Given Code: | Explanation on the provided code | |
• TC-3 Code to Write: | What you have to do | |
• TC-3 FAQ: | Questions not to ask | |
• TC-3 Improvements: | Other Designs | |
TC-R, Unique Identifiers | ||
• TC-R Samples: | See TC-R work | |
• TC-R Given Code: | Explanation on the provided code | |
• TC-R Code to Write: | What you have to do | |
• TC-R FAQ: | Questions not to ask | |
TC-E, Computing the Escaping Variables | ||
• TC-E Goals: | What this stage teaches | |
• TC-E Samples: | See TC-E work | |
• TC-E Given Code: | Explanation on the provided code | |
• TC-E Code to Write: | What you have to do | |
• TC-E FAQ: | Questions not to ask | |
• TC-E Improvements: | Other Designs | |
TC-4, Type Checking | ||
• TC-4 Goals: | What this stage teaches | |
• TC-4 Samples: | See TC-4 work | |
• TC-4 Given Code: | Explanation on the provided code | |
• TC-4 Code to Write: | Explanation on what you have to write | |
• TC-4 Options: | Want some more? | |
• TC-4 FAQ: | Questions not to ask | |
• TC-4 Improvements: | Other Designs | |
TC-D, Removing the syntactic sugar from the Abstract Syntax Tree | ||
• TC-D Samples: | See TC-D work | |
TC-I, Function inlining | ||
• TC-I Samples: | See TC-I work | |
TC-B, Array bounds checking | ||
• TC-B Samples: | See TC-B work | |
• TC-B FAQ: | Questions not to ask | |
TC-A, Ad Hoc Polymorphism (Function Overloading) | ||
• TC-A Samples: | See TC-A work | |
• TC-A Given Code: | Explanation on the provided code | |
• TC-A Code to Write: | What you have to do | |
TC-O, Desugaring object constructs | ||
• TC-O Samples: | See TC-O work | |
TC-5, Translating to the High Level Intermediate Representation | ||
• TC-5 Goals: | What this stage teaches | |
• TC-5 Samples: | See TC-5 work | |
• TC-5 Given Code: | Explanation on the provided code | |
• TC-5 Code to Write: | Explanation on what you have to write | |
• TC-5 Options: | Improving the IR | |
• TC-5 FAQ: | Questions not to ask | |
• TC-5 Improvements: | Other Designs | |
TC-5 Samples | ||
• TC-5 Primitive Samples: | Starting with primitive literals only | |
• TC-5 Optimizing Cascading If: | Bypassing some expressions | |
• TC-5 Builtin Calls Samples: | Calling builtins and the runtime system | |
• TC-5 Samples with Variables: | Fully featured Tiger programs | |
TC-5 Options | ||
• TC-5 Bounds Checking: | Out-of-array-bounds access detection | |
• TC-5 Optimizing Static Links: | Useless maintenance of the SL | |
TC-6, Translating to the Low Level Intermediate Representation | ||
• TC-6 Goals: | What this stage teaches | |
• TC-6 Samples: | See TC-6 work | |
• TC-6 Given Code: | Explanation on the provided code | |
• TC-6 Code to Write: | Explanation on what you have to write | |
• TC-6 Improvements: | Other Designs | |
TC-6 Samples | ||
• TC-6 Canonicalization Samples: | Get rid of eseq and bad call s
| |
• TC-6 Scheduling Samples: | Sewing basic blocks together | |
TC-7, Instruction Selection | ||
• TC-7 Goals: | What this stage teaches | |
• TC-7 Samples: | See TC-7 work | |
• TC-7 Given Code: | Explanation on the provided code | |
• TC-7 Code to Write: | Explanation on what you have to write | |
• TC-7 FAQ: | Questions not to ask | |
• TC-7 Improvements: | Other Designs | |
TC-8, Liveness Analysis | ||
• TC-8 Goals: | What this stage teaches | |
• TC-8 Samples: | See TC-8 work | |
• TC-8 Given Code: | Explanation on the provided code | |
• TC-8 Code to Write: | Explanation on what you have to write | |
• TC-8 FAQ: | Questions not to ask | |
• TC-8 Improvements: | Other Designs | |
TC-9, Register Allocation | ||
• TC-9 Goals: | What this stage teaches | |
• TC-9 Samples: | See TC-9 work | |
• TC-9 Given Code: | Explanation on the provided code | |
• TC-9 Code to Write: | Explanation on what you have to write | |
• TC-9 FAQ: | Questions not to ask | |
• TC-9 Improvements: | Other Designs | |
TC-X, IA-32 Back End | ||
• TC-X Goals: | What this stage teaches | |
• TC-X Samples: | See TC-X work | |
• TC-X Given Code: | Explanation on the provided code | |
• TC-X Code to Write: | Explanation on what you have to write | |
• TC-X FAQ: | Questions not to ask | |
• TC-X Improvements: | Other Designs | |
TC-Y, ARM Back End | ||
• TC-Y Goals: | What this stage teaches | |
• TC-Y Samples: | See TC-Y work | |
• TC-Y Given Code: | Explanation on the provided code | |
• TC-Y Code to Write: | Explanation on what you have to write | |
• TC-Y FAQ: | Questions not to ask | |
• TC-Y Improvements: | Other Designs | |
TC-L, LLVM IR | ||
• TC-L Goals: | What this stage teaches | |
• TC-L Samples: | See TC-L work | |
• TC-L Given Code: | Explanation on the provided code | |
• TC-L Code to Write: | Explanation on what you have to write | |
• TC-L FAQ: | Questions not to ask | |
• TC-L Improvements: | Other Designs | |
Tools | ||
• Programming Environment: | Requirements over your tools | |
• Modern Compiler Implementation: | The Tiger Bible | |
• Bibliography: | Recommended Readings | |
• The GNU Build System: | Creating packages | |
• GCC: | The GNU Compiler Collection | |
• Clang: | A C language family front end for LLVM | |
• GDB: | The GNU Project Debugger | |
• Valgrind: | The Ultimate Memory Debugger | |
• Flex & Bison: | Scanning and Parsing | |
• HAVM: | A Tree Interpreter
| |
• MonoBURG: | A code generator generator | |
• Nolimips: | A MIPS R2000 Simulator | |
• SPIM: | Another MIPS R2000 Simulator | |
• SWIG: | Extracting Bindings to C++ libraries | |
• Python: | An object oriented script language | |
• Doxygen: | Generating Developer Documentation | |
Modern Compiler Implementation | ||
• First Editions: | The real and only ones | |
• In Java - Second Edition: | The not so genuine one | |
The GNU Build System | ||
• Package Name and Version: | Setting the tarball name | |
• Bootstrapping the Package: | Autoconf and Automake for the dummies | |
• Making a Tarball: | All the distcheck Wisdom Revealed
| |
• Setting site defaults using CONFIG_SITE: | Automate argument passing to configure | |
Appendices | ||
• Glossary: | Some of the words used in this document | |
• GNU Free Documentation License: | Copying this document | |
• Colophon: | Version of this document | |
• List of Files: | Files used in this document | |
• List of Examples: | Examples used in this document | |
• Index: | Indices of symbols, concepts, etc. | |
Next: Introduction, Up: (dir) [Contents][Index]