AST

抽象構文木を表現したいときというのはよくあると思うんだけど,Java で具体的にどういう風に表現するのがいいのかわからない.
普段は代数的データ型とかヴァリアントとか呼ばれているもので表現しているのだけど,残念なことに Java には無い.
そういえば Scala は case class とかいうのでそのへんのギャップを埋めてるんでしたっけ…
とりあえず今は Expr というインターフェイスを定義して,それを諸々の なんちゃらExpr というようなクラスが implement して,使うときはパターンマッチ的に Object#getClass で分岐させるようなコードを書いている.
この方法のめんどくさいところは Expr のような実質タグでしかないようなものを定義しなければならなく,さらに Expr およびそれを implement するクラスたちは public である必要があって,したがってそれぞれ別のファイルに書かなければならないという…
あと Object#getClass を使っているところもなんとなく正攻法じゃない気もしていて,まぁこれは気のせいかもしれない.


そういえば先日は Java に符号無し整数が無いと初めて知ってビット演算に苦労していたりしてなかなか不便だと思った.
いろんな言語にそれぞれ不満はありつつも長所があるからなんだかんだで使ってる中,Java に関しては未だに「この点はすばらしいよね」というところが見つけられていなくてたいへん気が重い.