pasberth / Macra

Macro Oriented Language
4 stars 2 forks source link

ConstExpr の cons #26

Open pasberth opened 11 years ago

pasberth commented 11 years ago

!cons のふたつのオペランドが両方とも ConstExpr な

!cons
  1
  nil

みたいのは ConstExpr のリストにしちゃっていいよね。

こういうの置換する実装したい。

pasberth commented 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 みたいにラムダにならずにインストラクションにしたかったのは こういう最適化がラムダだとかけにくいからなので、この実装はいずれしたい。

ただし急がなくていい部分なのであとで。