词法分析器
场景:简略词法分析器
简单词法分析器
简单词法分析器
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; } }