文档介绍:《34X1(编译原理)》实验报告项目名称编译原理专业班级软件工程1403学号姓名温睿诚实验成绩:批阅教师:年月日第一部分词法分析(实验一必作)实验一词法分析程序设计与实现实验报告要求详细说明你的程序的设计思路和实现过程。用有限自动机或者文法的形式对词法定义做出详细说明,说明词法分析程序的工作过程,说明错误处理的实现。设计思路:首先把单词进行分类,分为String[]keyword={"if","int"};ArrayList<String>biaoshi=newArrayList<>();ArrayList<Integer>changshu=newArrayList<>();String[]yunsuan={"+","=","-",">","==","!="};String[]spilt={",","(",")","{","}",";"};五类,分别是关键字、标识符、常数、运算符以及分隔符。然后逐个字符读入,对于关键字或标识符这类英文单词开始的单词,用空格隔开,其他可以用分隔符、运算符、空格、回车等。读入一个单词后对照一开始的五类分析出是哪一类,符合后交给语法分析器处理。实现过程:import.*;import;/***Createdby温睿诚on/5/11/0011.*/lassCiFa{String[]keyword={"if","int"};ArrayList<String>biaoshi=newArrayList<>();ArrayList<Integer>changshu=newArrayList<>();String[]yunsuan={"+","=","-",">","==","!="};String[]spilt={",","(",")","{","}",";"};//记录结果的符号表//用什么数据结构呢?//目前单词StringBuilderstr=newStringBuilder("");//下一个要读的字符charnow;//一个栈ArrayList<Character>stack=newArrayList<>();privatevoidput(){(newCharacter(now));}privatecharpop(){if(()>0){return((Character)(()-1)).charValue();}else{return0;}}//错误信息StringerrorMsg;Readerreader=null;publicstaticvoidmain(String[]args){CiFacifa=newCiFa();(args[0]);}privatevoidfenXi(Stringfilename){//读取文件Filefile=newFile(filename);try{reader=newInputStreamReader(newFileInputStream(file));}catch(FileNotFoundExceptione){("读取文件字符失败!");();}//不断读取字符直到结束getChar();intresult;//使用预测分析法YuFayuFa=newYuCeFenXi();booleanflag=true;while(!(now<0||now>=65535)){//根据返回数值查找或插入,错误则打印并提示。正确则记录到mapresult=read();if(result!=6){("("+result+",\""+str+"\")");if(!(result,())){flag=false;("语法分析出错!出错单词:"+());}}else{("("+errorMsg+",\""+str+"\")");}(0,());}//结束booleantempResult=false;if(yuFa!=null)tempResult=(6,"#");if(tempResult&&flag)("语法分析通过!");}//判断是否为数字privatebooleanisDigit(){if('0'<=now&&now<='9')returntrue;elsereturnfalse;}//判断是否为字母privatebooleanisLetter(){if(('a'<=now&&now<='z')||('A'<=now&&now<='Z'))returntrue;elsereturnfalse;}//赋值下一字符给now,返回true表示读到空格、换行等空白字符privatebooleangetChar(){booleanflag=false;try{now=(char)();while(now==0||now=='\t'||now=='\r'||now=='\n'||now