java 词法分析器

package cifa;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
public class Compiler {
 private static String string;
 private static String str;
 private static char ch;
 
 public static void getChar()throws Exception{
  File f=new File("C:\xhp","xhp.txt");
  if(!f.exists()){
   System.out.println("文件不存在,请输入正确的文件路径");
  }
  FileReader fr=new FileReader(f);
  int rs=0;
  char[]data=new char[1000];
  System.out.println(" ");
  
  while((rs=fr.read(data))>0){
   string=new String(data,0,rs).trim();
  }
  fr.close();
 }
 
 public static boolean isLetter(char c){
  if((ch>='a'&&ch<='z')||(ch>+'A'&&ch<='Z')){
   return true;
  }
  else
   return false;
 }
 
 public static boolean isDigit(char c){
  if(ch>='0'&&ch<='9'){
   return true;
  }
  else
   return false;
 }
 
 public static boolean isKey(String string){
  if(string.equals("void")||string.equals("if")||string.equals("for")
  ||string.equals("while")||string.equals("do")||string.equals("return")
  ||string.equals("break")||string.equals("main"))
  {
   return true;
  }
  else
   return false;
 }
 
 public static void judgement()throws Exception{
  Compiler.getChar();
  File f1=new File("C:\xhp","xhp1.txt");
  FileWriter fw=new FileWriter(f1);
  int m=0;
  string+=" ";
  for(int i=0;i<string.length();i++){
   switch(m){
   case 0:
    ch=string.charAt(i);
    if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='='||ch=='>'||ch=='<'){
     m=4;
    }
    else if(ch==','||ch==';'||ch=='{'||ch=='}'||ch=='('||ch==')'){
     m=5;
    }
    else if(isDigit((ch=string.charAt(i)))){
     str="";
     str+=ch;
     m=3;
    }
    else if(isLetter(ch=string.charAt(i))){
     str="";
     str+=ch;
     m=2;
    }
    else{}
    break;
    
   case 4:
    i--;
    System.out.println(("(4"+" "+ch+" )"));
    fw.write(("(4"+" "+ch+" )"+" "+" "));
    m=0;
    break;
    
   case 5:
    i--;
    System.out.println(("(5"+" "+ch+" )"));
    fw.write(("(5"+" "+ch+" )"+" "+" "));
    m=0;
    break;
    
   case 2:
    if(isLetter(ch=string.charAt(i))){
     str+=ch;
    }
    else{
     if(isKey(str)){
      System.out.println(("(1"+" "+str+" )"));
      fw.write(("(1"+" "+str+" )"+" "+" "));
     }
     else{
      System.out.println(("(2"+" "+str+" )"));
      fw.write(("(2"+" "+str+" )"+" "+" "));
     }
     i--;
     m=0;
    }
    break;
    
   case 3:
    if(isDigit(ch=string.charAt(i))){
     str+=ch;
    }
    else{
     System.out.println(("(3"+" "+str+" )"));
     fw.write(("(3"+" "+str+" )"+" "+" "));
     i--;
     m=0;
    }
    break;
   }
   
   
  }fw.flush();
   fw.close();
 }
 public static void main(String[] args)throws Exception {
  Compiler.judgement();
 }
}

原文地址:https://www.cnblogs.com/xhp956614463/p/4497460.html