⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 程国磊0507.txt

📁 WHILE条件语句的翻译程序设计(LL(1)法、输出四元式)。。按照课程设计的要求
💻 TXT
📖 第 1 页 / 共 2 页
字号:
					   else istrue=true;
				   }//for
				   
			   }//if
    		else if(Character.isLetter(zhjian[0])||zhjian[0]=='_')
    		{
    			istrue=true;//开头是下划线或者字母则是合法变量
    		    break;
    		}
    		else
    		{
    			istrue=false;
    			break;
    		}   		   			
    	}//if
    	 		
    }//for
    if(istrue)
        return true;
    else return false;
    
  }

  public String allString(String arg[]){
      String s=null;
      for(int i=0;i<arg.length;i++){
              s+=arg[i];
      }
      return s;
  }
  public int isOperate(String c){
      String s[]={"+","-","*","/","=","(",")","<",">"};
      for(int i=0;i<s.length;i++){
          if(c!=null&&c.equals(s[i])){
              //System.out.println(c);
              return 1;
          }
      }
      return 0;
  }

 public void vertify(String input,String matrix[][],String s1[],String s2[],int num){
      ArrayList list=new ArrayList();
      StringTokenizer st=new StringTokenizer(input," \n\t\r;+=-*\"\'/)(}{[]<>?:!",true);
      while(st.hasMoreTokens()){
              list.add(new String(st.nextToken()));
      }
      String ci[]=new String[list.size()+1];
      for(int e=0;e<list.size();e++){
              ci[e]=list.get(e).toString();
      }
      ci[list.size()]="#";
      String stack[]=new String[8];
      for(int k=0;k<8;k++){
          stack[k]="_";
      }
      stack[0]="E";
      int point1=0;
      int point2=0;
      int length=ci.length;
      //out.append(allString(stack)+allString(ci)+"\n");

      for(int i=0;i<length-1;i++){
          if(isOperate(ci[i])==0){
              ci[i]="i";
          }
      }
      //out.append(allString(stack)+allString(ci)+"\n");
      while(true){
          if(point1==-1&&point2==length-1){
             // out.append("success"+"\n");
        	  if(num==1)
        		  tjTrue=true;
        	  else if(num==2)
        		  fz1True=true;
        	  else if(num==3)
        		  fz2True=true;
        	  else if(num==4)
        		  fz3True=true;
        	 // out.append("suceedd");
              break;
          }
          if(point1==-1){
             // out.append(allString(stack)+allString(ci)+"\n");
              //out.append("fail"+"\n");
              break;
          }
          if(stack[point1].equals(ci[point2])){
              stack[point1]="_";
              ci[point2]="_";
              point1--;
              point2++;
              //out.append(allString(stack)+allString(ci)+"\n");
              continue;
          }
          String res=getString(stack[point1],ci[point2],matrix,s1,s2);
          if(!res.equals("error")){
              if(res.equals("0")){
                  stack[point1]="_";
                  point1--;
              }
              else{
                  char tem[] = res.toCharArray();
                  int tem2 = 0;
                  int length2 = tem.length;
                  for (int j = point1+length2-1; j > point1-1; j--) {
                      stack[j] = String.valueOf(tem[tem2]);
                      tem2++;
                  }
                  point1+= length2- 1;
              }
              //out.append(allString(stack)+allString(ci)+"\n");
          }
          if(res.equals("error")){
             // out.append("the expression is error"+"\n");
              break;
          }
      }
      ///out.append("over"+"\n");
  }
 
  public String getString(String m,String n,String matrix[][],String s1[],String s2[]){
      //int h;
      for(int i=0;i<s1.length;i++)
      {
          if(s1[i].equals(m))
          {
        	 // out.append("diyi");
              for(int j=0;j<s2.length;j++)
              {
                  if(s2[j].equals(n))
                  {
                	  //out.append("dier");
                      if(matrix[i][j]!=null)
                      {
                          return matrix[i][j];
                      }
                  }
              }
          }
      }
      return "error";
  }


public boolean isZiFu(String a)
{
	if(a.equals("+")||a.equals("-")||a.equals("*")||a.equals("/"))
		return true;
	else 
		return false; 
}
public void siyuanshi()
{
	String siyuanshi[]=new String[100];
	int qianzhui=100;//前缀标志
	int siyuanjishu=2;//四元式的个数
	int t1=1;//分别用于记录规约后的非终结符
	int t2=1;
	tongji=0;//用于记录跳转时候的步骤
		
	String zhi1[]=zhuanhouzhui(fzhi1,fuzhi1,1);//返回第一个赋值语句的后缀式
	
	String tiao=String.valueOf((tongji+4+100));
	
	siyuanshi[0]="( "+tj[1]+" ,"+tj[0]+", "+tj[2]+" ,"+"102"+" )";//将条件表达式转化为四元式
	siyuanshi[1]="(-- ,-- ,-- ,"+tiao+" )";

	for(int i=0;i<temzhi1;i++)//从前往后依次将第一个赋值语句转化为四元式 
	{  
		int j=0,m=0;//用于记录找到的操作符前面的两个操作数
		if(!isZiFu(zhi1[i]))//不是操作符就往后找,直到找到操作符
		continue;
		j=i;
		while(zhi1[j-1].equals("0"))//找到一个不为0的操作数
		j--;
		String s1=zhi1[j-1];
		m=j-1;
		while(zhi1[m-1].equals("0"))
			m--;
		String s2=zhi1[m-1];
		
		siyuanshi[siyuanjishu]="( "+zhi1[i]+" ,"+s2+", "+s1+" ,T"+t1+" )";
		System.out.print(siyuanshi[siyuanjishu]);
		zhi1[m-1]="T"+t1;//将第一个操作数处置为非终结符
		zhi1[j-1]="0";//另外的操作数和操作符处置为0
		zhi1[i]="0";
		t1++;
		siyuanjishu++;	
	}//for
	
	siyuanshi[siyuanjishu]="( ="+" ,"+zhi1[0]+" ,"+" -- ,"+fzhi1[0]+" )";
	System.out.print(siyuanshi[siyuanjishu]);
	siyuanjishu++;
	siyuanshi[siyuanjishu++]="(jump,--,--,100)";
	siyuanshi[siyuanjishu++]="( --,--,--,--)";
	for(int m=0;m<siyuanjishu;m++)
	{
		out.append(qianzhui+++siyuanshi[m]+"\n");//输出四元式
	}
	
}
  
  public String[] zhuanhouzhui(String a[],int length,int biaozhi)
  {
	  String tem[]=new String[10];//存放得到的后缀表达式
	  int temzhi0=0; //记录后缀表达式的长度
	  String Stack[]=new String[length];//当作栈存放操作符
	  int pointer=-1;//栈指针
	 
	  for(int i=2;i<length;i++)
	  {    
           if(a[i].equals("("))//如果为左括号则直接入栈
           {
           Stack[++pointer]=a[i];
           }
           else if(a[i].equals(")"))//碰到右括号 则把左括号以前的都取出来放到后缀式数组
           {
            	while(pointer!=-1&&!(Stack[pointer].equals("(")))
        	    {    
        	    	   System.out.print("dfsdfsdf");
        	    	   tem[temzhi0++]=Stack[pointer--];	
        	    	   System.out.print(tem[temzhi0-1]+" !!");
 
        	    }
        	    pointer--;//丢掉左括号
        	 
           }  
          else if(a[i].equals("+")||a[i].equals("-"))//把所有的*/号放到后缀式数组
            {
        	       tongji++;
	    		   while(pointer!=-1&&(Stack[pointer].equals("*")||Stack[pointer].equals("/")))
	    		   {   
	    			   tem[temzhi0++]=Stack[pointer--];	
	    			   //System.out.print(tem[temzhi0-1]+" !!");
	    		   }    		   
	    	       Stack[++pointer]=a[i];	//然后把+-放到栈里
        	 }
           else if(a[i].equals("*")||a[i].equals("/"))//如果是*/则直接入栈
         {
        	   tongji++;
        	   
        	   Stack[++pointer]=a[i];
    		   
     	  }
           else//否则是操作数则直接入后缀表达式数组
         {
        	 tem[temzhi0++]=a[i];
        	 System.out.print(tem[temzhi0-1]+" !!");
         }	    		 
        	    	

  }
	  
	  while(pointer!=-1)//将所有的栈里面的操作符放到后缀表达式数组中
	  {
		  tem[temzhi0++]=Stack[pointer--];
		  System.out.print(tem[temzhi0-1]+" !!");
	  }
		  temzhi1=temzhi0;
	  return tem;
	 
	  
  }
	
}//cfPanel

	
	

	
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -