?? 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//為文件打開數(shù)據(jù)流
{
myFileStream = new FileInputStream("newslr2.txt");
myDataStream = new DataInputStream(myFileStream);
}
catch(Exception e)
{
System.out.println("IOException1");
}
//建立slr分析表(二維數(shù)組)
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')//移進(jìn)操作
{
//判斷移進(jìn)的狀態(tài),取第一位
myDataStream.read(b,0,1);
ch = (char)b[0];
chbuffer = ch;
//取第二位
myDataStream.read(b,0,1);
ch = (char)b[0];
//要移進(jìn)的狀態(tài)號是兩位數(shù)
if(ch != ' ')
{
state = (chbuffer-'0')*10+(ch-'0');
table[j][k] = state;
}
//要移進(jìn)的狀態(tài)號是一位數(shù)
else
{
state = chbuffer-'0';
table[j][k] = state;
continue;
}
}
else if(ch == 'Z')//規(guī)約操作
{
//取出用哪條規(guī)則規(guī)約
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))//判斷規(guī)約后要移進(jìn)的狀態(tài)號是多少
{
chbuffer = ch;
//取第二位
myDataStream.read(b,0,1);
ch = (char)b[0];
//規(guī)約后要移進(jìn)的狀態(tài)號是兩位數(shù)
if(ch != ' ' && ch != '\r')
{
state = (chbuffer-'0')*10+(ch-'0');
table[j][k] = state;
}
//規(guī)約后要移進(jìn)的狀態(tài)號是一位數(shù)
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++)
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -