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

📄 analyseframe.java

📁 语法分析,词法分析,三地址码解析.外加说明文档。
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	private void newFile() {
		sourFile = null;
		inTextArea.setText("");
		this.setTitle("小编译器 - Noname");
		inTextArea.setEditable(true);
		outTextArea.setText("");
		indocument = inTextArea.getDocument();
		indocument.addDocumentListener(this);
		edited = false;

	}

	/**
	 * This method initializes analyseFile
	 *
	 * @return void
	 */

	private void analyseFile() {
		saveFile();
		outTextArea.setText("");
		outTextArea.append("##Lexical analysis is on##\n");
		char c;
		int end;
		char A = 'A';
		char Z = 'Z';
		char a = 'a';
		char z = 'z';
		char xia = '_';
		char zero = '0';
		char nine = '9';
		char newline = '\n';
		char dot = '.';
		StringBuffer sb = new StringBuffer();
		int len = inTextArea.getText().length();
		if (sourFile != null) {

			char[] buffer = new char[len + 1];
			buffer = inTextArea.getText().toCharArray();
			String RQ[] = new String[len + 1];
			String CT[] = new String[len + 1];
			int i = 0;
			int j = 0;
			int m = 0;
			try {
				while (i < len) {
					c = buffer[i];
					/**
					 * key and identifier will start with character
					 */
					if (((c >= A) && (c <= Z)) || ((c >= a) && (c <= z))
							|| (c == xia)) {
						sb.delete(0, sb.length());
						while (((c >= A) && (c <= Z)) || ((c >= a) && (c <= z))
								|| (c == xia) || (c >= zero && c <= nine)) {
							sb.append(c);

							c = buffer[++i];
						}
						if (checkWord(sb.toString()).equals("ID")) {
							RQ[j++] = checkWord(sb.toString());
						} else {
							RQ[j++] = sb.toString();
						}
						CT[m++] = sb.toString();
						outTextArea.append("( " + sb.toString() + "\t,"
								+ checkWord(sb.toString()) + "\t)\n");
					} else {
						/**
						 * if current char is a number, it will be numbers
						 */
						if ((c >= zero) && (c <= nine)) {
							sb.delete(0, sb.length());
							while ((c >= zero) && (c <= nine)) {
								sb.append(c);

								c = buffer[++i];
							}
							/**
							 * if the next char is dot, it will be float,else it's integer
							 */
							if (c == dot) {
								sb.append(c);

								c = buffer[++i];
								while ((c >= zero) && (c <= nine)) {
									sb.append(c);

									c = buffer[++i];
								}
								outTextArea.append("( " + sb.toString() + "\t,"
										+ "FLOAT" + "\t)\n");
							} else {
								RQ[j++] = sb.toString();
								CT[m++] = sb.toString();
								outTextArea.append("( " + sb.toString() + "\t,"
										+ "INTEGER" + "\t)\n");
							}

						} else {
							/**
							 * character '/' is a special character
							 */
							if (c == '/') {
								sb.delete(0, sb.length());
								sb.append(c);

								c = buffer[++i];
								/*
								 *  here is note mark,
								 *  reading the next line to skip it
								 */
								if (c == '/') {

									c = buffer[++i];
									while (c != newline) {

										c = buffer[++i];
									}

									c = buffer[++i];
								} else
								/*
								 * here is note mark,
								 * reading the end mark to skip it
								 */
								if (c == '*') {
									// next *

									c = buffer[++i];
									int count = 0;
									while (count != 2) {
										count = 0;
										while (c != '*') {

											c = buffer[++i];
										}
										count++;

										c = buffer[++i];
										if (c == '/') {
											count++;
										}
									}

									c = buffer[++i];
								} else {
									/**
									 * operator '/='
									 */
									if (c == '=') {
										sb.append(c);
										outTextArea.append("( " + sb.toString()
												+ "\t," + "OPERATOR" + "\t)\n");

										c = buffer[++i];
									} else {
										outTextArea.append("( " + sb.toString()
												+ "\t," + "OPERATOR" + "\t)\n");
									}
								}
							} else {
								sb.delete(0, sb.length());
								/*
								 * identify other operator
								 * 
								 */
								switch (c) {
								case '+':
									sb.append(c);
									RQ[j++] = "OP";
									CT[m++] = sb.toString();
									c = buffer[++i];
									if (c == '=') {
										sb.append(c);
										outTextArea.append("( " + sb.toString()
												+ "\t," + "OPERATOR" + "\t)\n");

										c = buffer[++i];
									} else {
										if (c == '+') {
											sb.append(c);
											outTextArea.append("( "
													+ sb.toString() + "\t,"
													+ "OPERATOR" + "\t)\n");

											c = buffer[++i];
										} else {
											outTextArea.append("( "
													+ sb.toString() + "\t,"
													+ "OPERATOR" + "\t)\n");
										}
									}
									break;
								case '-':
									sb.append(c);

									c = buffer[++i];
									if (c == '=') {
										sb.append(c);
										outTextArea.append("( " + sb.toString()
												+ "\t," + "OPERATOR" + "\t)\n");

										c = buffer[++i];
									} else {
										if (c == '-') {
											sb.append(c);
											outTextArea.append("( "
													+ sb.toString() + "\t,"
													+ "OPERATOR" + "\t)\n");

											c = buffer[++i];
										} else {
											outTextArea.append("( "
													+ sb.toString() + "\t,"
													+ "OPERATOR" + "\t)\n");
										}
									}
									break;
								case '*':
									sb.append(c);
									RQ[j++] = "OP";
									CT[m++] = sb.toString();
									c = buffer[++i];
									if (c == '=') {
										sb.append(c);
										outTextArea.append("( " + sb.toString()
												+ "\t," + "OPERATOR" + "\t)\n");

										c = buffer[++i];
									} else {
										outTextArea.append("( " + sb.toString()
												+ "\t," + "OPERATOR" + "\t)\n");
									}
									break;
								case '%':
									sb.append(c);

									c = buffer[++i];
									if (c == '=') {
										sb.append(c);
										outTextArea.append("( " + sb.toString()
												+ "\t," + "OPERATOR" + "\t)\n");

										c = buffer[++i];
									} else {
										outTextArea.append("( " + sb.toString()
												+ "\t," + "OPERATOR" + "\t)\n");
									}
									break;
								case '>':
									sb.append(c);
									RQ[j++] = sb.toString();
									CT[m++] = sb.toString();
									c = buffer[++i];
									if (c == '=') {
										sb.append(c);

										outTextArea.append("( " + sb.toString()
												+ "\t," + "OPERATOR" + "\t)\n");

										c = buffer[++i];
									} else {
										if (c == '>') {
											sb.append(c);
											outTextArea.append("( "
													+ sb.toString() + "\t,"
													+ "OPERATOR" + "\t)\n");

											c = buffer[++i];
										} else {
											outTextArea.append("( "
													+ sb.toString() + "\t,"
													+ "OPERATOR" + "\t)\n");
										}
									}
									break;
								case '<':
									sb.append(c);

									c = buffer[++i];
									if (c == '=') {
										sb.append(c);
										RQ[j++] = sb.toString();
										CT[m++] = sb.toString();
										outTextArea.append("( " + sb.toString()
												+ "\t," + "OPERATOR" + "\t)\n");

										c = buffer[++i];
									} else {
										if (c == '<') {
											sb.append(c);
											outTextArea.append("( "
													+ sb.toString() + "\t,"
													+ "OPERATOR" + "\t)\n");

											c = buffer[++i];
										} else {
											outTextArea.append("( "
													+ sb.toString() + "\t,"
													+ "OPERATOR" + "\t)\n");
										}
									}
									break;
								case '!':
									sb.append(c);

									c = buffer[++i];
									if (c == '=') {
										sb.append(c);
										outTextArea.append("( " + sb.toString()
												+ "\t," + "OPERATOR" + "\t)\n");

										c = buffer[++i];
									} else {
										outTextArea.append("( " + sb.toString()
												+ "\t," + "OPERATOR" + "\t)\n");
									}
									break;
								case '&':
									sb.append(c);

									c = buffer[++i];
									if (c == '&') {
										sb.append(c);
										outTextArea.append("( " + sb.toString()
												+ "\t," + "OPERATOR" + "\t)\n");

										c = buffer[++i];
									} else {
										if (c == '=') {
											sb.append(c);
											outTextArea.append("( "
													+ sb.toString() + "\t,"
													+ "OPERATOR" + "\t)\n");

											c = buffer[++i];
										} else {
											outTextArea.append("( "
													+ sb.toString() + "\t,"
													+ "OPERATOR" + "\t)\n");
										}
									}
									break;
								case '|':
									sb.append(c);

									c = buffer[++i];
									if (c == '|') {
										sb.append(c);
										outTextArea.append("( " + sb.toString()
												+ "\t," + "OPERATOR" + "\t)\n");

										c = buffer[++i];
									} else {
										if (c == '=') {
											sb.append(c);
											outTextArea.append("( "
													+ sb.toString() + "\t,"
													+ "OPERATOR" + "\t)\n");

											c = buffer[++i];
										} else {
											outTextArea.append("( "
													+ sb.toString() + "\t,"
													+ "OPERATOR" + "\t)\n");
										}
									}
									break;
								case '=':
									sb.append(c);

									c = buffer[++i];
									if (c == '=') {
										sb.append(c);
										outTextArea.append("( " + sb.toString()
												+ "\t," + "OPERATOR" + "\t)\n");

										c = buffer[++i];
									} else {
										outTextArea.append("( " + sb.toString()
												+ "\t," + "ERROR" + "\t)\n");

									}
									break;
								case '^':
									sb.append(c);

									c = buffer[++i];
									if (c == '=') {
										sb.append(c);
										outTextArea.append("( " + sb.toString()
												+ "\t," + "OPERATOR" + "\t)\n");

										c = buffer[++i];
									} else {
										outTextArea.append("( " + sb.toString()
												+ "\t," + "OPERATOR" + "\t)\n");
									}
									break;
								case ',':
									sb.append(c);
									outTextArea.append("( " + sb.toString()
											+ "\t," + "SEPARATOR" + "\t)\n");

									c = buffer[++i];
									break;
								case ';':
									sb.append(c);
									RQ[j++] = sb.toString();
									CT[m++] = sb.toString();
									outTextArea.append("( " + sb.toString()
											+ "\t," + "SEPARATOR" + "\t)\n");

									c = buffer[++i];
									break;
								case '(':
									sb.append(c);
									RQ[j++] = sb.toString();
									CT[m++] = sb.toString();
									outTextArea.append("( " + sb.toString()
											+ "\t," + "SEPARATOR" + "\t)\n");

									c = buffer[++i];
									break;
								case ')':
									sb.append(c);
									RQ[j++] = sb.toString();
									CT[m++] = sb.toString();
									outTextArea.append("( " + sb.toString()
											+ "\t," + "SEPARATOR" + "\t)\n");

									c = buffer[++i];
									break;
								case '{':
									sb.append(c);
									outTextArea.append("( " + sb.toString()
											+ "\t," + "SEPARATOR" + "\t)\n");

									c = buffer[++i];
									break;
								case '}':

⌨️ 快捷键说明

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