📄 makeanalyzetable.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 + -