zoukankan      html  css  js  c++  java
  • 编译原理虎书java版本Chapter 1


    Count.java

    public class  Count
    {
     int resolveStm(Stm stm){
      int temp1=0,temp2=0;
      if(stm.kind==1){
       temp1=resolveStm(((CompoundStm)stm).stm1);
       temp2=resolveStm(((CompoundStm)stm).stm2);
       return temp1>temp2? temp1:temp2;
      }else if(stm.kind==2){
       return resolveExp(((AssignStm)stm).exp);
      }else if (stm.kind==3){
       return countExpInExpList(((PrintStm)stm).exps);
      }else{
       return 0;
      }
     }

     int countExpInExpList(ExpList expList){
      if(expList.kind==1){
       return 1;
      }else if(expList.kind==2){
       return 1+countExpInExpList(((PairExpList)expList).tail);
      }else{
       return 0;
      }
     }

     int resolveExp(Exp exp){
      int temp1,temp2;  
      if(exp.kind==1){  
       return 0;  
       }else if(exp.kind==2){
        return 0;  
       }else if(exp.kind==3){  
        temp1 = resolveExp(((OpExp)exp).left);  
        temp2 = resolveExp(((OpExp)exp).right);  
        return temp1>temp2?temp1:temp2; 
       }else if(exp.kind==4){
        temp1=resolveStm(((EseqExp)exp).stm);
        temp2=resolveExp(((EseqExp)exp).exp);
        return temp1>temp2?temp1:temp2;
       }else{
        return 0;
        }  
       }

     int resolveExpList(ExpList expList){
      int temp1,temp2; 
      if(expList.kind==2){  
       temp1 = resolveExp(((PairExpList)expList).head);  
       temp2 = resolveExpList(((PairExpList)expList).tail);  
       return temp1>temp2?temp1:temp2;
       }else if(expList.kind==1){  
        return resolveExp(((LastExpList)expList).last);
       }else{  
         return 0;
       }
     }
    }

    Interp.java

    public class  Interp
    {
     void startinterpStm(Stm stm){
      Table t=new Table(null,0,null);
      interpStm(stm,t);
     }

     Table interpStm(Stm stm,Table t){
      if(stm.kind==1){
       Table t1=interpStm(((CompoundStm)stm).stm1,t);
       Table t2=interpStm(((CompoundStm)stm).stm2,t1);
       return t2;
      }else if(stm.kind==2){
       IntAndTable it1 = interExp(((AssignStm)stm).exp,t);
       Table t1=update(it1.t,((AssignStm)stm).id,it1.i);
       return t1;
      }else if(stm.kind==3){
       printExplist(((PrintStm)stm).exps,t);
       return t;
      }else{
       return t;
       }
     }
     
     IntAndTable interExp(Exp exp,Table t){
      if(exp.kind==1){
       int temp=lookup(t,((IdExp)exp).id);
       return new IntAndTable(temp,t);
      }else if(exp.kind==2){
       return new IntAndTable(((NumExp)exp).num,t);
      }else if(exp.kind==3){
       IntAndTable it1= interExp(((OpExp)exp).left,t);
       IntAndTable it2= interExp(((OpExp)exp).right,it1.t);
       int x1,x2,result;
       x1=it1.i;
       x2=it2.i;
       if(((OpExp)exp).oper==1){
        result=x1+x2;
       }else if(((OpExp)exp).oper==2){
        result=x1-x2;
       }else if(((OpExp)exp).oper==3){
        result=x1*x2;
       }else if(((OpExp)exp).oper==4){
        result=x1/x2;
       }else{
        result=0;
       }
       return new IntAndTable(result,t);
      }else if(exp.kind==4){
       Table t1=interpStm(((EseqExp)exp).stm,t);
       IntAndTable t3= interExp(((EseqExp)exp).exp,t1);
       return t3;
      }else{
       return new IntAndTable(0,t);
      }
     }
     
        Table update(Table t1,String i,int v){
      Table t2=new Table(i,v,t1);
      return t2;
     }

     int lookup(Table t,String key){
      if(key.compareTo(t.id)==0){
       return t.value;
      }else return lookup(t.tail,key);
     }

     void printExplist(ExpList exps,Table t){
      if(exps.kind==1){
       IntAndTable temp=interExp(((LastExpList)exps).last,t);
       System.out.println(temp.i);
      }else if(exps.kind==2){
       IntAndTable temp=interExp(((PairExpList)exps).head,t);
       System.out.print(temp.i+" ");
       printExplist(((PairExpList)exps).tail,t);
      }else return;
     }

    // IntAndTable interExpList(ExpList explist,Table t){

    // }
    }

    class Table
    {
     String id;
     int value;
     Table tail;
     Table(String i,int v,Table t){id=i;value=v;tail=t;}
    }

    class IntAndTable
    {
     int i;
     Table t;
     IntAndTable(int ii,Table tt){i=ii;t=tt;};
    }

  • 相关阅读:
    Photoshop
    你会为了钱出售自己的个人资料吗?
    [ElasticSearch] 空间搜索 (一)
    hdu1584 A strange lift (电梯最短路径问题)
    Android API Guides---OpenGL ES
    Qt 推断一个IP地址是否有效
    bzoj1670【Usaco2006 Oct】Building the Moat 护城河的挖掘
    集成学习1-Boosting
    微信开发模式之自己定义菜单实现
    人件札记:开放式的办公室环境
  • 原文地址:https://www.cnblogs.com/luosha/p/2571558.html
Copyright © 2011-2022 走看看