implement mini ast