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

📄 test.java

📁 编译原理词法分析程序,对pascal语言进行词法分析并生成相应的类号.
💻 JAVA
字号:
import java.io.*;

public class Test {

	public static void main(String[] args) throws IOException {
		WordAnal wa = new WordAnal();
		String readfilename = "test.txt";
		String savefilename = "code.txt";
		
		System.out.println(" The Result :");
		wa.run(readfilename, savefilename);
	}

}

class WordAnal {

	public boolean isLetter(char c) {
		if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))
			return true;
		else
			return false;
	}

	public boolean isDigit(char c) {
		if (c >= '0' && c <= '9')
			return true;
		else
			return false;
	}

	public int alphaprocess(String sb) {// 判断某一标示符是否是关键字,并返回其类别
		int i;
		for (i = 0; i < 21; i++) {
			if (this.words[i].equals(sb))
				return i;
		}
		return i;
	}

	public int search(String s) {// 查询某一单词在字母表中的类别
		for (int i = 22; i < 48; i++) {
			if (this.words[i].equals(s))
				return i;
		}
		return 31;
	}

	public void run(String Readfilename, String Savefilename) {
		try {
			FileReader fr = new FileReader(Readfilename);
			StringBuffer sb = new StringBuffer();
			FileWriter fw = new FileWriter(Savefilename);
			PrintWriter pw = new PrintWriter(fw);
			char c = (char) fr.read();
			int num;

			while (c != -1) {
				if (isLetter(c)) {
					sb = new StringBuffer();
					sb.append(c);
					c = (char) fr.read();
					while (isLetter(c) || isDigit(c)) {
						sb.append(c);
						c = (char) fr.read();
					}
					num = this.alphaprocess(new String(sb));
					System.out.println(sb + "\t,\t" + num);
					pw.flush();
					pw.println(sb + "\t,\t" + num);
					continue;
				} else if (isDigit(c)) {
					sb = new StringBuffer();
					sb.append(c);
					c = (char) fr.read();
					while (isDigit(c)) {
						sb.append(c);
						c = (char) fr.read();
					}
					num = this.search("无符号数");
					System.out.println(sb + "\t,\t" + num);
					pw.flush();
					pw.println(sb + "\t,\t" + num);
					continue;
				} else if (c == ',') {
					num = this.search(",");
					System.out.println(";" + "\t,\t" + num);
					pw.flush();
					pw.println("," + "\t,\t" + num);
					c = (char) fr.read();
					continue;
				} else if (c == ';') {
					num = this.search(";");
					System.out.println(";" + "\t,\t" + num);
					pw.flush();
					pw.println(";" + "\t,\t" + num);
					c = (char) fr.read();
					continue;
				} else if (c == ':') {
					sb = new StringBuffer();
					sb.append(c);
					c = (char) fr.read();
					if (c == '=') {
						sb.append(c);
						num = this.search(new String(sb));
						System.out.println(sb + "\t,\t" + num);
						pw.flush();
						pw.println(sb + "\t,\t" + num);
						c = (char) fr.read();
						continue;
					} else {
						num = this.search(":");
						System.out.println(":" + "\t,\t" + num);
						pw.flush();
						pw.println(":" + "\t,\t" + num);
					}
				} else if (c == '.') {
					num = this.search(".");
					System.out.println("." + "\t,\t" + num);
					pw.flush();
					pw.println("." + "\t,\t" + num);
					c = (char) fr.read();
					continue;
				} else if (c == '(') {
					num = this.search("(");
					System.out.println("(" + "\t,\t" + num);
					pw.flush();
					pw.println("(" + "\t,\t" + num);
					c = (char) fr.read();
					continue;
				} else if (c == ')') {
					num = this.search(")");
					System.out.println(")" + "\t,\t" + num);
					pw.flush();
					pw.println(")" + "\t,\t" + num);
					c = (char) fr.read();
					continue;
				} else if (c == '[') {
					num = this.search("[");
					System.out.println("[" + "\t,\t" + num);
					pw.flush();
					pw.println("[" + "\t,\t" + num);
					c = (char) fr.read();
					continue;
				} else if (c == ']') {
					num = this.search("]");
					System.out.println("]" + "\t,\t" + num);
					pw.flush();
					pw.println("]" + "\t,\t" + num);
					c = (char) fr.read();
					continue;
				} else if (c == '+') {
					sb = new StringBuffer();
					sb.append(c);
					c = (char) fr.read();
					if (c == '+') {
						sb.append(c);
						num = this.search(new String(sb));
						System.out.println(sb + "\t,\t" + num);
						pw.flush();
						pw.println(sb + "\t,\t" + num);
						c = (char) fr.read();
						continue;
					} else {
						num = this.search("+");
						System.out.println("+" + "\t,\t" + num);
						pw.flush();
						pw.println("+" + "\t,\t" + num);
					}
				} else if (c == '-') {
					sb = new StringBuffer();
					sb.append(c);
					c = (char) fr.read();
					if (c == '-') {
						sb.append(c);
						num = this.search(new String(sb));
						System.out.println(sb + "\t,\t" + num);
						pw.flush();
						pw.println(sb + "\t,\t" + num);
						c = (char) fr.read();
						continue;
					} else {
						num = this.search("-");
						System.out.println("-" + "\t,\t" + num);
						pw.flush();
						pw.println("-" + "\t,\t" + num);
					}
				} else if (c == '*') {
					num = this.search("*");
					System.out.println("*" + "\t,\t" + num);
					pw.flush();
					pw.println("*" + "\t,\t" + num);
					c = (char) fr.read();
					continue;
				} else if (c == '/') {
					num = this.search("/");
					System.out.println("/" + "\t,\t" + num);
					pw.flush();
					pw.println("/" + "\t,\t" + num);
					c = (char) fr.read();
					continue;
				} else if (c == '=') {
					num = this.search("=");
					System.out.println("=" + "\t,\t" + num);
					pw.flush();
					pw.println("=" + "\t,\t" + num);
					c = (char) fr.read();
					continue;
				} else if (c == '<') {
					sb = new StringBuffer();
					sb.append(c);
					c = (char) fr.read();
					if (c == '>') {
						sb.append(c);
						num = this.search(new String(sb));
						System.out.println(sb + "\t,\t" + num);
						pw.flush();
						pw.println(sb + "\t,\t" + num);
						c = (char) fr.read();
						continue;
					} else if (c == '=') {
						sb.append(c);
						num = this.search(new String(sb));
						System.out.println(sb + "\t,\t" + num);
						pw.flush();
						pw.println(sb + "\t,\t" + num);
						c = (char) fr.read();
						continue;
					} else {
						num = this.search("<");
						System.out.println("<" + "\t,\t" + num);
						pw.flush();
						pw.println("<" + "\t,\t" + num);
					}
				} else if (c == '>') {
					sb = new StringBuffer();
					sb.append(c);
					c = (char) fr.read();
					if (c == '=') {
						sb.append(c);
						num = this.search(new String(sb));
						System.out.println(sb + "\t,\t" + num);
						pw.flush();
						pw.println(sb + "\t,\t" + num);
						c = (char) fr.read();
						continue;
					} else {
						num = this.search(">");
						System.out.println(">" + "\t,\t" + num);
						pw.flush();
						pw.println(">" + "\t,\t" + num);
					}
				} else if (c == '{') {
					num = this.search("{");
					System.out.println("{" + "\t,\t" + num);
					pw.flush();
					pw.println("{" + "\t,\t" + num);
					c = (char) fr.read();
					continue;
				} else if (c == '}') {
					num = this.search("}");
					System.out.println("}" + "\t,\t" + num);
					pw.flush();
					pw.println("}" + "\t,\t" + num);
					c = (char) fr.read();
					continue;
				} else if (c == '#') {
					num = this.search("#");
					System.out.println("#" + "\t,\t" + num);
					pw.flush();
					pw.println("#" + "\t,\t" + num);
					c = (char) fr.read();
					continue;
				} else {
					c = (char) fr.read();
					continue;
				}
			}

			fr.close();
			pw.flush();
			pw.close();
			fw.close();
			
		} catch (IOException e) {
			System.out.println("文件操作出错!");
		}
	}

	private String[] words = { "and", "begin", "const", "div", "do", "else",
			"end", "function", "if", "integer", "not", "or", "procedure",
			"program", "read", "real", "then", "type", "var", "while", "write",
			"标识符", "无符号数", ",", ";", ":", ".", "(", ")", "[", "]", "其他", "++",
			"--", "+", "-", "*", "/", "=", "<", ">", "<>", "<=", ">=", ":=",
			"{", "}", "#" };

}

⌨️ 快捷键说明

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