1 / 48
文档名称:

中南大学软件学院编译原理实验报告.docx

格式:docx   大小:234KB   页数:48页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

中南大学软件学院编译原理实验报告.docx

上传人:iluyuw9 2019/8/3 文件大小:234 KB

下载得到文件列表

中南大学软件学院编译原理实验报告.docx

相关文档

文档介绍

文档介绍:中南大学软件学院编译原理实验报告《320144X1(编译原理)》实验报告项目名称编译原理专业班级软件工程1403学号姓名温睿诚实验成绩:批阅教师:年月日第一部分词法分析(实验一必作)实验一词法分析程序设计与实现实验报告要求详细说明你的程序的设计思路和实现过程。用有限自动机或者文法的形式对词法定义做出详细说明,说明词法分析程序的工作过程,说明错误处理的实现。设计思路:首先把单词进行分类,分为String[]keyword={"if","int"};ArrayList<String>biaoshi=newArrayList<>();ArrayList<Integer>changshu=newArrayList<>();String[]yunsuan={"+","=","-",">","==","!="};String[]spilt={",","(",")","{","}",";"};五类,分别是关键字、标识符、常数、运算符以及分隔符。然后逐个字符读入,对于关键字或标识符这类英文单词开始的单词,用空格隔开,其他可以用分隔符、运算符、空格、回车等。读入一个单词后对照一开始的五类分析出是哪一类,符合后交给语法分析器处理。实现过程:.*;;/***Createdby温睿诚on2016/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)("语法分析通过!