Comp 212 Homework 3
Visitor Pattern Exercises
Due Monday Oct. 4, 1999 10:00a.m. (in class)
Study the class lecture notes on the Visitor pattern and lab #4.
Define an interface called IBEVisitor
(as in Interface for Boolean Expression Visitor) with Object
as the
return type for the various visitor methods (forConstant
, etc.) in
the interface. The visitor methods should have the appropriate parameter list as
discussed in the lectures and lab #4.
In lieu of the method Constant eval (Environment env),
define the hook method Object accept
(IBEVisitor v, Object input) for ABooleanExpression
and all of its sublasses.
Define an expression evaluator as a concrete class EvalVisitor
implementing IBEVisitor
. The input Object
for the
visitor methods of EvalVisitor
should be an Environment
object, and the output Object
should be a Constant
object. Again, review lab 4 and the lecture notes if you do not understand this
pattern language.
Write appropriate test code to test your design.
if a then b else C
where a, b, and c are ABooleanExpression. It is
logically equivalent to (and (> a b) (> !a c)) and
is also called a conditional expression. Use a concrete class called If
Else to represent an if-else expression.
In the interest of brevity, the toString()
method should produce the string
(? a b c)
for the expression
if a then b else c
Modify the toString
method for Constant so
that
Constant (true
) prints as T
Constant (false
) prints as F
The toString
methods for the other classes should remain the same.
Modify IBEVisitor and EvalVisitor
to match
with the new taxonomy for ABooleanExpression
.
Write appropriate test code to test your revised design.
ABooleanExpression
and IBEVisitor
as in the preceding problem, define a visitor class ConvertVisitor
implementing IBEVisitor
that converts ABooleanExpression
objects
to pure if expresssions. A pure if expression is defined as
follows: constants are pure if expresssions, variables are pure if expressions, and if-else
are pure if expressions. The following are examples of conversion from non-pure if to pure
if. (& A B) --> (? A B F) (| A B) --> (? A T B) (> A B) --> (? A B T) !A --> (? A F T)
Write appropriate test code to test your ConvertVisitor
class.
Submit separate hard copies of the UML diagram showing the class designs in questions #1 and #3, respectively. Submit a separate hard copy for each of the above questions, and staple them separately. Attach to each question a README text explaining what the problem is about and what you have or have not done, and any other specific details that might help the grading of your question. Your paper will not be graded if you do not follow this submission instruction. Auditors for the course should not submit any paper.