https://techiworks.com/interpreter-pattern/