You are on page 1of 2

public abstract class ExpresieBinara extends Expresie {

private Expresie operandSt, operandDr;


public ExpresieBinara(Expresie operandSr, Expresie operandDr) {
this.operandSt = operandSr;
this.operandDr = operandDr;
}
public Expresie operandSt() {
return operandSt;
}
public Expresie operandDr() {
return operandDr;
}
}
public class Inmultire extends ExpresieBinara {
public Inmultire(Expresie st, Expresie dr) {
super(st,dr);
}
public void accept(Visitor v) {
v.visitInmultire(this);
}
}

class Suma extends ExpresieBinara {


public Suma(Expresie st, Expresie dr) {
super(st,dr);
}
public void accept(Visitor v) {
v.visitSuma(this);
}
}

public class Numar extends Expresie {


private int literal;
public Numar(int literal) {
this.literal = literal;
}
public int getNumar() {
return literal;
}
public void accept(Visitor v) {
v.visitNumar(this);
}
}

public class Parcurgere implements Visitor {


public void visitNumar(Numar n) {
System.out.print(n.getNumar());
}
public void visitSuma(Suma s) {
s.operandSt().accept(this);
s.operandDr().accept(this);
System.out.print('+');
}
public void visitInmultire(Inmultire i) {
i.operandSt().accept(this);
i.operandDr().accept(this);
System.out.print('*');
}
}

public class Main {


public static void main(String argv[]) {
Numar nr1 = new Numar(5);
Numar nr2 = new Numar(6);
Numar nr3 = new Numar(0);
Suma sum = new Suma(nr1,nr2);
Inmultire prod = new Inmultire(sum,nr3);
prod.accept(new Parcurgere());
}
}

You might also like