www.pudn.com > YUCEFENXI.rar > YUCEFENXI.java


/*********************************************************************** 
*文件名:YUCEFENXI.java 
*文件描叙:预测分析程序.分析如下方法: 
* E ::=T|E+T|E-T 
        T ::=F|T*F|T/F 
        F ::=P|(E) 
        P ::=G 
        G ::= i 
*为了方便把G ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z 
*简化为G::= i 
*输出:输出该文法的LL(1)分析表 
*输入:每行输入一个表达式 
*输出:输出该表达式的预测分析步骤 
************************************************************************/ 
import java.io.*;  
import java.util.*; 
public class YUCEFENXI        
{public static String[] wenfa={"E->TA","A->+TA","A->-TA","A->ε","T->FB","B->*FB","B->/FB","B->ε","F->P","F->(E)","P->G","G->i"}; 
  static String s1; 
  static String s2;   
  static String[] followE={")","#"}; //下面定义E,E1,T,T1,F,P,G的FOLLOW集 
  static String[] followE1={")","#"}; 
  static String[] followT={"+","-","#"}; 
  static String[] followT1={"+","-","#"}; 
  static String[] followF={"*","/","#"}; 
  static String[] followP={"*","/","#"}; 
  static String[] followG={"*","/","#"}; 
  static String[] firstTE1={"(","i"}; //下面定义各个产生式的first集 
  static String[] firstTE2={"+"}; 
  static String[] firstTE3={"-"}; 
  static String[] firstFT1={"(","i"}; 
  static String[] firstFT2={"*"}; 
  static String[] firstFT3={"/"}; 
  static String[] firstP={"i"}; 
  static String[] firstE1={"("}; 
  static String[] firstG={"i"}; 
  static String[] firsti={"i"}; 
   static String Sender; 
  static String biao[][]={{" ","i","+","-","*","/","(",")","#"}, 
                         {"E","    ","    ","    ","    ","    ","    ","    "," "}, 
                         {"A","    ","    ","    ","    ","    ","    ","    ","    "}, 
                         {"T","    ","    ","    ","    ","    ","    ","    ","    "}, 
                         {"B","    ","    ","    ","    ","    ","    ","    ","    "}, 
                         {"F","    ","    ","    ","    ","    ","    ","    ","    "}, 
                         {"P","    ","    ","    ","    ","    ","    ","    ","    "}, 
                         {"G","    ","    ","    ","    ","    ","    ","    ","    "}}; 
  //********************************************************************************************************** 
  public static void main(String[] args)throws IOException 
{   
	System.out.println("要分析的文法为:");//输出文法信息 
	System.out.println("E->T|E+T|E-T"); 
	System.out.println("T->F|T*F|T/F"); 
	System.out.println("F->P|(E)"); 
	System.out.println("P->G"); 
	System.out.println("G->i"); 
	System.out.println("该文法的LL(1)分析表为:"); 
    String sre=new String("该文法的LL(1)分析表是"); 
    String sr; 
	JIANBIAO(); 
	int len=biao.length;        
	for(int s=0;sb加至M[A,a]中,若ε属于first(b),且c属于FOLLOW(A)把A->b加至M[A,a]中 
//******************************************************************************************************* 
public static void JIANBIAO()                 //构造分析表 
{ 
 
	{for(int i=0;i3;t--) 
	  	  {  
	  	  	str3=str2.substring(t-1,t); 
	  	    if(str3.equals(" ")) 
	  	     { 
	  	     	System.out.println("error"); //如果对应的产生式是空字,则输出error 
	  	    	 break p1;  
	  	    	  }      
	  	   if(!str3.equals("ε"))       //如果对应的字符不是ε,则把对应的字符串反序输入符号栈 
	  	   { 
	  	  	fuhao=fuhao.concat(str3); 
	  	  	   }	  	 
	  	  	 }	 
	  	  con++; 
	  	  
	  	  System.out.print(con+"\t"+"\t"+fuhao+"\t"+"\t"+str4+"\t"+"\t"+str2); 
          System.out.print("\n"); 
           	 	 	    	       
	    	 } 
	     len2=fuhao.length(); 
	     str1=fuhao.substring(len2-1,len2); 
	     fuhao=fuhao.substring(0,len2-1);      
	    	 } 
	    p2:while(str1.equals("#"))       //如果符号栈的字符与输入串里的字符都等于#时,输出accept 
	    {if(str1.equals("#")) 
	     { if(str.equals("#")) 
	     { 
	     	System.out.println("accept");   
	        break p2; 
	           }  
	         
	         } 
	    	} 
	    	} 
         }