文档介绍:《 320144X1 (编译原理) 》实验报告项目名称编译原理专业班级软件工程 1403 学号姓名温睿诚实验成绩: 批阅教师: 年月日第一部分词法分析(实验一必作) 实验一词法分析程序设计与实现实验报告要求详细说明你的程序的设计思路和实现过程。用有限自动机或者文法的形式对词法定义做出详细说明,说明词法分析程序的工作过程,说明错误处理的实现。设计思路: 首先把单词进行分类,分为 String[] keyword ={ "if" , "int" }; ArrayList<String> biaoshi = new ArrayList<>() ; ArrayList<Integer> changshu = new ArrayList<>() ; String[] yunsuan ={ "+" , "=" , "-" , ">" , "==" , "!=" }; String[] spilt ={ "," , "(" , ")" , "{" , "}" , ";" }; 五类,分别是关键字、标识符、常数、运算符以及分隔符。然后逐个字符读入, 对于关键字或标识符这类英文单词开始的单词, 用空格隔开, 其他可以用分隔符、运算符、空格、回车等。读入一个单词后对照一开始的五类分析出是哪一类,符合后交给语法分析器处理。实现过程: import .* ; import ; /** * Created by 温睿诚 on 2016/5/11/0011. */ public class CiFa { String[] keyword ={ "if" , "int" }; ArrayList<String> biaoshi = new ArrayList<>() ; ArrayList<Integer> changshu = new ArrayList<>() ; String[] yunsuan ={ "+" , "=" , "-" , ">" , "==" , "!=" }; String[] spilt ={ "," , "(" , ")" , "{" , "}" , ";" }; // 记录结果的符号表// 用什么数据结构呢? // 当前单词 StringBuilder str = new StringBuilder( ""); // 下一个要读的字符 char now ; // 一个栈 ArrayList<Character> stack = new ArrayList<>() ; private void put (){ stack .add( new Character( now )); } private char pop (){ if( stack .size() >0){ return ((Character) stack .remove( stack .size() -1 )).charValue() ; } else { return 0; }} // 错误信息 String errorMsg ; Reader reader = null; public static void main (String[] args) { CiFa cifa = new CiFa() ; (args[ 0 ]);} private void fenXi (String filename) { // 读取文件 File file = new File(filename) ; try { reader = new InputStreamReader( new FileInputStream(file)) ; } catch (FileNotFoundException e){ System. out .println( " 读取文件字符失败! "); () ;} // 不断读取字符直到结束 getChar() ; int result ; // 使用预测分析法 YuFa yuFa = new YuCeFenXi() ; boolean flag = true; while (!( now <0 || now >= 65535 )){ // 根据返回数值查找或插入,错误则打印并提示。正确则记录到 map result = read() ; if (result !=6){ System. out .println( "(" + result +", \""+ str +" \" )"); if (!(result , str .toString())) { flag = false; System. err .println