blob: b43e82bf497f45b6e861513078d00bb09fb8265c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
let
class Exp
{
var id : int := 0
method id_get() : int = self.id
method accept(v : Visitor) = ()
}
class AssignExp extends Exp
{
var expression : string := "var foo := bar"
method get_expression() : string = self.expression
method set_expression(new_expr : string) = (self.expression = new_expr; ())
}
class Visitor
{
method visit(e : Exp) = print_int(e.id_get())
}
class PrintVisitor extends Visitor
{
method visit(e : AssignExp) = print(e.get_expression())
}
var exp := new AssignExp
var visitor := new PrintVisitor
in
exp.accept(visitor);
exp.set_expression("var bar := foo");
exp.accept(visitor)
end
|