diff options
[CI] Added docker setup
1 files changed, 53 insertions, 0 deletions
| -rw-r--r-- | Year 3/Compilers, Introduction/coolc-spim/my-code/list.cl | 53 |
diff --git a/Year 3/Compilers, Introduction/coolc-spim/my-code/list.cl b/Year 3/Compilers, Introduction/coolc-spim/my-code/list.cl new file mode 100644 index 0000000..374e600 --- /dev/null +++ b/Year 3/Compilers, Introduction/coolc-spim/my-code/list.cl @@ -0,0 +1,53 @@ +(* Although this is written from scratch, it is hard to end up with something + much different from what is presented in the original Stanford cs143 course. + So credit for this code goes to Alex Aiken, creator of that course. *) +class List { + item: Object; + next: List; + + init(i: Object, n: List): List { + { + item <- i; + next <- n; + self; + } + }; + + flatten(): String { + let string: String <- + case item of + i: Int => (new A2I).i2a(i); + s: String => s; + o: Object => { abort(); ""; }; + esac + in + if isvoid next + then string + else string.concat(next.flatten()) + fi + }; +}; + +class Main inherits IO { + main(): Object { + let hello: String <- "Hello ", + world: String <- "World! ", + answer: Int <- 42, + newline: String <- "\n", + -- if abort is added to the list, program will abort + abort: Object <- new Object, + nil: List, + list: List <- (new List).init(hello, + (new List).init(world, + (new List).init(answer, + (new List).init(newline, + -- (new List).init(abort, + nil) + --) + ) + ) + ) + in + out_string(list.flatten()) + }; +}; |
