Не уверен, что ты имеешь ввиду.но когда вы создаете экземпляр любого объекта, вы должны хранить данные, используя объект, используя конструктор -
public class Numbers extends Expr{
double value = 0;
public Numbers(double x){
this.value = x;
}
public Object evaluate(){
return value;
}
}
public class Start extends Stmt{
Vector<Expr> expressions = new Vector<Expr>();
public Stmt(Expr x1, Expr x2){
expressions.add(x1);
expressions.add(x2);
}
public void interpret(){
// do something with your list of 'expressions'
}
}
Объекты, которые создаются при выполнении тестовой программы, должны хранить те значения, которые передаются вконструктор, как описано выше.
например, если вы хотите иметь присваивание, должно быть сконструировано что-то вроде этого
class Assignment extends Stmt{
String lhs;
Expr rhs;
public Assignment(String lhs, Expr rhs){
this.rhs=rhs; this.lhs=lhs;
}
public void interpret(Map context){
context.put(lhs, rhs.evaluate());
}
}
class VariableExpr extends Expr{
String name;
public VariableExpr(String name){
this.name=name;
}
public Object evaluate(Map context){
return context.get(name);
}
}
Вам нужно будет иметь контекст для каждого оператора враз это истолковано.Если вам нужен глобальный контекст, просто начните с пустого HashMap
и передавайте одну и ту же карту каждому вызову методов interpret
.
Извините, если это не то, о чем вы просите!