Advertisement
lariciamota

Untitled

Apr 23rd, 2018
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.92 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. import br.ufpe.cin.if688.visitor.IntAndTableVisitor;
  18.  
  19. public class Interpreter implements IVisitor<Table> {
  20.     /*
  21.      * você deve "interpretar" o código usando Java,
  22.      * utilizando as classes Table e IntAndTable
  23.      * como tabelas de símbolos auxiliares;
  24.      */
  25.     //a=8;b=80;a=7;
  26.     // a->7 ==> b->80 ==> a->8 ==> NIL
  27.     private Table t;
  28.    
  29.     public Interpreter(Table t) {
  30.         this.t = t;
  31.     }
  32.  
  33.     @Override
  34.     public Table visit(Stm s) {
  35.         this.t = s.accept(this);
  36.         return t;
  37.     }
  38.  
  39.     @Override
  40.     public Table visit(AssignStm s) {
  41.         IntAndTable it = s.getExp().accept(new IntAndTableVisitor(t));
  42.         this.t = new Table(s.getId(), it.result, it.table);
  43.         return t;
  44.     }
  45.  
  46.     @Override
  47.     public Table visit(CompoundStm s) {
  48.         // a = 512+3; print(a)
  49.         //AssignStm --> resultado vai produzir uma tabela { a ==> 515 }
  50.         s.getStm1().accept(this);
  51.         s.getStm2().accept(this);
  52.         return t;
  53.     }
  54.    
  55.     public Table printaux(Exp e){
  56.         IntAndTable it = e.accept(new IntAndTableVisitor(t));
  57.         this.t = it.table;
  58.         System.out.println(it.result);
  59.         return t;
  60.     }
  61.    
  62.     public void aux(ExpList el){
  63.         if(el instanceof LastExpList){
  64.             LastExpList le = (LastExpList) el;
  65.             Exp e = le.getHead();
  66.             printaux(e);
  67.         } else {
  68.             PairExpList pe = (PairExpList) el;
  69.             Exp e = pe.getHead();
  70.             printaux(e);
  71.             aux(pe.getTail());
  72.         }
  73.     }
  74.  
  75.     @Override
  76.     public Table visit(PrintStm s) {
  77.         ExpList el = s.getExps();
  78.         aux(el);
  79.         return t;
  80.     }
  81.  
  82.     @Override
  83.     public Table visit(Exp e) {
  84.         this.t = e.accept(this);
  85.         return t;
  86.     }
  87.  
  88.     @Override
  89.     public Table visit(EseqExp e) {
  90.         Table tb = e.getStm().accept(this);
  91.         IntAndTable it = e.getExp().accept(new IntAndTableVisitor(tb));
  92.         this.t.value = it.result;
  93.         return t;
  94.     }
  95.  
  96.     @Override
  97.     public Table visit(IdExp e) {
  98.         this.t.id = e.getId();
  99.         return t;
  100.     }
  101.  
  102.     @Override
  103.     public Table visit(NumExp e) {
  104.         this.t.value = e.getNum();
  105.         return t;
  106.     }
  107.  
  108.     @Override
  109.     public Table visit(OpExp e) {
  110.         IntAndTable it = e.accept(new IntAndTableVisitor(t));
  111.         t.value = it.result;
  112.         return t;
  113.     }
  114.  
  115.     @Override
  116.     public Table visit(ExpList el) {
  117.         this.t = el.accept(this);
  118.         return t;
  119.     }
  120.  
  121.     @Override
  122.     public Table visit(PairExpList el) {
  123.         el.getHead().accept(this);
  124.         el.getTail().accept(this);
  125.         return t;
  126.     }
  127.  
  128.     @Override
  129.     public Table visit(LastExpList el) {
  130.         el.getHead().accept(this);
  131.         return t;
  132.     }
  133.  
  134.  
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement