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

📄 accidence2.java

📁 一个自己编写的词法分析程序,经过修改后的版本,请大家指教
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
								 character[j++]=word;
								 System.out.println(character[j-1]);
				                 startword = startword+1;
				                 fianlLetter=0;
							 }else if((buf[countletter]>='a'&&buf[countletter]<='z')||buf[countletter]>='0'&&buf[countletter]<='9'){
                                  fianlLetter++;
							 }
						  }
                         if(startword==(space[i-1]+1)){            //一整串字符里面没有界符,没有运算符的情况
					      word = new String(buf,startword,endword-startword);
				          character[j++]=word;
				          System.out.println(character[j-1]);
				          startword = k+2;
					     }else{
							 startword+=2;
						 }

				   }else if(k==space[i]&&startword>(space[i-1]+1)){                                                                                             //5.2考滤最后一个回车到最后一个空格的情况(空格,字符,回车,字符,回车,字符,空格即第二个回车到最后一个空格的情况)
					   int orginal=startword;
					   endword = k;

					   //以下一个for是一个对字符串进行分解代码
						  for(int fianlLetter=0, countletter=startword;countletter<endword;countletter++){
							  if(buf[countletter]=='+'||buf[countletter]=='-'||buf[countletter]=='*'||buf[countletter]=='/'||(buf[countletter]=='='&&buf[countletter-1]!=':')){

                                 if(fianlLetter!=0){
								 		word = new String(buf,startword,fianlLetter);
								 		character[j++]=word;
								 		System.out.println(character[j-1]);
								 		//startword = startword+1;
								 }
                                 startword=countletter;
                                 word = new String(buf,startword,1);
								 character[j++]=word;
								 System.out.println(character[j-1]);
				                 startword = startword+1;
				                 fianlLetter=0;

							 }else if((buf[countletter]==':'&&buf[countletter+1]=='=')||(buf[countletter]=='>'&&buf[countletter+1]=='=')||(buf[countletter]=='<'&&buf[countletter+1]=='=')){

								 if(fianlLetter!=0){
								 		word = new String(buf,startword,fianlLetter);
								 		character[j++]=word;
								 		System.out.println(character[j-1]);
								 		//startword = startword+1;
								 }
                                 startword=countletter;

								 word = new String(buf,startword,2);
								 character[j++]=word;
								 System.out.println(character[j-1]);
				                 startword = startword+2;
				                 fianlLetter=0;
							 }else if(buf[countletter]=='('||buf[countletter]==')'||buf[countletter]==','||buf[countletter]==';'||buf[countletter]==':'||(buf[countletter]=='>'&&buf[countletter+1]!='=')||(buf[countletter]=='<'&&buf[countletter+1]!='=')){

							     if(fianlLetter!=0){
								 	word = new String(buf,startword,fianlLetter);
								 	character[j++]=word;
								 	System.out.println(character[j-1]);
								 	//startword = startword+1;
								 }
                                 startword=countletter;

							     word = new String(buf,startword,1);
								 character[j++]=word;
								 System.out.println(character[j-1]);
				                 startword = startword+1;
				                 fianlLetter=0;
							 }else if((buf[countletter]>='a'&&buf[countletter]<='z')||buf[countletter]>='0'&&buf[countletter]<='9'){
                                  fianlLetter++;
							 }
						  }

                       if(startword==orginal){
					        word = new String(buf,startword,endword-startword);
					        character[j++]=word;
          					System.out.println(character[j-1]);
                       }
				       //startword = k+2;

				   }else if(k==space[i]&&startword==(space[i-1]+1)){                                                                                     //5.3字符中没有回车的情况
                         endword=k;

					   //以下一个for是一个对字符串进行分解代码
					   for(int fianlLetter=0, countletter=startword;countletter<endword;countletter++){
					   			if(buf[countletter]=='+'||buf[countletter]=='-'||buf[countletter]=='*'||buf[countletter]=='/'||(buf[countletter]=='='&&buf[countletter-1]!=':')){

					                if(fianlLetter!=0){
					   					word = new String(buf,startword,fianlLetter);
					   				    character[j++]=word;
					   					System.out.println(character[j-1]);
					   					//startword = startword+1;
					   				}
					                startword=countletter;
					                word = new String(buf,startword,1);
					   				character[j++]=word;
					   				System.out.println(character[j-1]);
					   				startword = startword+1;
					   				fianlLetter=0;

					   			}else if((buf[countletter]==':'&&buf[countletter+1]=='=')||(buf[countletter]=='>'&&buf[countletter+1]=='=')||(buf[countletter]=='<'&&buf[countletter+1]=='=')){

					   					if(fianlLetter!=0){
					   						word = new String(buf,startword,fianlLetter);
					   						character[j++]=word;
					   						System.out.println(character[j-1]);
					   						//startword = startword+1;
					   						 }
					                         startword=countletter;

					   						word = new String(buf,startword,2);
					   						character[j++]=word;
					   						System.out.println(character[j-1]);
					   				       startword = startword+2;
					   				        fianlLetter=0;
					   						}else if(buf[countletter]=='('||buf[countletter]==')'||buf[countletter]==','||buf[countletter]==';'||buf[countletter]==':'||(buf[countletter]=='>'&&buf[countletter+1]!='=')||(buf[countletter]=='<'&&buf[countletter+1]!='=')){

					   							  if(fianlLetter!=0){
					   							    word = new String(buf,startword,fianlLetter);
					   							    character[j++]=word;
					   								System.out.println(character[j-1]);
					   								//startword = startword+1;
					   							}
					                                startword=countletter;

					   							     word = new String(buf,startword,1);
					   								 character[j++]=word;
					   								 System.out.println(character[j-1]);
					   				                 startword = startword+1;
					   				                 fianlLetter=0;
					   							 }else if((buf[countletter]>='a'&&buf[countletter]<='z')||buf[countletter]>='0'&&buf[countletter]<='9'){
					                                     fianlLetter++;
					   							 }
						        }

                           if(startword==(space[i-1]+1)){
					         word = new String(buf,space[i-1]+1,space[i]-space[i-1]-1);
					         character[j++]=word;
					         System.out.println(character[j-1]);
				           }
				   }else{
					 // continue;
			           }
				  }//for
			  }//if
			}//if
		}//for


        //对文件里的最后一个单词进行选择并存放在数组character
        //按照编程的习惯,一般不会把字母数字运算符放在最后所以就不对这里的字符进行分离了
        int countk=0;
        int[] last = new int[512];  //用于存放一个单词的位置数组
        for(int i=0, k=bankcount+1;k<len;k++){
			if(buf[k]=='\r'||buf[k]=='\n') continue;
			else{
				last[i++] = k;
				bankcount = k;   //现在的bankcount记录最后一个单词位置
				countk++;        //用来计算有多少K的值放进去数组last[]中
			}
		}
		for(int startword=last[0],endword=bankcount, i=1;i<countk;i++){
			if((last[i]-last[i-1])>1){
				endword = last[i-1];
				word = new String(buf,startword,endword-startword+1);
				character[j++] = word;
				System.out.println(character[j-1]);
				startword = last[i];
			}else if(i==(countk-1)&&startword==last[0]){
				word = new String(buf,startword,endword-startword+1);
				character[j++] = word;
				System.out.println(character[j-1]);
				}else if(i==(countk-1)&&startword>last[0]){
					   word = new String(buf,startword,last[countk-1]-startword+1);
					   character[j++] = word;
				       System.out.println(character[j-1]);
				     }else{
				           //continue;
			               }
		}




		//以下程序是将结果(二元值)经过比较后输出到方件之中

				//以下是写到输出文件中
				 File f = new File("out.txt");
				//没有指定绝对路径,即与程序同一目录下创建文件
				if(f.exists()){
			     	f.delete();
			    }else{
				f.createNewFile();
		        }
				FileOutputStream fos = new FileOutputStream("out.txt");
				//FileOutputStream对象要与某个文件相连
				BufferedOutputStream bos = new BufferedOutputStream(fos);
				//BufferedOutputStream对象包装FileOutputStream对象fos
				DataOutputStream dos = new DataOutputStream(bos);
		        //DataOutputStream对象包装BufferedOutputStream对象bos

		        for(int i=0;character[i]!=null&&i<character.length;i++){
					if(character[i].equals("+")||character[i].equals("-")||character[i].equals("*")||character[i].equals("/")||character[i].equals("=")||character[i].equals(":="))
					    dos.writeBytes("("+"h"+", '"+character[i]+"')\n");
					else if(character[i].equals("(")||character[i].equals(")")||character[i].equals(",")||character[i].equals(":")||character[i].equals(">")||character[i].equals("<")||character[i].equals(">=")||character[i].equals("<=")||character[i].equals(";"))
					        dos.writeBytes("("+"j"+", '"+character[i]+"')\n");
					      else if(character[i].startsWith("0")||character[i].startsWith("1")||character[i].startsWith("2")||character[i].startsWith("3")||character[i].startsWith("4")||character[i].startsWith("5")||character[i].startsWith("6")||character[i].startsWith("7")||character[i].startsWith("8")||character[i].startsWith("9"))
					            dos.writeBytes("("+"d"+", '"+character[i]+"')\n");
					            else{
									  int  record = 0;
									  for(int k=0;k<14;k++){
									    if(character[i].equals(kword[k])){
									      dos.writeBytes("("+ktype[k]+", '"+kword[k]+"')\n");
									      record=1;  //记录本次循环是否有找到相应的关键字
									      }
									    }
									  if(record==0)
									    dos.writeBytes("("+"a"+", '"+character[i]+"')\n");

								}
				}


				dos.close();    //最后闭上层的流对象,即可

		}catch(Exception ex){
						System.out.println(ex.toString());
				}


System.out.println("请在out.txt中查检阅结果了,谢谢。");
	}
}

⌨️ 快捷键说明

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