📄 tttest.java
字号:
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 + -