`

简单词法分析器

    博客分类:
  • JAVA
 
阅读更多
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.IntBuffer;

public class hxx {

	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) {
		File inFile = null;
		String str = null;
		String checkletter = "";
		String checknumber = "";
		String caltory = "";
		String fengefu = "";
		String s[] = { "main", "int", "char", "if", "while", "break",
				"continue", "do", "return", "for", "printf", "scanf" };
		// String caltory[]={"=","+",">","-","*","/","<",">=","<=","!=","=="};
		// String
		int lengh = 0;
		try {
			inFile = new File("File.txt");
			// RandomAccessFile indata=new RandomAccessFile(inFile,"r");
			BufferedReader inBuffer = new BufferedReader(new FileReader(inFile));
			while ((str = inBuffer.readLine()) != null) {
				lengh = str.length();
				char data[] = new char[lengh];
				data = str.toCharArray();
				for (int i = 0; i < lengh; i++) {
					if (checkletter != "" && isletter(data))
						checkletter += data;
					if (checkletter == "" && isletter(data))
						checkletter += data;
					if (checkletter != "" && isnumber(data))
						checkletter += data;
					if (checkletter == "" && isnumber(data))
						checknumber += data;
					if (checknumber != "" && data == '.')
						checknumber += data;
					if (iscal(data)) {
						if (checkletter != "") {
							int j;
							for (j = 0; j < s.length; j++)
								if (checkletter.equalsIgnoreCase(s[j])) {
									System.err.println("(1,\"" + s + "\")");
									break;
								}
							if (j == s.length)
								System.err.println("(2,\"" + checkletter
										+ "\")");
							checkletter = "";
						}
						if (checknumber != "") {
							System.err.println("(3,\"" + checknumber + "\")");
							checknumber = "";
						}
						caltory += data;
						if (data == 60 || data == 62 || data == 33
								|| data == 61 || data == 43) {
							if (data == 61) {
								caltory += data;
								System.err.println("(4,\"" + caltory + "\")");
								i = i + 1;
							}
							// else if(data==43)
							else if (data == 43) {
								if (data == 43) {
									caltory += data;
									System.err.println("(4,\"" + caltory
											+ "\")");
									i = i + 1;
								} else
									System.err.println("(4,\"" + caltory
											+ "\")");
							} else
								System.err.println("(4,\"" + caltory + "\")");
							// if(data==43)

							// else System.err.println("(4,\""+caltory+"\")");
						} else
							System.err.println("(4,\"" + caltory + "\")");
						caltory = "";
					}
					if (isfengefu(data)) {
						if (checkletter != "") {
							int j;
							for (j = 0; j < s.length; j++)
								if (checkletter.equalsIgnoreCase(s[j])) {
									System.err.println("(1,\"" + checkletter
											+ "\")");
									break;
								}
							if (j == s.length)
								System.err.println("(2,\"" + checkletter
										+ "\")");
							checkletter = "";
						}
						if (checknumber != "") {
							System.err.println("(3,\"" + checknumber + "\")");
							checknumber = "";
						}
						fengefu += data;
						if (data != 32)
							System.err.println("(5,\"" + fengefu + "\")");
						fengefu = "";
					}
				}
				if (checkletter != "") {
					System.err.println("(2,\"" + checkletter + "\")");
					checkletter = "";
				}
				if (checknumber != "") {
					System.err.println("(2,\"" + checkletter + "\")");
					checknumber = "";
				}

			}
			inBuffer.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	public static boolean isnumber(char c) {
		if (47 < c && c < 58)
			return true;
		else
			return false;
	}

	public static boolean isletter(char c) {
		if (c > 64 && c < 91 || c > 96 && c < 123)
			return true;
		else
			return false;
	}

	public static boolean iscal(char c) {
		if (c == 43 || c == 33 || c == 42 || c == 45 || c == 47 || c == 60
				|| c == 61 || c == 62)
			return true;
		else
			return false;
	}

	public static boolean isfengefu(char c) {
		if (c == 32 || c == 44 || c == 59 || c == 40 || c == 41 || c == 123
				|| c == 125 || c == 38 || c == 34 || c == 38 || c == 91
				|| c == 93 || c == 58)
			return true;
		else
			return false;
	}

}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics