abstract tree compiler