interpreter refactoring