📄 scannertable.java
字号:
package scanner;
import java.util.*;
import java.io.*;
public class ScannerTable {
/**
* number of states
*/
int states;
/**
* a list to store states
*/
ArrayList stateList;
/**
* file to read from
*/
String fileName;
/**
* constructor
* @param filename file name
* @throws IOException
*/
public ScannerTable(String filename) throws IOException
{
stateList=new ArrayList();
fileName=filename;
InputStream is=new FileInputStream(filename);
String Str;
BufferedReader bfr=new BufferedReader(new InputStreamReader(is));
Str=bfr.readLine();
states=Integer.parseInt(Str);
Str=bfr.readLine();
while(Str!=null){
//String tokens[]=Str.split(" ");
stateList.add(Str);
Str=bfr.readLine();
}
}
/**
* get the next state
* @param state current state
* @param ch character
* @return an integer denoting the next state
*/
public int getState(int state,char ch)
{
int i;
for(i=0;i<stateList.size();i++){
String tokens[]=((String)stateList.get(i)).split(" ");
//System.out.println(state);
if(Integer.parseInt(tokens[0])==state){
int j;
for(j=4;j<tokens.length;j+=2){
if(tokens[j].charAt(0)==ch){
return Integer.parseInt(tokens[j+1]);
}
}
}
}
return -1;
}
/**
* whether a state is a final state
* @param state a state
* @return true if final
*/
public boolean isFinal(int state)
{
int i;
for(i=0;i<stateList.size();i++){
String tokens[]=((String)stateList.get(i)).split(" ");
if(Integer.parseInt(tokens[0])==state){
int j;
if(tokens[1].charAt(0)=='$'){
return true;
}
else
return false;
}
}
return false;
}
/**
* get the number of backtracks
* @param state a state
* @return number of backtracks
*/
public int getBackTrack(int state)
{
int i;
for(i=0;i<stateList.size();i++){
String tokens[]=((String)stateList.get(i)).split(" ");
if(Integer.parseInt(tokens[0])==state){
int j;
return Integer.parseInt(tokens[2]);
}
}
return 0;
}
/**
* get return of a state
* @param state a final state
* @return an integer denoting the return
*/
public int getReturn(int state)
{
int i;
for(i=0;i<stateList.size();i++){
String tokens[]=((String)stateList.get(i)).split(" ");
if(Integer.parseInt(tokens[0])==state){
int j;
return Integer.parseInt(tokens[3]);
}
}
return 0;
}
/**
* get name of a state
* @param state a state
* @return name of a state
*/
public String getName(int state)
{
int i;
for(i=0;i<stateList.size();i++){
String tokens[]=((String)stateList.get(i)).split(" ");
if(Integer.parseInt(tokens[0])==state){
return tokens[1];
}
}
return "$";
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -