⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tttest.java

📁 一个简单有效的CMM语言的词法分析器,带图形界面
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        case 6:  start=12; break;        case 12: start=17; break;        case 17: start=21; break;        case 21: start=25; break;        case 25: start=34; break;        default:              System.out.println("编译错误");             endOfFenX();     }     return start;   }    void getWrong()  {     String wrong = " <------Wrong----at--line--"+line+"----at--char--"+buffer.charAt(ending-1)+"------>";    System.out.println(wrong);    wrongFile.println(wrong);  }  //从缓存器中得到一个字符  char nextChar()  {      char  getCharOfBuffer;     if( lastLetter=='\n' )     {       putBuffer();     }          getCharOfBuffer = buffer.charAt(ending);     System.out.println(getCharOfBuffer);//测试     if( getCharOfBuffer=='\n')       lastLetter='\n';     else if( getCharOfBuffer==' ' )     {        if(state==18||state==19)        ending++;        else        {        begining++;        ending++;         }     }     else       {     ending++;     //lineBegin=false;     }     return getCharOfBuffer;  }  //分析文件完  void endOfFenX()  {     endOfFenX=true;     wrongFile.close();     System.out.println("错误wrong");  }    //缓存器读新行  void putBuffer()  {     try{        if( ( buffer = in.readLine() ) == null )        {        endOfFenX();        System.out.println("end of text");        }        }catch(Exception e){}        System.out.println("Buffer++++++"+buffer+"+++++++++");      {            begining=0;        ending = 0;        line=line+1;        buffer=buffer+'\n';          lastLetter='1';      }  }   boolean  isLetter(char c)   {    boolean  isaLetter=false;    if( c>='a' )    {       if( c<='z' )       {         isaLetter=true;       }       else if( c>='z' )       isaLetter=false;    }    else if(c>='A')    {       if(c<='Z')        isaLetter=true;       else         isaLetter=false;    }    else       isaLetter=false;    return isaLetter;     }    boolean isDouble( )  {    return  isDouble;  }    boolean isDigit(char digit)  {         if( digit>='0' && digit<= '9' )    {      System.out.println("is a number");      return true;    }    else     {      System.out.println("is not number");      return false;   }  }  void ungetChar()  {    if( buffer.charAt(ending-1)==' ')          begining--;    ending--;  }  public BufferedReader in ;//读文件  public  static int  begining;                                  //词素开始  public  static int  ending;                                    //词素结束  public  static int  line;                                      //记录当前行  public  static String  buffer;                                 //缓存器  public  static int state ;  public  static char lastLetter;  public  static boolean endOfFenX;  public  static Table table;  private  boolean  isDouble;                                   //看是不是第一个zhifu   private PrintWriter  wrongFile;  }     //符号表class Table{  private ArrayList name1T;  private ArrayList name2T;  private ArrayList typeT;  private ArrayList kindT;  private ArrayList valT;  private PrintWriter out;  private PrintWriter out1;  private ArrayList twoNUM1;//二元式  private ArrayList twoNUM2;//二元式      public Table()  {    try{    out=new PrintWriter(new FileWriter("Table.dat"));    out1=new PrintWriter(new FileWriter("TableTwoNUM.dat"));    }catch(Exception e){}    //初始化符号表    name1T = new ArrayList();    name2T = new ArrayList();    typeT  = new ArrayList();    kindT  = new ArrayList();    valT   = new ArrayList();    twoNUM1 = new ArrayList();    twoNUM2 = new ArrayList();    //当没有找到符号是返回第0项    name1T.add(null);    name2T.add(null);    typeT.add(null);    kindT.add(null);    valT.add(null);    initialTable();  }    //如果不是ID ,则在name2中输入1000;  public void insert(String nameOf1,int nameOf2,                      String type,String kind,String val)  {      if(lookUp(nameOf1)!=0)    return;    //add name1    if(nameOf1.equals(""))        name1T.add(null);    else name1T.add(nameOf1);      //add name2    if(nameOf2==1000) name2T.add(null);    else    {             name2T.add(nameOf2);    }       //add type    if( type.equals("")) typeT.add(null);    else  typeT.add(type);      //add kind    if( kind.equals("")) kindT.add(null);    else kindT.add(kind);      //add val    if( val.equals("")) valT.add(null);    else    {       if(type.equals("整型"))       {          int num= Integer.parseInt(val);          valT.add(num);       }       else if(type.equals("实型"))       {            double num = Double.parseDouble(val);          valT.add(num);       }       else valT.add(null);     }          return;      }     public void  insertTwoNUM(String id ,int k)   {           //System.out.println(";;;;;;;;;;;;;;;"+theNUM+";;;;;;;;;");          String  temp =" <   "+name1T.get(k);     twoNUM1.add(temp);     twoNUM2.add(k);        }     public int lookUp(String id)   {             for(int k=1; k < name1T.size();k++)      {          String tempS=(String)name1T.get(k);          if( id.equals(tempS) )          {             if( valT.get(k)!=null )            insertTwoNUM(id,k);            return k;          }      }      return 0;   }    private void  initialTable()  {    insert("int",1000,"整型","","1");    insert("double",1000,"整型","","2");    insert("String",1000,"整型","","3");    insert("char",1000,"整型","","4");      insert("main",1000,"整型","","5");    insert("(",1000,"整型","","6");    insert(")",1000,"整型","","7");    insert("{",1000,"整型","","8");      insert("}",1000,"整型","","9");    insert(";",1000,"整型","","10");    insert("<",1000,"整型","","11");    insert("<=",1000,"整型","","12");      insert("<>",1000,"整型","","13");    insert("=",1000,"整型","","14");    insert(">",1000,"整型","","15");    insert(">=",1000,"整型","","16");      insert("+",1000,"整型","","17");    insert("-",1000,"整型","","18");    insert("*",1000,"整型","","19");    insert("/",1000,"整型","","20");  }    public void printTable()  {    int k;    int length;    //初始首行name1: 20 ,name2 :20,type 10,kind 10,val 10     out.print(" name1");    for( k=1;k<=14;k++)      out.print(" ");      out.print("name2");    for(k=1;k<=15;k++)      out.print(" ");      out.print("type");    for(k=1;k<=6;k++)      out.print(" ");      out.print("kind");    for(k=1;k<=6;k++)      out.print(" ");      out.print("value");    for(k=1;k<=5;k++)      out.print(" ");    out.println();     //begin   for( k= 21;k<name1T.size()-1;k++ )   {  //name1      if(name1T.get(k)==null)         for( int j=1;j<=20;j++)           out.print(" ");      else      {         String tempN1=(String)name1T.get(k);         length=tempN1.length();                  out.print(" "+tempN1);         for( int j=1;j<=(19-length);j++)           out.print(" ");      }      //name2      if(name2T.get(k)==null)         for( int j=1;j<=20;j++)           out.print(" ");      else      {      out.print(  name2T.get(k) );      for( int j=1;j<=19;j++)         out.print(" ");      }      //type      if(typeT.get(k)==null)         for( int j=1;j<=10;j++)           out.print(" ");      else      {         String tempT=(String)typeT.get(k);         length=tempT.length();         out.print(tempT);         for( int j=1;j<=(10-2*length);j++)           out.print(" ");      }      //kind      if(kindT.get(k)==null)         for( int j=1;j<=10;j++)           out.print(" ");      else      {         String tempK=(String)kindT.get(k);         length=tempK.length();         out.print(tempK);         for( int j=1;j<=(12-2*length);j++)           out.print(" ");      }            //val      if(valT.get(k)==null)         out.println();      else         out.println(valT.get(k));   }    out.close();      for(   k=0;k<twoNUM1.size();k++)    {       String temp=(String)twoNUM1.get(k);       length = temp.length();       out1.print(temp);       for( int j =1;j<= 10-length;j++)        out1.print(" ");       out1.print(",");       out1.println(twoNUM2.get(k)+" >");   }    out1.close(); }     }                                    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -