sb.append(ch[i]);
i++;
}
i--;
code=reserve(sb);
if(code==0){
statusArea.append("<1,"+insertId(sb)+">\n");
}else{
statusArea.append("<"+code+","+insertId(sb)+">\n");
}
clear();
}elseif(isDigit(ch[i])){
while(isDigit(ch[i])){
sb.append(ch[i]);
i++;
}
i--;
statusArea.append("<2,"+insertConst(sb)+">\n");
clear();
}elseif(ch[i]=='+')
statusArea.append("<3,+>\n");
elseif(ch[i]=='-')
statusArea.append("<4,->\n");
elseif(ch[i]=='*')
statusArea.append("<5,*>\n");
elseif(ch[i]=='/')
statusArea.append("<6,/>\n");
elseif(ch[i]=='=')
statusArea.append("<7,=>\n");
elseif(ch[i]==',')
statusArea.append("<8,,>\n");
elseif(ch[i]=='(')
statusArea.append("<9,(>\n");
elseif(ch[i]==')')
statusArea.append("<10,)>\n");
elseif(ch[i]=='{')
statusArea.append("<11,{>\n");
elseif(ch[i]=='}')
statusArea.append("<12,}>\n");
elseif(ch[i]=='[')
statusArea.append("<13,[>\n");
elseif(ch[i]==']')
statusArea.append("<14,]>\n");
elseif(ch[i]==';')
statusArea.append("<15,;>\n");
elseif(ch[i]=='.')
statusArea.append("<16,.>\n");
else
procError(i);
}
}
privatevoidclear(){
this.sb=newStringBuffer("");
}
privatevoidprocError(inti){
statusArea.append(ch[i]+"不在符号表中!
\n");
}
privateStringinsertConst(StringBuffersb){
Stringcontent=newString(sb);
returncontent;
}
privateStringinsertId(StringBuffersb){
Stringcontent=newString(sb);
returncontent;
}
privateintreserve(StringBuffersb){
Stringcontent=newString(sb);
PropertieschartPro=newProperties();
Filefile=newFile("Chart.properties");
LexerUtil.loadPro(chartPro,file);
if(chartPro.containsKey(content)){
returnInteger.parseInt(chartPro.getProperty(content));
}
return0;
}
privatebooleanisDigit(charch){
if(String.valueOf(ch).isEmpty()){
returnfalse;
}elseif(ch>='0'&&ch<='9'){
returntrue;
}
returnfalse;
}
privatebooleanisLetter(charch){
if(String.valueOf(ch).isEmpty()){
returnfalse;
}elseif(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z'){
returntrue;
}
returnfalse;
}
publicstaticvoidinsert(PropertiesuserPro,Filefile,Stringc_char,
Stringc_type){
userPro.setProperty(c_char,c_type);
try{
userPro.store(newFileOutputStream(file),
"Copyright(c)LexerbyCT");
}catch(FileNotFoundExceptione1){
e1.printStackTrace();
}catch(IOExceptione1){
e1.printStackTrace();
}
}
@SuppressWarnings("unused")
privatestaticvoidcreateProperty(){
PropertieschartPro=newProperties();
Filefile=newFile("Chart.properties");
LexerUtil.loadPro(chartPro,file);
insert(chartPro,file,"标识符","1");
insert(chartPro,file,"常数(整)","2");
insert(chartPro,file,"+","3");
insert(chartPro,file,"-","4");
insert(chartPro,file,"*","5");
insert(chartPro,file,"/","6");
insert(chartPro,file,"=","7");
insert(chartPro,file,",","8");
insert(chartPro,file,"(","9");
insert(chartPro,file,")","10");
insert(chartPro,file,"{","11");
insert(chartPro,file,"}","12");
insert(chartPro,file,"[","13");
insert(chartPro,file,"]","14");
insert(chartPro,file,";","15");
insert(chartPro,file,".","16");
insert(chartPro,file,"if","17");
insert(chartPro,file,"while","18");
insert(chartPro,file,"for","19");
insert(chartPro,file,"void","20");
insert(chartPro,file,"try","21");
insert(chartPro,file,"public","22");
insert(chartPro,file,"true","23");
insert(chartPro,file,"false","24");
insert(chartPro,file,"break","25");
insert(chartPro,file,"static","26");
insert(chartPro,file,"throw","27");
insert(chartPro,file,"private","28");
insert(chartPro,file,"new","29");
insert(chartPro,file,"return","30");
insert(chartPro,file,"default","31");
insert(chartPro,file,"catch","32");
insert(chartPro,file,"finally","33");
insert(chartPro,file,"protected","34");
insert(chartPro,file,"else","35");
insert(chartPro,file,"case","36");
insert(chartPro,file,"switch","37");
insert(chartPro,file,"int","38");
insert(chartPro,file,"long","39");
insert(chartPro,file,"double","40");
insert(chartPro,file,"float","41");
insert(chartPro,file,"String","42");
insert(chartPro,file,"boolean","43");
}
/**
*测试程序
*
*@paramargs
*/
publicstaticvoidmain(String[]args){
newLexer();
}
}
这是LexerUtil类:
package词法分析程序;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.IOException;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importjava.util.Properties;
publicclassLexerUtil{
//Properties加载文件信息
publicstaticvoidloadPro(Propertiespro,Filefile){
if(!
file.exists()){
try{
file.createNewFile();
}catch(IOExceptione){
e.printStackTrace();
}
}
try{
pro.load(newFileInputStream(file));
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
publicstaticStringgetTimer(){
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:
mm:
ss");
returnsdf.format(newDate());
}
}