1 package org.apidesign.visitor;
3 public final class Language {
6 public static abstract class Expression {
8 public abstract void visit(Visitor v);
10 public static final class Plus extends Expression {
11 private final Expression first;
12 private final Expression second;
14 public Plus(Expression first, Expression second) {
18 public Expression getFirst() { return first; }
19 public Expression getSecond() { return second; }
21 public void visit(Visitor v) { v.visitPlus(this); }
23 public static final class Number extends Expression {
24 private final int value;
25 public Number(int value) { this.value = value; }
26 public int getValue() { return value; }
28 public void visit(Visitor v) { v.visitNumber(this); }
31 public interface Visitor {
32 public void visitUnknown(Expression e);
33 public void visitPlus(Plus s);
34 public void visitNumber(Number n);