program-based interpreter