您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > 编译原理课程设计-李永峰-计算机172202H-11
实验报告课程名称编译原理实验名称逻辑表达式编译器-中间代码生成姓名李永峰学号201722030211日期:成绩一、实验目的:编写一个完整的编译程序,包括语法分析器、语义分析过程以及实现对简单程序设计语言中的逻辑运算表达式进行编译,生成中间代码,对中间代码优化后完成目标代码的生成。算术表达式的文法为:|||||()SSTTTTFFFFfalsetrueS二、实验内容1)可以输入要编译的文件名,从给定文件中读取编译源程序;2)能进行功能选择词法分析、语法分析、中间代码生成;3)采用自底向上的LR分析方法进行语法分析;4)语义分析阶段主要完成逻辑表达式结构的判断;5)中间代码通过四元式形式表示;6)完成中间代码优化(基本块优化);7)完成目标代码的生成。输出形式:有中文提示界面要求:有合理的提示,每个功能可以设立菜单,根据提示,完成相应的功能。存储结构:根据自己的功能要求,在提交的资料中指明用到的存储结构。测试数据:1)全部合法数据2)整体非法数据3)局部非法数据三、实验步骤#includeiostream#includestringusingnamespacestd;voidxunhu(stringstr[],intsum){intbiao=0;//每个表达利项的个数stringbiaoda[100];intbiao1[100];intbiao2=0;//表达式的个数for(inti=0;isum;i++){if(str[i]===){i=i-1;do{biaoda[biao]=str[i];i++;biao++;}while(str[i]!=;);biao1[biao2]=biao;biao2++;}}intbiao3=0;intzuokuo=0;intyoukuo=0;intt=0;intti=0;stringtisheng[100];stringT[14]={T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14};for(intj=0;jbiao2;j++){for(intn=biao3;nbiao1[j];n++)tisheng[n]=biaoda[n];ti=biao1[j];for(intk=biao3;kti;k++){if(tisheng[k]==()zuokuo=k;if(tisheng[k]==)){youkuo=k;cout(tisheng[zuokuo+2],tisheng[zuokuo+1],tisheng[youkuo-1],T[t])endl;tisheng[zuokuo]=T[t];for(intm=1;mti-4;m++){tisheng[m+zuokuo]=tisheng[youkuo+m];}ti=ti-4;t=t+1;k=0;}}for(intk1=biao3;k1ti;k1++){if(tisheng[k1]==&||tisheng[k1]==|||tisheng[k1]==flase||tisheng[k1]==true){cout(tisheng[k1],tisheng[k1-1],tisheng[k1+1],T[t])endl;tisheng[k1-1]=T[t];for(intm=1;mti-2;m++){tisheng[m+k1-1]=tisheng[k1+1+m];}ti=ti-2;t=t+1;k1=0;}}}}intmain(){stringstr[1000];cout输入程序片段:endl;intx=0;do{cinstr[x];x++;}while(str[x-1]!=#);xunhu(str,x-1);return0;}四、实验结果五、实验心得通过这次课程设计明白了一个大的程序需要通过各部分的相互配合才能很好的运行,中间表达式的生成需要通过相关的算术表达式才能运行,中间遇到过四元表达式的问题通过和小组其他成员商量也得到了解决
本文标题:编译原理课程设计-李永峰-计算机172202H-11
链接地址:https://www.777doc.com/doc-6030438 .html