Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- test("candy"){
- /*
- def main(a, b){
- def f(){
- x = 2
- w = 30
- def g(){
- x = 10
- w = 15
- def h(){
- x = 100
- k()
- }
- }
- def k(){
- print(x)
- w = 99
- x + w
- }
- }
- */
- val a = new Variable("a")
- val b = new Variable("b")
- val main = new Procedure("main", Seq(a,b))
- val f = new Procedure("f", Seq(), Option(main))
- val g = new Procedure("g", Seq(), Option(f))
- val h = new Procedure("h", Seq(), Option(g))
- val k = new Procedure("k", Seq(), Option(f))
- val x = new Variable("x")
- val x_ = new Variable("x")
- val w = new Variable("w")
- main.code = block(
- call(f)
- )
- f.code = Scope(
- Seq(x, w),
- block(
- LIS(Reg.result),
- Word(encodeSigned(2)),
- write(x, Reg.result),
- LIS(Reg.result),
- Word(encodeSigned(30)),
- write(w, Reg.result),
- call(g)
- )
- )
- g.code = Scope(
- Seq(x, w),
- block(
- LIS(Reg.result),
- Word(encodeSigned(10)),
- write(x, Reg.result),
- LIS(Reg.result),
- Word(encodeSigned(15)),
- write(w, Reg.result),
- call(h),
- )
- )
- h.code = Scope(
- Seq(x),
- block(
- LIS(Reg.result),
- Word(encodeSigned(100)),
- write(x, Reg.result),
- call(k)
- )
- )
- k.code = Scope(
- Seq(),
- block(
- LIS(Reg.result),
- Word(encodeSigned(99)),
- write(w, Reg.result),
- binOp(
- read(Reg.result, x),
- plus,
- read(Reg.result, x)
- )
- )
- )
- val machineCode = compilerA6(Seq(main, f, g, h, k, A5.printProcedure))
- val finalState = A4.loadAndRun(machineCode, Word(encodeSigned(6)), debug=true)
- println(decodeSigned(finalState.reg(3)))
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement