interpreter pattern.