Open pasberth opened 11 years ago
適当に実装してみた。
https://github.com/pasberth/Macra/tree/optimization
最適化なしだと
$ ./bin/macra --insts examples/hello.macra
Right (ConstExpr h (ArgInst (ConstExpr e (ArgInst (ConstExpr l (ArgInst (ConstExpr l (ArgInst (ConstExpr o (ArgInst (ConstExpr (ArgInst (ConstExpr w (ArgInst (ConstExpr o (ArgInst (ConstExpr r (ArgInst (ConstExpr l (ArgInst (ConstExpr d (ArgInst (ConstExpr () (ConsInst (ConsInst (ConsInst (ConsInst (ConsInst (ConsInst (ConsInst (ConsInst (ConsInst (ConsInst (ConsInst (PrintInst HaltInst)))))))))))))))))))))))))))))))))))
最適化ありでこうなる。
$ ./bin/macra --insts examples/hello.macra
Right (ConstExpr (h e l l o w o r l d) (PrintInst HaltInst))
もともと Macra のマクロが Lisp みたいにラムダにならずにインストラクションにしたかったのは こういう最適化がラムダだとかけにくいからなので、この実装はいずれしたい。
ただし急がなくていい部分なのであとで。
!cons
のふたつのオペランドが両方とも ConstExpr なみたいのは ConstExpr のリストにしちゃっていいよね。
こういうの置換する実装したい。