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; } }
相关推荐
自己照着教材上编写的简单词法分析器 仅供参考!
简单的词法分析器,实现简单的识别功能,不是很复杂;
在eclipse、Java环境下实现简单词法分析器: 1.输入:待词法分析的txt文档路径 2.输出: ① 单词串:每一个单词串均为一个WordString对象,所有单词串存放在List中(wordString) ② 符号表:存放在List中...
用java语言实现的简单词法分析器 实现了界面操作
源代码 简单的词法分析器 有助于理解基本原理
纯C语言写的词法分析器 编译原理 第二个上机实验 分享一下
非常基础的词法分析器,能够将各个单词分开,判断各个单词的类型,并输出相应的tokens和符号表。还存在一些BUG,希望大家不吝赐教。
编译原理的简单词法分析器
编译原理实验 杭电 简单的词法分析器 c语言编写
用C#编写的词法分析器,简单实用,适合上交编译原理实验作业,并附有实验报告,用VS2010即可打开原工程.绝对实用!
词法分析程序,能识别出所有的关键字、标识符、常数、运算符(包括复合运算符,如++)、界符;能过滤掉源程序中的注释、空格、制表符、换行符;并且能够对一些词法规则的错误进行必要的处理,如:标识符只能由字母、...
压缩文档里包括源代码和PASCAL词法分析器的设计要求等。
前几天自己编写了一个简单的C的词法分析器,供有需要的朋友参考。可输入一个需要分析的文件名和将要存储分析结果的文件名,分析结果文件输出
简单词法分析器的实现源码,流程图,算法思想,实验结果 //存放关键字 string key[12] = { "int","for","break","switch","case","do","if","else","return","while","void","default"}; //关键字种别码 ............
简单词法分析器 返回token 支持文本文件的分析 c++编写
java语言写的C语言词法分析器。亲测可用,自己的编译原理作业