1 package org.apidesign.visitor;
3 public final class Language {
8 public static abstract class Expression {
13 public abstract void visit(Visitor v);
16 public static final class Plus extends Expression {
18 private final Expression first;
19 private final Expression second;
21 public Plus(Expression first, Expression second) {
26 public Expression getFirst() {
30 public Expression getSecond() {
35 public void visit(Visitor v) {
36 if (v instanceof Visitor1_0) {
37 ((Visitor1_0) v).visitPlus(this);
44 public static final class Number extends Expression {
46 private final int value;
48 public Number(int value) {
52 public int getValue() {
57 public void visit(Visitor v) {
58 if (v instanceof Visitor1_0) {
59 ((Visitor1_0) v).visitNumber(this);
66 public static final class Minus extends Expression {
67 private final Expression first;
68 private final Expression second;
70 public Minus(Expression first, Expression second) {
74 public Expression getFirst() { return first; }
75 public Expression getSecond() { return second; }
77 public void visit(Visitor v) {
78 if (v instanceof Visitor2_0) {
79 ((Visitor2_0)v).visitMinus(this);
85 // BEGIN: visitor.nonmonotonic.real
87 public final class Real extends Expression {
88 private final double value;
89 public Real(double value) {
92 public double getValue() {
95 public void visit(Visitor v)
96 // FINISH: visitor.nonmonotonic.real
102 public interface Visitor {
103 public void visitUnknown(Expression e);
105 public interface Visitor1_0 extends Visitor {
106 public void visitPlus(Plus s);
107 public void visitNumber(Number n);
110 public interface Visitor2_0 extends Visitor {
111 public void visitMinus(Minus s);
113 // BEGIN: visitor.nonmonotonic.visitor
115 public interface Visitor3_0 extends Visitor {
116 public void visitPlus(Plus s);
117 public void visitMinus(Minus s);
118 public void visitReal(Number n);
120 // END: visitor.nonmonotonic.visitor