Im пытается разработать способ построения арифметических и логических выражений и выполнять операции над ними. Для структуры я использую составной шаблон, и для операций я использую шаблон посетителя.Шаблон посетителя и составной шаблон
Я немного запутался в реализации конкретного класса посетителей.
Вот как я в настоящее время сделать это:
Мой Сложение класс:
class
ADDITION
inherit
BINARY
create
make
feature -- ctor
make (left : EXPRESSION ; right : EXPRESSION)
do
left_expression := left
right_expression := right
end
feature -- deferred implementation
evaluate : INTEGER
do
Result := left_expression.evaluate + right_expression.evaluate
end
to_string : STRING
do
create Result.make_empty
end
accept (v : VISITOR)
do
v.visit_addition (Current)
end
end
Теперь шаблон посетитель, вот конкретный посетитель, который, как предполагается, оцениваемой данного выражения (я также хочу конкретный посетитель, который проверяет тип, красивую печать и т. д.).
class
EVALUATE_VISITOR
inherit
VISITOR
create
make
feature -- attribs
value : INTEGER
value_bool : BOOLEAN
feature -- ctor
make
do
end
feature
visit_addition (expression : ADDITION)
do
value := expression.left_expression.evaluate +
expression.right_expression.evaluate
end
end
Мой вопрос, оленья кожа, имеющий метод оценки в каждом из моих структур (сложение, вычитание, ОТРИЦАНИЯ и т.д.) поражение цели картины посетителей, так как все оценки должны быть сделаны в классе посетителя ? Как это реализовать в классе посетителей? Я думал, что я мог бы сделать что-то вроде:
visit_addition (expression : ADDITION)
do
value := expression.left_expression.accept(Current) +
expression.right_expression.accept(Current)
end
, но тогда я должен был бы иметь многие принимают методы в своих структурах, для арифметических выражений придется возвращать INTEGER, и для логических операций, она должна была бы вернуться BOOLEAN ,