📄 constanalyse.java
字号:
package accidenceAnalyse;
import java.io.*;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ConstAnalyse implements TokenAnalyse
{
/* 常量的词法分析*/
class ConstTable {
private int ID ;
private String name ;
public ConstTable(int ID , String name) {
this.ID = ID ;
this.name = name ;
}
public int getID() {
return this.ID ;
}
public String getname() {
return this.name ;
}
}
public ConstTable getConstTable(int ID , String name) {
return new ConstTable(ID , name) ;
}
public ConstAnalyse() {
}
public ConstAnalyse(int ID , String name){
super();
this.ID = ID;
this.name = name;
}
public void analyse(String str ,ArrayList<TokenTable> list , ArrayList<String> errorList , int textLine){
Pattern pattern1 = Pattern.compile(SIXTEEN);
Matcher matcher1 = pattern1.matcher(str);
if(matcher1.find())
if(str.substring ( matcher1.start(),matcher1.end() ).equals(str)){
this.name = str;
this.ID = 3;
list.add(new TokenTable(this.ID,this.name));
insertConstTable (this.ID , this.name);
return;
}
else{
String errorStr = "第"+textLine+"行常量表示: "+str+"不合法";
errorList.add(errorStr);
return;
}
Pattern pattern2 = Pattern.compile(EIGHT);
Matcher matcher2 = pattern2.matcher(str);
if(matcher2.find())
if(str.substring ( matcher2.start(),matcher2.end() ).equals(str)){
this.name = str;
this.ID = 3;
list.add(new TokenTable(this.ID,this.name));
insertConstTable (this.ID , this.name);
return;
}
else{
String errorStr = "第"+textLine+"行常量表示: "+str+"不合法";
errorList.add(errorStr);
return;
}
Pattern pattern3 = Pattern.compile(TEN);
Matcher matcher3 = pattern3.matcher(str);
if(matcher3.find())
if(str.substring ( matcher3.start(),matcher3.end() ).equals(str)){
this.name = str;
this.ID = 3;
list.add(new TokenTable(this.ID,this.name));
insertConstTable (this.ID , this.name);
return;
}
else{
String errorStr = "第"+textLine+"行常量表示: "+str+"不合法";
errorList.add(errorStr);
return;
}
String errorStr = "第"+textLine+"行常量表示: "+str+"不合法";
errorList.add(errorStr);
}
private void insertConstTable (int ID , String name) {
constTable.add(getConstTable(ID , name));
}
public void getArrayList (String filename) {
try{
DataOutputStream out = new DataOutputStream(new FileOutputStream("accidenceAnalyse\\accidenceAnalyseTable\\"+filename+"_ConstTable.txt"));
try{
for (ConstTable c : constTable){
out.writeUTF(""+c.getID());
out.writeUTF(c.getname());
}
}catch(IOException e){}
out.close();
}catch(Exception e){}
}
private String name = "";
private int ID = 0;
static final String TEN = "\\d+\\.\\d+[Ee][\\+\\-]\\d+[fF]?|\\d+\\.\\d+[fF]?|\\-?0|[1-9]\\d*[fFUuLl]?";
static final String EIGHT = "\\-?o0+|o[1-7][0-7]*";
static final String SIXTEEN = "\\-?0x[0-9A-Fa-f]+";
private static ArrayList<ConstTable> constTable = new ArrayList<ConstTable>() ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -