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

📄 tokenmain.java

📁 java词法分析程序
💻 JAVA
字号:
package com.Compiler.token;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class TokenMain {

	private char tempChar;
	private StringBuffer tempToken = new StringBuffer();
	private StringToken st; // = new StringToken("three quit");

	List KeyTable = new ArrayList();
	List SignTable = new ArrayList();
	List BoundTable = new ArrayList();

	List resultTable = new ArrayList();

	public void KeyTable() {
		KeyTable.add(new Token(0, "while"));
		KeyTable.add(new Token(0, "if"));
		KeyTable.add(new Token(0, "else"));
		KeyTable.add(new Token(0, "switch"));
		KeyTable.add(new Token(0, "case"));
		KeyTable.add(new Token(0, "int"));
		KeyTable.add(new Token(0, "char"));
		KeyTable.add(new Token(0, "float"));
		KeyTable.add(new Token(0, "double"));
		KeyTable.add(new Token(0, "byte"));
		KeyTable.add(new Token(0, "main"));

	}

	public void signTable() {
		SignTable.add(new Token(3, "+"));
		SignTable.add(new Token(3, "-"));
		SignTable.add(new Token(3, "*"));
		SignTable.add(new Token(3, "/"));
		SignTable.add(new Token(3, "<"));
		SignTable.add(new Token(3, ">"));
		SignTable.add(new Token(3, "="));
		SignTable.add(new Token(3, "<="));
		SignTable.add(new Token(3, ">="));
		SignTable.add(new Token(3, "%"));
		SignTable.add(new Token(3, "=="));

	}

	public void BoundTable() {
		BoundTable.add(new Token(4, "{"));
		BoundTable.add(new Token(4, "}"));
		BoundTable.add(new Token(4, "("));
		BoundTable.add(new Token(4, ")"));
		BoundTable.add(new Token(4, ";"));
	}

	public TokenMain() {
		KeyTable();
		signTable();
		BoundTable();
	}

	public boolean isLetter(char c) {
		int ascii = (int) c;
		if ((ascii >= 97 && ascii <= 122) || (ascii >= 65 && ascii <= 90)) {
			return true;
		}
		return false;
	}

	public boolean isDigit(char c) {
		int ascii = (int) c;
		if (ascii >= 48 && ascii <= 57) {
			return true;
		}
		return false;
	}

	public void exeCute() {
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(
					new FileInputStream(new File("test.txt"))));
			String str;
			while ((str = br.readLine()) != null) {
				st = new StringToken(str);
				while (st.hasChar()) {
					tempChar = st.getChar();
					while (tempChar == ' ' && st.hasChar()) {
						st.addChar();
						tempChar = st.getChar();
					}
					if (isLetter(tempChar)) {
						while ((isLetter(tempChar) || isDigit(tempChar))
								&& st.hasChar()) {
							tempToken.append(tempChar);
							st.addChar();
							tempChar = st.getChar();
						}
						if (isKey(tempToken.toString())) {
							resultTable.add(new Token(0, tempToken.toString()));
						} else {
							resultTable.add(new Token(1, tempToken.toString()));
						}
						tempToken = new StringBuffer();
					} else if (isDigit(tempChar)) {
						while (isDigit(tempChar) && st.hasChar()) {
							tempToken.append(tempChar);
							st.addChar();
							tempChar = st.getChar();
						}
						resultTable.add(new Token(2, tempToken.toString()));
						tempToken = new StringBuffer();
					} else if (isSign(tempChar)) {
						resultTable.add(new Token(3, String.valueOf(tempChar)));
						st.addChar();
						tempToken = new StringBuffer();
					} else if (isBound(tempChar)) {
						resultTable.add(new Token(4, String.valueOf(tempChar)));
						st.addChar();
						tempToken = new StringBuffer();
					} else {

						System.out.println("error:" + st.getChar());
						st.addChar();
					}
				}
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public boolean isKey(String temp) {
		Iterator it = KeyTable.iterator();
		while (it.hasNext()) {
			if (temp.equals(((Token) it.next()).getTokenValue())) {
				return true;
			}
		}
		return false;
	}

	public boolean isSign(char tempChar) {
		Iterator it = SignTable.iterator();
		while (it.hasNext()) {
			if (tempChar == ((Token) it.next()).getTokenValue().charAt(0)) {
				return true;
			}
		}
		return false;
	}

	public boolean isBound(char tempChar) {
		Iterator it = BoundTable.iterator();
		while (it.hasNext()) {
			if (tempChar == ((Token) it.next()).getTokenValue().charAt(0)) {
				return true;
			}
		}
		return false;
	}

	public void printToken() {
		Iterator it = resultTable.iterator();
		while (it.hasNext()) {
			Token temp = (Token) it.next();
			System.out.print(reClass(temp.getTokenClass()) + "  ");
			System.out.println(temp.getTokenValue());
		}
	}

	public String reClass(int i) {
		if (i == 0) {
			return "保留字";
		} else if (i == 1) {
			return "标识符";
		} else if (i == 2) {
			return "常数";
		} else if (i == 3) {
			return "运算符";
		} else if (i == 4) {
			return "界符";
		}
		return "";
	}

	public static void main(String[] args) {
		TokenMain tm = new TokenMain();
		tm.exeCute();
		tm.printToken();
	}
}

⌨️ 快捷键说明

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