The interpreter design pattern