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

📄 relationship.java

📁 这是简单优先文法分析的全部源代码 fejgdmuhf军宣队复活
💻 JAVA
字号:
package compiler;
import java.util.*;
public class RelationShip {

    //得到FIRST集 用哈希表保存关系
	public int[][] FirstSet(String left,String[] right,String s){
		
		int[][] first=new int[s.length()][s.length()];
		
		for(int i=0;i<right.length;i++){
			
			int x=s.indexOf(left.charAt(i));
			StringTokenizer token=new StringTokenizer(right[i],"|");
			if(token.countTokens()==1){
				int y=s.indexOf(right[i]);
				first[x][y]=1;
			}
			else{
				String[]str=new String[token.countTokens()];
				for(int j=0;j<str.length;j++){
					while(token.hasMoreTokens()){
					str[j]=token.nextToken();
					int y=s.indexOf(str[j].charAt(0));
					first[x][y]=1;
					}
				}
			}
	  }
		return first;
	}
		 
	//得到Follow集,用哈希表保存关系
	public int[][]FollowSet(String left,String[] right,String s){
		int[][] follow=new int[s.length()][s.length()];
		
		for(int i=0;i<right.length;i++){
			
			int x=s.indexOf(left.charAt(i));
			StringTokenizer token=new StringTokenizer(right[i],"|");
			if(token.countTokens()==1){
				int l=right[i].length()-1;
				int y=s.indexOf(right[i].charAt(l));
				follow[x][y]=1;
			}
			else{
				String[]str=new String[token.countTokens()];
				for(int j=0;j<str.length;j++){
					while(token.hasMoreTokens()){
					str[j]=token.nextToken();
					int l=str[j].length()-1;
					int y=s.indexOf(str[j].charAt(l));
					follow[x][y]=1;
					}
				}
			}
		}
		return follow;	 
	}

	//得到equal集
	public int[][] EqualSet(String left,String[] right,String s){
		
		int[][]equal=new int[s.length()][s.length()];
		
		for(int i=0;i<right.length;i++){
			StringTokenizer token=new StringTokenizer(right[i],"|");
			if(token.countTokens()==1)continue;
			else{
				String[]str=new String[token.countTokens()];
				for(int j=0;j<str.length;j++){
					while(token.hasMoreTokens()){
						str[j]=token.nextToken();
						for(int k=0;k+1<str[j].length();k++){
						int x=s.indexOf(str[j].charAt(k));
						int y=s.indexOf(str[j].charAt(k+1));
					    equal[x][y]=1;
					    }
					}
		        }
	        }
		}
		return equal;
	}
	
	//FIRST集的传递闭包
	public int[][] FirstSet_1(int[][]first){
		Warshall war=new Warshall();
		int[][] f=war.warshall(first);
		return f;
	}
	
	//Follow集的传递闭包
	public int[][] FollowSet_1(int[][]follow){
		Warshall war=new Warshall();
		int[][] f=war.warshall(follow);
		return f;
	}
	
	//FIRST集的自反传递闭包
	public int[][] FirstSet_2(int[][]FirstSet_1){
		for(int i=0;i<FirstSet_1.length;i++){
				if(FirstSet_1[i][i]==0)
					FirstSet_1[i][i]=1;
		}
		return FirstSet_1;
	}
	
	//Follow集的传递闭包的转置
	public int[][] FollowSet_2(int[][]FollowSet_1){
		int[][]followset_2=new int[FollowSet_1.length][FollowSet_1.length];
		for(int i=0;i<FollowSet_1.length;i++){
			for(int j=0;j<FollowSet_1.length;j++){
				followset_2[i][j]=FollowSet_1[j][i];
			}
		}
		return followset_2;
	}
	
	//矩阵相乘算法
	public int[][]Mul(int[][]m,int[][]n){
		int[][]p=new int[m.length][m.length];
		int d=0;
		for(int i=0;i<m.length;i++){
			for(int j=0;j<m.length;j++){
				d=0;
				for(int k=0;k<m.length;k++)
					d+=m[i][k]*n[k][j];
		      p[i][j]=d;
			}
		}
		return p;
	}
	
	}



⌨️ 快捷键说明

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