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

📄 makeanalyzetable.java

📁 编译器
💻 JAVA
字号:
package compiler;

import java.io.DataInputStream;
import java.io.FileInputStream;

public class MakeAnalyzeTable 
{
	public char cha = '0';
	public void makeAnalyzetable(int[][] table) 
	{
		int state = 0;
		int formula = 0;
		byte b[] = new byte[1];
		char ch = '?';
		char chbuffer = '?';
		FileInputStream myFileStream = null;
		DataInputStream myDataStream = null;
		
		try//为文件打开数据流
		{
			myFileStream = new FileInputStream("newslr2.txt");
			myDataStream = new DataInputStream(myFileStream);
		}
		catch(Exception e)
		{
			System.out.println("IOException1");
		}
		
		//建立slr分析表(二维数组)
		for(int j = 0 ; j < table.length ; j++)
		{
			for(int k = 0 ; k < table[0].length ; k++)
			{
				try
				{
					myDataStream.read(b,0,1);
					ch = (char)b[0];
					
					if(ch == 'Y')//移进操作
					{
						//判断移进的状态,取第一位
						myDataStream.read(b,0,1);
						ch = (char)b[0];
						chbuffer = ch;
						
						//取第二位
						myDataStream.read(b,0,1);
						ch = (char)b[0];
						
						//要移进的状态号是两位数
						if(ch != '	')
						{
							state = (chbuffer-'0')*10+(ch-'0');
							table[j][k] = state;
						}
						
						//要移进的状态号是一位数
						else
						{
							state = chbuffer-'0';
							table[j][k] = state;
							continue;
						}
					}
					
					else if(ch == 'Z')//规约操作
					{
						//取出用哪条规则规约
						myDataStream.read(b,0,1);
						ch = (char)b[0];
						switch(ch)
						{
						  case'A':formula = 50;break;
						  case'B':formula = 51;break;
						  case'C':formula = 52;break;
						  case'D':formula = 53;break;
						  case'E':formula = 54;break;
						  case'F':formula = 55;break;
						  case'G':formula = 56;break;
						  case'H':formula = 57;break;
						  case'I':formula = 58;break;
						  case'J':formula = 59;break;
						  case'K':formula = 60;break;
						  case'L':formula = 61;break;
						  case'M':formula = 62;break;
						  case'N':formula = 63;break;
						  case'O':formula = 64;break;
						  case'P':formula = 65;break;
						  case'Q':formula = 66;break;
						  case'R':formula = 67;
						}
						table[j][k] = formula;
					}
					
					else if(ch == 'X')//接受操作
					{
						table[j][k] = 200;
					}
					
					else if(ch == '#')//空操作
					{
						table[j][k] = 0;
					}
					
					else if(ch == '\n')
					{
						k--;
						continue;
					}
                    
					else if(Character.isDigit(ch))//判断规约后要移进的状态号是多少
					{
						chbuffer = ch;
						
						//取第二位
						myDataStream.read(b,0,1);
						ch = (char)b[0];
						
						//规约后要移进的状态号是两位数
						if(ch != '	' && ch != '\r')
						{
							state = (chbuffer-'0')*10+(ch-'0');
							table[j][k] = state;
						}
						
						//规约后要移进的状态号是一位数
						else
						{
							state = chbuffer-'0';
							table[j][k] = state;
							//if_read_next = false;
							continue;
						}
					}
					
					//过滤TAB键
					myDataStream.read(b,0,1);
					ch = (char)b[0];
				}//try
				catch(Exception e)
				{
					System.out.println("IOException2");
				}
			}//for(int k = 0 ; k < 24 ; k++)
		}//for(int j = 0 ; j < 46 ; j++)
	}
}

⌨️ 快捷键说明

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