Another random and uneducated question: The inheritance here seems .. wrong. Why is an ExpressionVisitor a subclass of a BooleanExprVisitor and note vice-versa?