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

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

ID:31683179

大小:72.18 KB

页数:16页

时间:2019-01-17

中南大学软件学院编译原理实验报告2_第1页
中南大学软件学院编译原理实验报告2_第2页
中南大学软件学院编译原理实验报告2_第3页
中南大学软件学院编译原理实验报告2_第4页
中南大学软件学院编译原理实验报告2_第5页
资源描述:

《中南大学软件学院编译原理实验报告2》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、中南大学软件学院编译原理实验报告实验:实验二班级:姓名:学号:实验二预测分析法设计与实现一、实验目的加深对语法分析器工作过程的理解;加强对预测分析法实现语法分析程序的掌握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法翻译。二、实验内容在实验1的基础上,用预测分析法编制语法分析程序,语法分析程序的实现可以采用任何一种编程语言和工具。三、实验要求:1.对语法规则有明确的定义;2.编写的分析程序能够对实验一的结果进行正确的语法分析;3.对于遇到的语法错误,能够做击简单的错误处理,给出简单的错误提示,保证顺利完成语法分

2、析过程;4.实验报告要求用文法的形式对语法定义做出详细说明,说明语法分析程序的工作过程,说明错误处理的实现。实验步骤1.定义目标语言的语法规则;2.求解预测分析方法需要的符号集和分析表;3.依次读入实验一的分析结果,根据预测分析的方法进行语法分析,直到源程序结束;4.对遇到的语法错误做岀错误处理。五、设计思路和实现过程木实验是使用LL(1)方法实现的语法分析器,我是用的是MFC实现的设计思路分为以下几步:1、先读入输入串,判断输入串有没有语法错误,如有语法错误,提示第几个语法错误,退出;2、将“或”语句拆开,如果有左递归,消除左递归;3、判断可以产牛空字符的

3、非终结符,将其储存在一个数组中;4、计算非终结符的first集,follow集;5>计算select集;6、创建预测分析表;7、对照预测分析表对句子进行分析,输岀每一步的操作。六、错误处理1、如果未输入文法,则提示输入文法;2、如果文法有错误,既不是以类似于“S->”开头的,则提示错误发生在第几行;3、如果文法不是I丄(1)文法,程序会予以提示;4、如果句子不是以结尾的,或者句子屮含有大写字母的,予以提示;5、计算follow集时,如果follownumkey大丁•某个值,则可认定求follow集陷入死循环,即有右递归或间接右递归,此时跳岀去,终止死循环。七

4、、关键代码1、voidCGranunaana1ysisD1g::OnChange(){intn=0;UpdateDataO;inti,nLineCount=mgranuna1.GetLineCount();//mgramma是与edit控件关联的变量CStringstrText;//Dumpeverylineoftextoftheeditcontrol.for(i=0;i

5、i));m_grammal.GetLine(i,strText.GetBuffer(len),Ion);strText.ReleaseBuffer(len);if(strText.IsEmpty())break;if(!getin(i,strText))//整理return;//MessageBox(strText);〃输出得到的每彳亍数据}mgramma.Empty();Delpare();//消除左递归dcduceO_colec();//将所有能推导出0的非终符放在数组colcc0[30]中SelectCollection();//创建select集Es

6、tabpreanatabO;//创建预测分析表key二1;boolCGrammaanalysisDlg::gctin(inti,CStringstrLino)//整理{char1ine_no=i+‘O';if(!isupper(strLine[0])

7、

8、strLine[l]l--

9、strLine[2]I->'){CStringerror二"TheSyntaxonline/z+(CString)lineno+〃iswrong!pleasecheckandenteragain:〃;MessageBox(error);returnfalse;}else{in

10、tm=0;for(intj二0;j

11、'){stotax[sto_tax][m++]=strLine[j];continue;}else{stotax[sto_tax][m]=,‘;sto_tax++;stotax[stotax][0]=stotax[stotaxT][0];stotax[sto_tax][l]=stotax[sto_tax-l][1];stotax[stotax][2]=stotax[sto_tax-l][2];m=3;continue;}}stotax[

12、stotax][m]=,‘;stotax++;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。