| 1 | Tiger.ml |
| 2 | ======== |
| 3 | A Tiger-compiler implementation in (OCa)ML |
| 4 | |
| 5 | Status |
| 6 | ------ |
| 7 | |
| 8 | ### Technical issues |
| 9 | - [-] testing framework |
| 10 | - [x] run arbitrary code snippets |
| 11 | - [x] check non-failures |
| 12 | - [x] check expected output |
| 13 | - [-] check expected exceptions |
| 14 | - [x] semant stage |
| 15 | - [ ] generalized expect `Output ('a option) | Exception of (exn -> bool)` |
| 16 | - [x] run all book test case files |
| 17 | - [-] grid view (cols: lex, pars, semant, etc.; rows: test cases.) |
| 18 | - [x] implementation |
| 19 | - [ ] refactoring |
| 20 | - [ ] Travis CI |
| 21 | |
| 22 | ### Features |
| 23 | #### Done |
| 24 | - [x] ch 1: Warm-up AST |
| 25 | - [x] ch 2: Lexer |
| 26 | - [x] ch 3: Parser |
| 27 | - [x] ch 4: AST |
| 28 | #### In-progress |
| 29 | - [-] ch 5: Semantic Analysis (type checking) |
| 30 | #### TODO (short-term) |
| 31 | - [ ] ch 6: Activation Records |
| 32 | - [ ] ch 7: Translation to Intermediate Code |
| 33 | - [ ] ch 08: Basic Blocks and Traces |
| 34 | - [ ] ch 09: Instruction Selection |
| 35 | - [ ] ch 10: Liveness Analysis |
| 36 | - [ ] ch 11: Register Allocation |
| 37 | - [ ] ch 12: Putting It All Together |
| 38 | #### TODO (long-term) |
| 39 | - [ ] ch 13: Garbage Collection |
| 40 | - [ ] ch 15: Functional Programming Languages |
| 41 | - [ ] ch 16: Polymorphic Types |
| 42 | - [ ] ch 17: Dataflow Analysis |
| 43 | - [ ] ch 18: Loop Optimizations |
| 44 | - [ ] ch 19: Static Single-Assignment Form |
| 45 | - [ ] ch 20: Pipelining and Scheduling |
| 46 | - [ ] ch 21: The Memory Hierarchy |
| 47 | #### Maybe |
| 48 | - [ ] ch 14: Object-Oriented Languages |
| 49 | |
| 50 | Implementation Notes |
| 51 | -------------------- |
| 52 | |
| 53 | ### Parser |
| 54 | |
| 55 | #### shift/reduce conflicts |
| 56 | ##### grouping consecutive declarations |
| 57 | ##### lval |
| 58 | |
| 59 | ### AST |
| 60 | |
| 61 | #### print as M-exp |
| 62 | |
| 63 | ### Machine |
| 64 | Will most-likely compile to RISC and execute using SPIM (as favored by Appel) |