zoukankan      html  css  js  c++  java
  • 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();
     }
    }

  • 相关阅读:
    ps 允许执行不信任的脚本
    mysql 某表某列支持 emoji
    jenkins
    成为真正的win10 超级管理员,解决win+r 不以管理员身份运行
    bat curl 定时请求
    jq 日期区间处理
    jq 日期区间处理
    ubuntu cli
    nginx启动两个flask项目
    nginx 配置http和https验证
  • 原文地址:https://www.cnblogs.com/xhp956614463/p/4497460.html
Copyright © 2011-2022 走看看