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

📄 constanalyse.java

📁 词法分析器 可以识别c++的源码,自动生成词法分析表, 在分析结束后会指出源代码中可能的错误 待分析的源代码要以 *源代码.txt的格式保存
💻 JAVA
字号:
package accidenceAnalyse;

import java.io.*;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class ConstAnalyse implements TokenAnalyse
{
	/*   常量的词法分析*/
	class ConstTable {
		private int ID ;
		private String name ;
		public ConstTable(int ID , String name) {
			this.ID = ID ;
			this.name = name ;
		}
		public int getID() {
			return this.ID ;
		}
		public String getname() {
			return this.name ;
		}
	}
	
	public ConstTable getConstTable(int ID , String name) {
		return new ConstTable(ID , name) ;
	}
	
	public ConstAnalyse() {
	}
	public ConstAnalyse(int ID , String name){
		super();
		this.ID = ID;
		this.name = name;
	}
	public void analyse(String str ,ArrayList<TokenTable> list , ArrayList<String> errorList , int textLine){
		Pattern  pattern1  = Pattern.compile(SIXTEEN);
		Matcher matcher1 = pattern1.matcher(str);
		if(matcher1.find())
			if(str.substring (  matcher1.start(),matcher1.end() ).equals(str)){
				this.name = str;
				this.ID = 3;
				list.add(new TokenTable(this.ID,this.name));
				insertConstTable (this.ID , this.name);
				return;
			}
			else{
				String errorStr = "第"+textLine+"行常量表示: "+str+"不合法";
				errorList.add(errorStr);
				return;
			}
		Pattern  pattern2  = Pattern.compile(EIGHT);
		Matcher matcher2 = pattern2.matcher(str);
		if(matcher2.find())
			if(str.substring (  matcher2.start(),matcher2.end() ).equals(str)){
				this.name = str;
				this.ID = 3;
				list.add(new TokenTable(this.ID,this.name));
				insertConstTable (this.ID , this.name);
				return;
			}
			else{
				String errorStr = "第"+textLine+"行常量表示: "+str+"不合法";
				errorList.add(errorStr);
				return;
			}
		Pattern  pattern3  = Pattern.compile(TEN);
		Matcher matcher3 = pattern3.matcher(str);
		if(matcher3.find())
			if(str.substring (  matcher3.start(),matcher3.end() ).equals(str)){
				this.name = str;
				this.ID = 3;
				list.add(new TokenTable(this.ID,this.name));
				insertConstTable (this.ID , this.name);
				return;
			}
			else{
				String errorStr = "第"+textLine+"行常量表示: "+str+"不合法";
				errorList.add(errorStr);
				return;
			}
			String errorStr = "第"+textLine+"行常量表示: "+str+"不合法";
			errorList.add(errorStr);
	}

	private void insertConstTable (int ID , String name) {
		constTable.add(getConstTable(ID , name));
	}
	
	public void getArrayList (String filename) {
		try{
			DataOutputStream out = new DataOutputStream(new FileOutputStream("accidenceAnalyse\\accidenceAnalyseTable\\"+filename+"_ConstTable.txt"));
			try{
				for (ConstTable c : constTable){
					out.writeUTF(""+c.getID());
					out.writeUTF(c.getname());
				}
			}catch(IOException e){}
			out.close();
		}catch(Exception e){}
	}
	
	private String name = "";
	private int ID = 0;
	static final String TEN = "\\d+\\.\\d+[Ee][\\+\\-]\\d+[fF]?|\\d+\\.\\d+[fF]?|\\-?0|[1-9]\\d*[fFUuLl]?";
	static final String EIGHT = "\\-?o0+|o[1-7][0-7]*";
	static final String SIXTEEN = "\\-?0x[0-9A-Fa-f]+";
	private static ArrayList<ConstTable> constTable = new ArrayList<ConstTable>() ;
}

⌨️ 快捷键说明

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