亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? executor.java

?? 一種CMM語言的詞法分析
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
				str = str.substring(2);
				strT = (str.length()==1)? "" : str.substring(1);
			}
			//以'-'號開始
			else {
				//計(jì)算第一個加減運(yùn)算符號位置
				int location = -1;
				for (int i = 1; i < str.length(); i++) {
					if ("+-".indexOf(str.charAt(i))!=-1) {
						location = i;
						break;
					}
				}
				
				//獲得第一個操作數(shù)的值
				String value1 = str.substring(0, location);
				int number1 = getNumber(value1, startIndex, endIndex);
				
				//計(jì)算第二個操作數(shù)的開始位置
				int end = str.length();
				for (int i = location+2; i < end; i++) {
					if ("+-".indexOf(str.charAt(i))!=-1) {
						end = i;
						break;
					}
				}
				//獲得第二個操作數(shù)的值
				String value2 = str.substring(location+1, end);
				int number2 = getNumber(value2, startIndex, endIndex);
				
				//計(jì)算加減法
				int number = (str.charAt(location) == '+') ? number1 + number2 : number1 - number2;
				
				//生成進(jìn)行一次加減法后的串
				str = (end==str.length()) ? number + "": number + str.substring(end);
				strT = (str.length()==1)? "" : str.substring(1);
			}
		}
		
		return getNumber(str, startIndex, endIndex);
	}
		
	/** 計(jì)算關(guān)系表達(dá)式的值
	 * 語法分析已保證格式正確
	 * String str 為關(guān)系表達(dá)式字符串*/
	private boolean computeRelation (String str, int startIndex, 
			int endIndex) throws MyRuntimeException {
		//將real替換為"#"
		str = str.replace("real", "#");
		
		/** 循環(huán)消去括號*/
		while (str.indexOf('[')+str.indexOf('(') != -2) {
			//查找第一個括號開的位置
			for (int i = 0; i <str.length(); i++) {
				if (str.charAt(i)=='[' || str.charAt(i)=='(') {
					/** 第一個括號開為中括號*/
					if (str.charAt(i)=='[') {
						//存儲數(shù)組變量名開始位置
						int start = -1;
						for (int j = i; j >=0; j--) {
							//查找變量開始位置
							if ("+-*/<>=".indexOf(str.charAt(j))!=-1) {
								start = j;
								break;
							}
						}
						
						//獲得的數(shù)組變量名
						String var = str.substring(start+1, i);
						
						//錯誤:變量未聲明
						if (!isDeclared(var)) throw new MyRuntimeException(
								"變量 “" + var + "” 使用前未聲明", startIndex, endIndex);
						
						//錯誤:變量聲明為int型
						if (!isArrDeclared(var)) throw new MyRuntimeException(
								"對int型變量 “" + var + "” 使用索引", startIndex, endIndex);
						
						//計(jì)算對應(yīng)括號閉位置
						int endBracket = SyntaxAnalyze.analyzeBracket(str, '[', ']', i);
						//遞歸計(jì)算索引值
						int index = computeArithmetic(
								str.substring(i+1, endBracket), startIndex, endIndex);
						
						//錯誤:索引值越界
						if (index < 0 || index >= getArrVar(var).length) 
							throw new MyRuntimeException("數(shù)組索引越界:    " + 
									"數(shù)組變量 “" + var + "”的長度:" + getArrVar(var).length + 
									"    錯誤的索引:" + index, startIndex, endIndex);
						
						//獲取變量的值
						int value = getArrVar(var).getValue(index);
						
						//生成進(jìn)行一次消括號后的串
						String strT1 = (start==-1) ? "" : str.substring(0, start+1);
						String strT2 = (endBracket==str.length()-1) ? 
								"" : str.substring(endBracket + 1, str.length());
						str = strT1 + value + strT2;
					}
					/** 第一個括號開為小括號*/
					else {
						//計(jì)算對應(yīng)括號閉位置
						int endBracket = SyntaxAnalyze.analyzeBracket(str, '(', ')', i);
						String strT = str.substring(i+1, endBracket);
						String value = ""; 
						//小括號內(nèi)返回值為布爾類型
						if (strT.indexOf('>')+strT.indexOf('<')+
								strT.indexOf('=')+strT.indexOf('#') != -4 ) 
							//獲取小括號內(nèi)布爾值,分別使用"#"、"!"表示返回值的true或false
							value += (computeRelation(strT, startIndex, endIndex)) ? "#" : "!";
						//小括號內(nèi)返回值為數(shù)字
						else 
							//計(jì)算小括號內(nèi)的值
							value += computeArithmetic(
									str.substring(i+1, endBracket), startIndex, endIndex);
						
						
						//生成進(jìn)行一次消括號后的串
						String strT1 = (i==0) ? "" : str.substring(0, i);
						String strT2 = (endBracket==str.length()-1) ? 
								"" : str.substring(endBracket+1, str.length());
						str = strT1 + value + strT2;
					}
					break;
				}
			}
		}
		
		if (str.equals("!") || str.equals("!==#") || str.equals("#==!") || 
				str.equals("!<>!") || str.equals("#<>#")) return false;
		else if (str.equals("#") || str.equals("!<>#")||str.equals("#<>!") || 
				str.equals("!==!") || str.equals("#==#")) return true;
		/** 不含有"#"和"!"的情況*/
		else if (str.contains("==") || str.contains("<>")) {
			//計(jì)算關(guān)系運(yùn)算符所在位置
			int locationT = str.indexOf('<');
			int location = (locationT > 0) ? locationT : str.indexOf('=');
				
			//獲取兩個用于比較的值
			int number1 = computeArithmetic(str.substring(0, location), startIndex, endIndex);
			int number2 = computeArithmetic(
					str.substring(location+2, str.length()), startIndex, endIndex);
				
			//進(jìn)行比較
			switch (str.charAt(location)) {
				case '<': return number1 != number2;
				case '=': return number1 == number2;
			}
		}
		else {
			//計(jì)算關(guān)系運(yùn)算符所在位置
			int locationT = str.indexOf('<');
			int location = (locationT > 0) ? locationT : str.indexOf('>');
				
			//獲取兩個用于比較的值
			int number1 = computeArithmetic (str.substring(0, location), startIndex, endIndex);
			int number2 = computeArithmetic (
					str.substring(location+1, str.length()), startIndex, endIndex);
				
			//進(jìn)行比較
			switch (str.charAt(location)) {
				case '>': return number1 > number2;
				case '<': return number1 < number2;
			}
		}
		
		return false;
	}
		
	/** 獲取數(shù)值
	 * @param str 變量名(可能含有負(fù)號)或數(shù)字的字符串
	 * @param startIndex 輸入中的開始位置
	 * @param endIndex 輸入中的結(jié)束位置
	 * @return 字符串表示的數(shù)字
	 * @throws MyRuntimeException
	 */
	private int getNumber (String str, int startIndex, int endIndex) throws MyRuntimeException {
		int value = 0;
		
		//檢查是否數(shù)字
		try {
			value = Integer.parseInt(str);
		}
		//待獲取為變量
		catch (Exception e) {
			//是否以'-'開頭
			String strT = (str.charAt(0)=='-') ? str.substring(1) : str;
			//檢查變量是否已聲明
			if (!isDeclared(strT)) 
				throw new MyRuntimeException("變量 “" + strT + "” 使用前未聲明", startIndex, endIndex);
			//檢查變量是否聲明為int型
			if (isIntDeclared(strT)) {
				//檢查變量是否已初始化
				if (isEvaluated (strT)) 
					value = (str.charAt(0)=='-') ? -getIntVar(strT) : getIntVar(strT);
				else throw new MyRuntimeException(
						"變量 “" + strT + "” 使用前未初始化", startIndex, endIndex);
			}
			//變量聲明為數(shù)組型
			else throw new MyRuntimeException(
					"在運(yùn)算表達(dá)式中直接使用了數(shù)組變量 “" + strT + "”", startIndex, endIndex);
		}
		
		return value;
	}
		
	/** 使用具體值對數(shù)組進(jìn)行賦值
	 * String str 為數(shù)組賦值(或初始化)使用的值*/
	private ArrayList<Integer> computeArrayData(String variable, String str, boolean evaluate,
			int startIndex, int endIndex) 
		throws MyRuntimeException {
		ArrayList<Integer> arrayData = new ArrayList<Integer>();
		
		while (str.indexOf(',')!=-1) {
			int end = str.indexOf(',');
			if (end == 0) {
				if (evaluate){
					arrayData.add(getArrVar(variable).value[arrayData.size()]);
				}
				else arrayData.add(0);
			}
			else arrayData.add(computeArithmetic(str.substring(0, end), startIndex, endIndex));
			str = str.substring(end+1);
		}
		arrayData.add(computeArithmetic(str, startIndex, endIndex));
		
		return arrayData;
	}
	
	/** 檢查變量是否已聲明*/
	//String variable 為變量名,以下所有方法中相同
	private boolean isDeclared (String variable) {
		if (isIntDeclared(variable) || isArrDeclared(variable)) return true;

		return false;
	}
	
	/** 檢查int型變量是否已聲明*/
	private boolean isIntDeclared (String variable) {
		for (Variable value:intList) 
			if (value.name.equals(variable)) return true;
		
		return false;
	}
	
	/** 檢查數(shù)組變量是否已聲明*/
	private boolean isArrDeclared (String variable) {
		for (ArrayVariable value:arrList) 
			if (value.name.equals(variable)) return true;
		
		return false;
	}
	
	/** 獲取數(shù)組變量對象*/
	private ArrayVariable getArrVar (String variable) {
		for (ArrayVariable value:arrList) 
			if (value.name.equals(variable)) return value;
		
		return new ArrayVariable(variable, -1);
	}
	
	/** 獲取int變量對象*/
	private int getIntVar (String variable) {
		for (Variable value:intList) 
			if (value.name.equals(variable)) return value.value;
		
		return 0;
	}
	
	/** 檢查int型變量是否已初始化*/
	private boolean isEvaluated (String variable) {
		for (Variable value:intList) 
			if (value.name.equals(variable)) return value.evaluated;

		return false;
	}
	
	/** 設(shè)置int型變量值
	 * int value 為新變量值*/
	private void setIntVarValue (String variable, int value) {
		for (Variable var:intList) 
			if (var.name.equals(variable)) {
				var.setValue(value);
				break;
			}
	}
	
	/** 設(shè)置array型變量值
	 * 將以ArrayList<Integer>類型保存的數(shù)組變量值賦值與變量名為variable的數(shù)組變量*/
	private void setArrVarValue (String variable, ArrayList<Integer> valueList) {
		for (ArrayVariable var:arrList) 
			if (var.name.equals(variable)) {
				var.setValue(valueList);
				break;
			}
	}
	
	/** 設(shè)置array型變量值
	 * 將ArrayVariable型對象arrayVar賦值與變量名為variable的數(shù)組變量*/
	private void setArrVarValue (String variable, ArrayVariable arrayVar) {
		for (ArrayVariable var:arrList) 
			if (var.name.equals(variable)) {
				var.setValue(arrayVar);
				break;
			}
	}
	
	/** 設(shè)置array型變索引index處的值
	 * int indexValue索引index處新的值*/
	private void setArrIndexValue (String variable, int index, int indexValue) {
		for (ArrayVariable var:arrList) 
			if (var.name.equals(variable)) {
				var.setIndexValue(index, indexValue);
				break;
			}
	}
	
	/** 信息窗口
	 * 繼承JDialog并將屬性設(shè)為模式的以保證打開此窗口時只有關(guān)閉后才能進(jìn)行其他操作
	 * 實(shí)現(xiàn)ActionListener接口以響應(yīng)事件*/
	class DialogAdapter extends JDialog implements ActionListener {
		//提供信息的文件名
		private String fileName = "";
		
		//構(gòu)造方法
		public DialogAdapter(int index) {
			this(null, index);
		}
		
		//構(gòu)造方法
		public DialogAdapter(JFrame parent, int index) {
			//調(diào)用JDialog構(gòu)造方法,設(shè)置此窗口為模式的
			super(parent, true);
			
			String frameName = (index==1) ? "更新及使用說明" : "關(guān)于執(zhí)行代碼";
			fileName = (index==1) ? "更新及使用說明.txt": "關(guān)于執(zhí)行代碼.txt";
			
			//窗口屬性
			setTitle(frameName);
			setSize(550, 600);
			Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
			setLocation((d.width - getSize().width) / 2,
					(d.height - getSize().height) / 2);
		}
		
		/** 響應(yīng)事件*/
		public void actionPerformed(ActionEvent evt) {
			//文本屬性
			JTextArea jtaExplain = new JTextArea();
			jtaExplain.setWrapStyleWord(true);
			jtaExplain.setLineWrap(true);
			jtaExplain.setEditable(false);
			jtaExplain.setTabSize(2);
			JScrollPane jspExplain = new JScrollPane(jtaExplain);
			add(jspExplain);
			
			//讀入信息文件內(nèi)容
			try {
				BufferedReader input = new BufferedReader(new FileReader(fileName));
				String line;
				while ((line = input.readLine()) != null) 
					jtaExplain.append(line + "\n");
				input.close();
			}
			catch (IOException ex) {
				jtaExplain.setText("文件不在指定位置!\n    請檢查文件的位置!");
			}
			
			//顯示信息窗口
			setVisible(true);
		}
	}
	
	/** 運(yùn)行時發(fā)現(xiàn)錯誤的異常類*/
	class MyRuntimeException extends Exception{
		//產(chǎn)生錯誤的類型
		private String reason = "";
		public int start = -1;
		public int end = -1;
		
		//構(gòu)造方法
		public MyRuntimeException(String reason, int start, int end) {
			this.reason = reason;
			this.start = start;
			this.end = end;
		}
		
		//錯誤輸出
		public String toString() {
			return reason;
		}
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产亚洲另类动漫| 美女在线观看视频一区二区| 欧美一级黄色大片| 一本色道久久综合亚洲91 | 正在播放一区二区| 欧美在线观看一二区| 色综合av在线| 欧美精品日日鲁夜夜添| 91精品国产手机| 91精品国产入口| 欧美不卡123| 精品av综合导航| 国产亚洲欧洲一区高清在线观看| 久久亚区不卡日本| 国产欧美日韩视频在线观看| 国产蜜臀av在线一区二区三区| 中文子幕无线码一区tr| 日韩毛片精品高清免费| 夜夜夜精品看看| 首页国产欧美日韩丝袜| 激情欧美一区二区三区在线观看| 国产一区二区福利| 本田岬高潮一区二区三区| 99国产精品国产精品久久| 在线视频国内自拍亚洲视频| 日韩一区二区在线看| 久久久久久日产精品| 1024国产精品| 日韩电影一区二区三区| 国产精品一区二区在线播放 | 欧美乱妇20p| 欧美成人精精品一区二区频| 国产精品欧美一级免费| 亚洲一区二区四区蜜桃| 久久成人久久鬼色| 91小视频在线观看| 精品三级在线观看| 亚洲精品中文字幕在线观看| 日本v片在线高清不卡在线观看| 成人网在线免费视频| 欧美喷水一区二区| 亚洲国产精品激情在线观看| 视频一区中文字幕| 不卡的av电影| 亚洲精品一区二区三区四区高清 | 欧美私模裸体表演在线观看| 久久久久久久久久久久久久久99 | 亚洲免费av观看| 亚洲综合网站在线观看| 国产专区欧美精品| 欧美日韩精品免费| 亚洲色图20p| 东方欧美亚洲色图在线| 日韩三级视频在线观看| 亚洲一区二区三区小说| 成人精品小蝌蚪| 久久伊99综合婷婷久久伊| 午夜电影网一区| 欧洲一区在线观看| 国产精品久久久久天堂| 国产麻豆9l精品三级站| 91精品国模一区二区三区| 洋洋av久久久久久久一区| 懂色av一区二区三区免费观看| 精品国产乱码久久久久久牛牛 | 亚洲欧美日韩综合aⅴ视频| 蜜臀av性久久久久蜜臀aⅴ| 91激情在线视频| 亚洲日本乱码在线观看| 春色校园综合激情亚洲| 久久蜜桃香蕉精品一区二区三区| 男人的j进女人的j一区| 欧美日本视频在线| 一区二区三区鲁丝不卡| 精品综合免费视频观看| 欧美亚洲高清一区| 亚洲一区二区欧美激情| 欧美日韩另类国产亚洲欧美一级| 亚洲综合色区另类av| 欧美午夜寂寞影院| 午夜精品久久久久久久| 日韩区在线观看| 久久99九九99精品| 久久精品日产第一区二区三区高清版 | 国产亚洲成av人在线观看导航| 激情久久五月天| 欧美精彩视频一区二区三区| 国产一区二区三区免费| 国产亚洲一区字幕| 午夜精品福利在线| 日韩亚洲欧美综合| 美日韩黄色大片| 欧美高清视频一二三区| 91精品国产日韩91久久久久久| 亚洲三级免费观看| av激情亚洲男人天堂| 中文av一区二区| 成人av在线一区二区| 中文字幕欧美三区| av不卡免费在线观看| 亚洲欧美色图小说| 欧美无人高清视频在线观看| 亚洲一级不卡视频| 欧美中文字幕一区二区三区亚洲| 天堂在线一区二区| 精品久久久久久综合日本欧美| 日韩中文字幕av电影| 欧美变态tickle挠乳网站| 国内成+人亚洲+欧美+综合在线| 久久午夜老司机| 日韩高清在线观看| 欧美怡红院视频| 视频一区二区三区入口| 欧美va在线播放| www.99精品| 日日摸夜夜添夜夜添国产精品| 精品美女一区二区三区| 成人一级片网址| 亚洲狠狠爱一区二区三区| 69堂亚洲精品首页| 国产精品羞羞答答xxdd| 中文字幕在线不卡一区二区三区| 91精品国产色综合久久| 丁香桃色午夜亚洲一区二区三区| 一区二区三区中文字幕在线观看| 日韩一级视频免费观看在线| 粉嫩av一区二区三区粉嫩| 亚洲高清免费视频| 中文字幕一区二| 日韩午夜精品视频| 99riav一区二区三区| 一区二区三区中文在线| 91麻豆精品久久久久蜜臀| 成人av在线资源网站| 五月天亚洲婷婷| 一区二区三区免费网站| 久久久久国产精品麻豆| 欧美一区二区在线免费观看| 99久久婷婷国产综合精品电影 | 亚洲影视在线播放| 欧美一级高清片在线观看| 欧美视频一区在线观看| 成人午夜大片免费观看| 久久av中文字幕片| 亚洲成av人片一区二区三区| 亚洲国产经典视频| www国产成人| 国产午夜亚洲精品午夜鲁丝片| 欧美肥妇bbw| 在线观看国产日韩| 99视频精品免费视频| 国产一区二区女| 喷白浆一区二区| 青青国产91久久久久久| 亚洲一本大道在线| 亚洲欧美色一区| 亚洲欧洲另类国产综合| 国产日产亚洲精品系列| 欧美精品一区视频| 精品美女一区二区| 日韩免费成人网| 欧美一激情一区二区三区| 日韩欧美在线观看一区二区三区| 7777精品伊人久久久大香线蕉的 | 国产一区二区不卡在线| 久久国产麻豆精品| 久久精品国产一区二区三| 日本欧美在线看| 免费高清在线一区| 免费精品99久久国产综合精品| 老司机午夜精品| 国产一区二区三区四区五区入口 | 国产69精品久久久久777| 久久综合综合久久综合| 一区二区视频免费在线观看| 亚洲一级二级在线| 日日摸夜夜添夜夜添国产精品 | 久久人人97超碰com| 日韩一区二区电影网| 亚洲国产高清在线| 国产精品日韩成人| 中文字幕中文字幕一区| 激情文学综合网| 欧美中文字幕久久| 在线观看欧美精品| 欧美视频在线观看一区| 欧美浪妇xxxx高跟鞋交| 日韩欧美一区在线| 欧美电影免费观看高清完整版在线| 久久久久久免费网| 亚洲天堂精品在线观看| 亚洲一区二区欧美激情| 麻豆国产精品官网| 久久99精品一区二区三区| 国产不卡视频在线播放| 正在播放一区二区| 国产色综合一区| 一区二区三区波多野结衣在线观看 | 国产亚洲午夜高清国产拍精品| 国产精品另类一区|