package com.seakt.example;
import java.io.*;import java.lang.String;
public class J_Scanner {public String infile; public String outfile; public String []key = new String[33];FileOutputStream out = null;public J_Scanner(String infile,String outfile){J_Scanner.this.infile = infile;J_Scanner.this.outfile = outfile;String[] key_temp = {"","auto","double","int","struct","break","else","long","switch","case", "enum","register","typedef","char","extern","return","union","const","float","short","unsigned","continue","for","signed","void","default","goto","sizeof","volatile","do","if","while","static"};key = key_temp;try {out = new FileOutputStream(new File(outfile)); }catch(IOException e){e.PRintStackTrace();}}//输出关键字public void print_key(){for(int i=0;i<J_Scanner.this.key.length;i++){System.out.printf("%s/r/n",J_Scanner.this.key[i]);}}//读文件 public void readFile() { File file = new File(J_Scanner.this.infile); BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(file)); String tempString = null; while ((tempString = reader.readLine()) != null) { System.out.println(tempString.length()); getToken(tempString); } reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e1) { } } } } //判断是否字符 private boolean isLetter(char ch){if((ch>=65&&ch<=90)||(ch>=97&&ch<=122)||ch==35||ch==46)return true;else return false; } //判断是否数字 private boolean isDigit(char ch){ if(ch>=48&&ch<=57)return true;else return false; } //查找关键字 private int reserve(String s){ for(int i=1;i<33;i++) if(s==key[i]) return i; return 0;
}
private void getToken(String s) throws IOException{
String str_write=null; int i=0,code;char ch=' ';String temp="";if(s.length()!=0){ch=s.charAt(i);}while(i<s.length()){
//如果是空跳过while(i<s.length()&&ch==' '){ i++; ch=s.charAt(i);}//是字母if(isLetter(ch)){while((isLetter(ch)||isDigit(ch))&&i<s.length()){ temp+=ch; i++; if(i<s.length()-1){ ch=s.charAt(i); }else{ ch=' '; }}i--;code=reserve(temp);if(code==0){str_write = temp+"/t"+"标识符"+"/r/n";out.write(str_write.getBytes()); temp="";str_write="";}else{ str_write = temp+"/t"+"关键字"+"/r/n"; out.write(str_write.getBytes()); temp="";str_write="";}
}else if(isDigit(ch)){while(isDigit(ch)){ temp+=ch; i++; if(i<s.length()-1){ ch=s.charAt(i); }else{ ch=' '; }}i--; str_write = temp+"/t"+"常数"+"/r/n";out.write(str_write.getBytes());temp="";str_write="";}else if(ch=='='){i++; ch=s.charAt(i);if(ch== '=' ){ str_write = "=="+"/t"+"判断相等"+"/r/n"; out.write(str_write.getBytes()); temp="";str_write="";}else{ i--; str_write = "="+"/t"+"赋值"+"/r/n"; out.write(str_write.getBytes()); temp="";str_write="";}
}else if(ch=='+'){ i++; ch=s.charAt(i); if(ch=='+') out.write(("++"+'/t'+"加1"+"/r/n").getBytes()); else{i--;out.write(("++"+'/t'+"加号"+"/r/n").getBytes()); }}else if(ch=='&'){ i++; ch=s.charAt(i); if(ch=='&') out.write(("&&"+'/t'+"与"+"/r/n").getBytes()); else{i--; out.write(("&"+'/t'+"按位与"+"/r/n").getBytes()); }}else if(ch=='|'){ i++; ch=s.charAt(i); if(ch=='|') out.write(("||"+'/t'+"或"+"/r/n").getBytes()); else{i--; out.write(("|"+'/t'+"按位或"+"/r/n").getBytes()); }}
else if(ch=='-') out.write(( (char)ch+'/t'+"减号"+"/r/n").getBytes());else if(ch==';') out.write(( (char)ch+'/t'+"分号"+"/r/n").getBytes());else if(ch=='(')out.write(( (char)ch+'/t'+"左括号"+"/r/n").getBytes());else if(ch==')')out.write(( (char)ch+'/t'+"右括号"+"/r/n").getBytes());else if(ch=='{') out.write(( (char)ch+'/t'+"左花括号"+"/r/n").getBytes());else if(ch=='}')out.write(( (char)ch+'/t'+"右花括号"+"/r/n").getBytes());else if(ch=='*'){i++; ch=s.charAt(i);if(ch=='*')out.write(("**"+'/t'+"运算符"+"/r/n").getBytes());else{ i--; out.write(("*"+'/t'+"乘号"+"/r/n").getBytes());}
}else if(ch=='<'){i++; ch=s.charAt(i);if(ch=='=') out.write(("<="+'/t'+"小于等于"+"/r/n").getBytes());else{ i--; out.write(("<"+'/t'+"小于"+"/r/n").getBytes());}
}else if(ch=='>'){i++;if(i<s.length()-1){ ch=s.charAt(i); }else{ ch=' '; }if(ch=='=') out.write((">="+'/t'+"大于等于"+"/r/n").getBytes());else{ i--; out.write(("<"+'/t'+"大于"+"/r/n").getBytes());}}elsereturn;i++;if(i<s.length()){ch=s.charAt(i);}} } //关闭输出流 public void close_outStream() throws IOException{J_Scanner.this.out.close();} }
新闻热点
疑难解答