A Java calculator library for exploring the visitor design pattern