package fr.umlv.sableccexample.expr;

import java.util.List;

import fr.umlv.sableccexample.analysis.AnalysisAdapter;
import fr.umlv.sableccexample.node.*;

public class SimpleInterpret extends AnalysisAdapter {

  private final Context context;

  public SimpleInterpret(Context context) {
    this.context=context;
  }
  
  public void caseStart(Start node) {
    node.getPBloc().apply(this);
  }

  public void caseABloc(ABloc node) {
    List<PInstr> instrs=node.getInstr();
    for(PInstr instr:instrs)
      instr.apply(this);
  }

  public void caseAEvalInstr(AEvalInstr node) {
    node.getExpr().apply(this);
    Expr expr=(Expr)getOut(node.getExpr());
    System.out.println(expr.eval());
  }
  
  public void caseAAssignInstr(AAssignInstr node) {
    node.getExpr().apply(this);
    Expr expr=Operations.assign(context,
      node.getIdentifier().getText(),
      (Expr)getOut(node.getExpr()));
    System.out.println(expr.eval());
  }

  /* À compléter... */
}
