variable expression ast builder with tests