lariciamota

Untitled

Apr 23rd, 2018
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.65 KB | None | 0 0
  1. package br.ufpe.cin.if688.visitor;
  2.  
  3. import br.ufpe.cin.if688.ast.AssignStm;
  4. import br.ufpe.cin.if688.ast.CompoundStm;
  5. import br.ufpe.cin.if688.ast.EseqExp;
  6. import br.ufpe.cin.if688.ast.Exp;
  7. import br.ufpe.cin.if688.ast.ExpList;
  8. import br.ufpe.cin.if688.ast.IdExp;
  9. import br.ufpe.cin.if688.ast.LastExpList;
  10. import br.ufpe.cin.if688.ast.NumExp;
  11. import br.ufpe.cin.if688.ast.OpExp;
  12. import br.ufpe.cin.if688.ast.PairExpList;
  13. import br.ufpe.cin.if688.ast.PrintStm;
  14. import br.ufpe.cin.if688.ast.Stm;
  15. import br.ufpe.cin.if688.symboltable.IntAndTable;
  16. import br.ufpe.cin.if688.symboltable.Table;
  17.  
  18. public class IntAndTableVisitor implements IVisitor<IntAndTable> {
  19.     private Table t;
  20.  
  21.     public IntAndTableVisitor(Table t) {
  22.         this.t = t;
  23.     }
  24.  
  25.     @Override
  26.     public IntAndTable visit(Stm s) {
  27.         return s.accept(this);
  28.     }
  29.  
  30.     @Override
  31.     public IntAndTable visit(AssignStm s) {
  32.         this.t.id = s.getId();
  33.         this.t.value = s.getExp().accept(this).result;
  34.         IntAndTable it = new IntAndTable(this.t.value, this.t);
  35.         return it;
  36.     }
  37.  
  38.     @Override
  39.     public IntAndTable visit(CompoundStm s) {
  40.         //?
  41.         return null;
  42.     }
  43.  
  44.     @Override
  45.     public IntAndTable visit(PrintStm s) {
  46.         return s.getExps().accept(this);
  47.     }
  48.  
  49.     @Override
  50.     public IntAndTable visit(Exp e) {
  51.         return e.accept(this);
  52.     }
  53.  
  54.     @Override
  55.     public IntAndTable visit(EseqExp e) {
  56.         Table itexp = e.getExp().accept(new Interpreter(this.t));
  57.         IntAndTable it = new IntAndTable(itexp.value, itexp);
  58.         return it;
  59.     }
  60.  
  61.     @Override
  62.     public IntAndTable visit(IdExp e) {
  63.         IntAndTable it = new IntAndTable(0, t);
  64.         if (this.t.id == e.getId()){
  65.             it.result = this.t.value;
  66.         } else {
  67.             it = new IntAndTableVisitor(t.tail).visit(e);
  68.         }
  69.         return it;
  70.     }
  71.  
  72.     @Override
  73.     public IntAndTable visit(NumExp e) {
  74.         IntAndTable it = new IntAndTable(e.getNum(), t);
  75.         return it;
  76.     }
  77.  
  78.     @Override
  79.     public IntAndTable visit(OpExp e) {
  80.         int left = e.getLeft().accept(this).result;
  81.         int right = e.getRight().accept(this).result;
  82.         int op = e.getOper();
  83.         int result = 0;
  84.         switch(op) {
  85.         case 1:
  86.             result = left + right;
  87.             break;
  88.         case 2:
  89.             result = left - right;
  90.             break;
  91.         case 3:
  92.             result = left * right;
  93.             break;
  94.         case 4:
  95.             result = left / right;
  96.             break;
  97.         default: System.out.println("Op invalida");
  98.         }
  99.         IntAndTable it = new IntAndTable(result, this.t);
  100.         return it;
  101.     }
  102.  
  103.     @Override
  104.     public IntAndTable visit(ExpList el) {
  105.         return el.accept(this);
  106.     }
  107.  
  108.     @Override
  109.     public IntAndTable visit(PairExpList el) {
  110.         el.getHead().accept(this);
  111.         el.getTail().accept(this);
  112.         return null;
  113.     }
  114.  
  115.     @Override
  116.     public IntAndTable visit(LastExpList el) {
  117.         return el.getHead().accept(this);
  118.     }
  119.  
  120.  
  121. }
Add Comment
Please, Sign In to add comment