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

📄 grammar.java

📁 编译原理的FOR循环语句的翻译
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	private void d1() {
		Vector characterVector = new Vector();
		String rules[] = d1.rules;
		String temp = null;
		String nextElement = null;
		int tempPoint = currentPoint;
		for (int i = 0; i < rules.length; i++) {
			characterVector.clear();
			temp = rules[i];
			tokenizer = new StringTokenizer(temp, " ");
			while (tokenizer.hasMoreElements()) {
				nextElement = (String) tokenizer.nextElement();
				characterVector.addElement(nextElement);
			}
			for (int j = 0; j < characterVector.size(); j++) {
				temp = (String) characterVector.elementAt(j);
				tempToken = (Token) wordVector.elementAt(currentPoint);
				currentString = tempToken.getValue();
				tempString = currentString;
				System.out.println(temp);
				System.out.println(currentString);
				type = tempToken.getType();
				if ((type == 1) || (type == 3)) {
					currentString = "i";
				}
				if (isTerminal(temp)) {
					if (temp.equals(currentString)) {
						currentPoint++;

						isRight = true;

						if (currentString.equals("for")) {
							midcode = "BEGIN";
								
							midcodeVector.addElement(midcode);
						}
						if (isAssign == true) {
							assignVector.addElement(tempString);
						}
						if (currentString.equals(";") && (isAssign == true)) {
							isAssign = false;
							// assignVector.addElement(currentChar);
						}
						
						if (isExpression == true) {
							expressionVector.addElement(tempString);
						}
						if (currentString.equals(";") && (isExpression == true)) {
							isExpression = false;
							// expressionVector.addElement(currentChar);
						}
						
						if (currentPoint >= maxPoint) {
							return;
						}
						continue;
					} else {
						currentPoint = tempPoint;
						isRight = false;
						break;
					}

				} else {
					char c = temp.charAt(0);
					switch (c) {
					case 'E':
						e();
						break;
					case 'D':
						d1();
						break;
					case '$':
						break;

					}
				}
			}

		}

	}

	private void f() {
		Vector characterVector = new Vector();
		String rules[] = f.rules;
		String temp = null;
		String nextElement = null;
		// int tempPoint=currentPoint;
		for (int i = 0; i < rules.length; i++) {
			characterVector.clear();
			temp = rules[i];
			tokenizer = new StringTokenizer(temp, " ");
			while (tokenizer.hasMoreElements()) {
				nextElement = (String) tokenizer.nextElement();
				characterVector.addElement(nextElement);
			}

			for (int j = 0; j < characterVector.size(); j++) {
				temp = (String) characterVector.elementAt(j);
				char c = temp.charAt(0);
				switch (c) {
				case 'G':
					g();
					break;
				case 'F':
					f1();
					break;

				}
			}
		}
	}

	private void e1() {
		Vector characterVector = new Vector();
		String rules[] = e1.rules;
		String temp = null;
		String nextElement = null;
		int tempPoint = currentPoint;
		for (int i = 0; i < rules.length; i++) {
			characterVector.clear();
			temp = rules[i];
			tokenizer = new StringTokenizer(temp, " ");
			while (tokenizer.hasMoreElements()) {
				nextElement = (String) tokenizer.nextElement();
				characterVector.addElement(nextElement);
			}
			for (int j = 0; j < characterVector.size(); j++) {
				temp = (String) characterVector.elementAt(j);
				tempToken = (Token) wordVector.elementAt(currentPoint);
				currentString = tempToken.getValue();
				tempString = currentString;
				System.out.println(temp);
				System.out.println(currentString);
				type = tempToken.getType();
				if ((type == 1) || (type == 3)) {
					currentString = "i";
				}
				if (isTerminal(temp)) {
					if (temp.equals(currentString)) {
						currentPoint++;
						isRight = true;

						if (currentString.equals("for")) {
							midcode = "BEGIN";
								
							midcodeVector.addElement(midcode);
						}
						if (isAssign == true) {
							assignVector.addElement(tempString);
						}
						if (currentString.equals(";") && (isAssign == true)) {
							isAssign = false;
							// assignVector.addElement(currentChar);
						}
						
						if (isExpression == true) {
							expressionVector.addElement(tempString);
						}
						if (currentString.equals(";") && (isExpression == true)) {
							isExpression = false;
							// expressionVector.addElement(currentChar);
						}
						
						if (currentPoint >= maxPoint) {
							return;
						}
						continue;
					} else {
						currentPoint = tempPoint;
						isRight = false;
						break;
					}

				} else {
					char c = temp.charAt(0);
					switch (c) {
					case 'F':
						f();
						break;
					case 'E':
						e1();
						break;
					case '$':
						break;

					}
				}
			}

		}
	}

	private void g() {
		Vector characterVector = new Vector();
		String rules[] = g.rules;
		String temp = null;
		String nextElement = null;
		int tempPoint = currentPoint;
		for (int i = 0; i < rules.length; i++) {
			characterVector.clear();
			temp = rules[i];
			tokenizer = new StringTokenizer(temp, " ");
			while (tokenizer.hasMoreElements()) {
				nextElement = (String) tokenizer.nextElement();
				characterVector.addElement(nextElement);
			}
			for (int j = 0; j < characterVector.size(); j++) {
				temp = (String) characterVector.elementAt(j);
				tempToken = (Token) wordVector.elementAt(currentPoint);
				currentString = tempToken.getValue();
				tempString = currentString;
				System.out.println(temp);
				System.out.println(currentString);
				type = tempToken.getType();
				if ((type == 1) || (type == 3)) {
					currentString = "i";
				}
				if (isTerminal(temp)) {
					if (temp.equals(currentString)) {
						currentPoint++;
						isRight = true;

						if (currentString.equals("for")) {
							midcode = "BEGIN";
								
							midcodeVector.addElement(midcode);
						}
						if (isAssign == true) {
							assignVector.addElement(tempString);
						}
						if (currentString.equals(";") && (isAssign == true)) {
							isAssign = false;
							// assignVector.addElement(currentChar);
						}
						
						if (isExpression == true) {
							expressionVector.addElement(tempString);
						}
						if (currentString.equals(";") && (isExpression == true)) {
							isExpression = false;
							// expressionVector.addElement(currentChar);
						}
						
						if (currentPoint >= maxPoint) {
							return;
						}
						if (currentString.equals("i")) {
							return;
						}

					} else {
						currentPoint = tempPoint;
						isRight = false;
						break;
					}

				} else {
					char c = temp.charAt(0);
					switch (c) {
					case 'C':
						c();
						break;

					}
				}
			}

		}
	}

	private void f1() {
		Vector characterVector = new Vector();
		String rules[] = f1.rules;
		String temp = null;
		String nextElement = null;
		int tempPoint = currentPoint;
		for (int i = 0; i < rules.length; i++) {
			characterVector.clear();
			temp = rules[i];
			tokenizer = new StringTokenizer(temp, " ");
			while (tokenizer.hasMoreElements()) {
				nextElement = (String) tokenizer.nextElement();
				characterVector.addElement(nextElement);
			}
			for (int j = 0; j < characterVector.size(); j++) {
				temp = (String) characterVector.elementAt(j);
				tempToken = (Token) wordVector.elementAt(currentPoint);
				currentString = tempToken.getValue();
				tempString = currentString;
				System.out.println(temp);
				System.out.println(currentString);
				type = tempToken.getType();
				if ((type == 1) || (type == 3)) {
					currentString = "i";
				}
				if (isTerminal(temp)) {
					if (temp.equals(currentString)) {
						currentPoint++;
						isRight = true;

						if (currentString.equals("for")) {
							midcode = "BEGIN";
								
							midcodeVector.addElement(midcode);
						}
						if (isAssign == true) {
							assignVector.addElement(tempString);
						}
						if (currentString.equals(";") && (isAssign == true)) {
							isAssign = false;
							// assignVector.addElement(currentChar);
						}
						
						if (isExpression == true) {
							expressionVector.addElement(tempString);
						}
						if (currentString.equals(";") && (isExpression == true)) {
							isExpression = false;
							// expressionVector.addElement(currentChar);
						}
						
						if (currentPoint >= maxPoint) {
							return;
						}
						continue;
					} else {
						currentPoint = tempPoint;
						isRight = false;
						break;
					}

				} else {
					char c = temp.charAt(0);
					switch (c) {
					case 'G':
						d();
						break;
					case 'F':
						f1();
						break;
					case '$':
						break;

					}
				}
			}

		}
	}

	private void h() {
		c();
	}

	private void i() {
		Vector characterVector = new Vector();
		String rules[] = i.rules;
		String temp = null;
		String nextElement = null;
		int tempPoint = currentPoint;
		for (int i = 0; i < rules.length; i++) {
			characterVector.clear();
			temp = rules[i];
			tokenizer = new StringTokenizer(temp, " ");
			while (tokenizer.hasMoreElements()) {
				nextElement = (String) tokenizer.nextElement();
				characterVector.addElement(nextElement);
			}
			for (int j = 0; j < operator.length; j++) {
				if (currentString.equals(operator[j])) {
					currentPoint++;
					isRight = true;
					expressionVector.addElement(currentString);
					if (currentPoint >= maxPoint) {
						return;
					}
					return;
				}
			}
			currentPoint = tempPoint;
			isRight = false;

		}
	}

	private void j() {
		c();
	}

	private boolean isTerminal(String s) {
		for (int i = 0; i < terminal.length; i++) {
			if (terminal[i].equals(s)) {
				return true;
			}
		}
		return false;
	}

	private void assignProcess(Vector vector) {
		isAssignProcessed = true;
		String leftResult = (String) vector.elementAt(0);
		vector.removeElementAt(0);
		String assignOpe = (String) vector.elementAt(0);
		vector.removeElementAt(0);
		String rightResult = "";
		String midcode = "";
		if (vector.size() <= 2) {
			rightResult = (String) vector.elementAt(0);
		} else {
			expressionProcess(vector);
			rightResult = (String) operandStack.peek();
		}
		//midcode = assignOpe + "" + '\t' + "" + leftResult + "" + '\t' + "\\"
				//+ '\t' + "" + rightResult;
		midcode=leftResult+":="+rightResult;
		//midcode = "(" + midcode + ")";
		System.out.println(midcode);
		midcodeVector.addElement(midcode);
	}

	private void expressionProcess(Vector vector) {

		operandStack.clear();
		operatorStack.clear();
		operatorStack.addElement(";");
		String currentChar = "";
		String number1 = "", number2 = "", ope = "";
		String midcode = "";
		int i = 0;

		currentChar = (String) vector.elementAt(i++);
		while (!currentChar.equals(";") || !operatorStack.peek().equals(";")) {
			if (!isOperator(currentChar)) {
				operandStack.addElement(currentChar);
				currentChar = (String) vector.elementAt(i++);
			} else {
				switch (precede((String) operatorStack.peek(), currentChar)) {
				case '<':
					operatorStack.addElement(currentChar);
					currentChar = (String) vector.elementAt(i++);
					break;
				case '=':
					operatorStack.pop();
					currentChar = (String) vector.elementAt(i++);
					break;
				case '>':
					ope = (String) operatorStack.pop();
					number2 = (String) operandStack.pop();
					number1 = (String) operandStack.pop();
					operandStack.addElement((String) midResult.lastElement());
					//midcode = ope + "" + '\t' + "" + number1 + "" + '\t' + ""
							//+ number2 + "" + '\t' + "" + operandStack.peek();
					midcode=operandStack.peek()+":="+number1+""+ope+""+number2;
					//midcode = "(" + midcode + ")";
					System.out.println(midcode);
					midcodeVector.addElement(midcode);
					midResult.addElement("T" + midResult.size());
					break;

				}
			}

		}

	}

	private char precede(String operator1, String operator2) {
		int temp1 = 0, temp2 = 0;
		for (int i = 0; i < assignOperator.length; i++) {
			if (operator1.equals(assignOperator[i])) {
				temp1 = i;
			}
			if (operator2.equals(assignOperator[i])) {
				temp2 = i;
			}
		}
		return priority[temp1][temp2];
	}

	private boolean isOperator(String s) {
		for (int i = 0; i < operator1.length; i++) {
			if (s.equals(operator1[i])) {
				return true;
			}
		}
		return false;
	}

	private void conditionProcess(Vector vector) {
		isExpressionProcessed = true;
		int length = vector.size();
		Vector leftVector = new Vector();
		Vector rightVector = new Vector();
		String expressionOpe = "";
		String leftResult = null, rightResult = null;
		String midcode = "";
		int i = 0;
		for (i = 0; i < length; i++) {
			if (isExpressionOperator((String) vector.elementAt(i))) {
				expressionOpe = (String) vector.elementAt(i);
				i++;
				break;
			} else {
				leftVector.addElement(vector.elementAt(i));
			}
		}
		leftVector.addElement(";");
		for (; i < length; i++) {
			rightVector.addElement(vector.elementAt(i));
		}
		rightVector.addElement(";");
		if (leftVector.size() <= 2) {
			leftResult = (String) leftVector.elementAt(0);

		} else {
			expressionProcess(leftVector);
			leftResult = (String) operandStack.peek();
		}
		if (rightVector.size() <= 2) {
			rightResult = (String) rightVector.elementAt(0);
		} else {
			expressionProcess(rightVector);
			rightResult = (String) operandStack.peek();
		}
		//midcode = expressionOpe + "" + '\t' + "" + leftResult + "" + '\t' + ""
				//+ rightResult + '\t' + "" + midResult.lastElement();
		//midcode = "(" + midcode + ")";
		midcode=midResult.lastElement()+":="+leftResult+expressionOpe+rightResult;
		System.out.println(midcode);
		midcodeVector.addElement(midcode);

		//expressionOpe = "JNP";
		leftResult = (String) midResult.lastElement();
		//length = midcodeVector.size();
		//i=midcodeVector.size()-1;
		//midcode = expressionOpe + "" + '\t' + "" + leftResult + "" + '\t'
				//+ "\\" + '\t' ;
		//midcode = "(" + midcode ;
		midcode="if ("+leftResult+")"+"   "+"goto ";
		midcodeVector.addElement(midcode);
		midcode="goto ";
		midcodeVector.addElement(midcode);
		midResult.addElement("T" + midResult.size());

	}

	private boolean isExpressionOperator(String s) {
		for (int i = 0; i < operator.length; i++) {
			if (s.equals(operator[i])) {
				return true;
			}
		}
		return false;
	}
	
	private void output(){
		File file =new File("output.txt");
		BufferedWriter bw=null;
		int length=midcodeVector.size();
		String lineSeparator=System.getProperty("line.separator");
		String temp="";
		if(file.exists()){
			file.delete();
			try {
				file.createNewFile();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		else{
			try {
				file.createNewFile();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		try {
			bw=new BufferedWriter(new FileWriter(file));
			for(int i=0;i<length;i++){
				temp=(String)midcodeVector.elementAt(i);
				temp=""+i+": "+temp;
				bw.write(temp);
				bw.write(lineSeparator);
			}
			bw.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

⌨️ 快捷键说明

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