版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编译原理课程设计报告设计题目编译代码生成器设计学生姓名班级学号指导老师一、课程设计的目的编译原理课程兼有很强的理论性和实践性,是计算机专业的一门非常重要的专业基础课程,它在系统软件中占有十分重要的地位,是计算机专业学生的一门主修课。为了让学生能够更好地掌握编译原理的基本理论和编译程序构造的基本方法和技巧,融会贯通本课程所学专业理论知识,提高他们的软件设计能力,特设定该课程的课程设计,通过设计一个简单的PASCA曲言(EL语言)的编译程序,提高学生设计程序的能力,加深对编译理论知识的理解与应用。二、课程设计的要求1、明确课程设计任务,复习编译理论知识,查阅复印相关的编译资料。2、按要求完成课程设
2、计内容,课程设计报告要求文字和图表工整、思路清晰、算法正确。3、写出完整的算法框架。4、编写完整的编译程序。三、课程设计的内容课程设计是一项综合性实践环节,是对平时实验的一个补充,课程设计内容包括课程的主要理论知识,但由于编译的知识量较复杂而且综合性较强,因而对一个完整的编译程序不适合平时实验。通过课程设计可以达到综合设计编译程序的目的。本课程的课程设计要求学生编写一个完整的编译程序,包括词法分析器、语法分析器以及实现对简单程序设计语言中的逻辑运算表达式、算术运算表达式、赋值语句、IF语句、While语句以及do-while语句进行编译,并生成中间代码和直接生汇编指令的代码生成器。四、总体设计
3、方案及详细设计总体设计方案:1 .总体模块2.表2.1各种单词符号对应的种别码单词符号种别码单词符号种别码bginIf12:=1718Then320wile421do523lettet(letter|digit)*10=24dightdight*11=25+1326一14(27*15)28/16#0详细设计:1.1 界面导入设计case 32: 一共三个选项:case 33: choice1cifafenxicase 34: choice2yufafenxicase 35: choice3zhongjiandaimacase 33: 界面演示图一C:DOCniEll甘宾画exB恻M.w打脚耳脚
4、即邪两抑酬物耳脚耳脚曲抑阴耳蛇曲脚耳脚具聊聊chnice1一一(;if&fenxichoice2af&nxichnicc32hongjiiandaimacmrLPT3PUSE-SH-W3m-XJH.UIdQxu景2=工w后与基VUIBPU.s-sunqz:&ot茗筝II总0-t亨揖它二mttlssggtls芸=sss=茎=s=ssgg茎S茎装HSSS5茎=题.“-专3工与总As1紧喜aXSH一芸三wbsI孝-llvrrIBMpile-与二6:nd-5SJHEdIXJ.Ed三i-gl卓gssinsnisssssBsiissslssssaqvp-s-allnlze甥2015:完=Z-3-OPJpf
5、pIsio_o4.2词法分析程序(1)流程图设计(2)具体功能的具体设计1、cifafenxi()首先设置progn来接收输入的语句,以#来结束;调用扫描子程序scaner1(,每一次得到一个类型码;用switch判别相应输出;直到syn1=0为止。2、扫描子程序scaner1()扫描输入的语句首先设置3个变量:token1用来存放构成单词符号的字符串;sum1用来存放整型单词;syn1用来存放单词符号的类型码。有关scaner1()中关键点解析:while(ch=)|(ch=n)ch=progp+;忽略空格if(ch=a)|(ch=A)while(ch=a)|(ch=A)|(ch=0)&(c
6、h=9)tokenm+=ch;ch=progp+;判别标识符for(n=0;n=0)&(ch=0)&(ch=9)sum=sum*10+ch-0;ch=progp+;)(3)词法分析的运行结果输入beginx:=1;y:=1+2;end#输出t:C:D0CU1E11esttry,exe1-一11-Ueleone!t(cifafcnxiJ_-_pleaseinputa?tring:?nbeginK:=l;驴I*2;endtbeyin1)sc10)(:17J=曲)(111);26)(yIfl)(:17)=10)111J(*135211);26)(end10J(ta)语法分析程序(1)具体功能的具体设
7、计.yufafenxi()分析程序给出算术表达式文法,进行适当的文法变换输入一一表达式;输出一一表达式语法是否正确2.子程序的功能描述(3)语法分析的运行结果分析成功图-C=DacmenftsandSettingslcnin)I桌面,衽建文件末Ii,Debug*lain.bkcchoice1cifafenxichoice2iiufaFenxichoice3r=zhongjlain山鼻ina轴期*醐版KimitiK邮it稣*翻轴抑帅抑imitititit*。稣*翻轴抑林yeleone*1*TEJ-FT*F-iEIET-FT,F-iT-*FTJF-i一产分析成功JJ分析失败图:,C:PocuBen
8、tsand0式1111工式111皿。桌面1新建文件夹:11)m11八1-.石.choice1cifafenxichoice2yufafenxichoice3-ahonjjiandaina请输入您要分析的-yeleone?!字符串以1结页人为空字符;t*#E-TEJT-FTJrj-rrj-x分析失败二中间代码生成程序(1)总体描述采用递归下降(自上而下)的语法制导翻译法。在前两次试验的基础上改进。词法分析程序语法分析程序语义分析程序编译器。不断完善,不断改进。渐变的过程。单词符号及种别表单词符号种别编码单词值main1int2float3double4char5if6else7do8while9
9、l(l|d)*10内部字符串(+|-|)d*(.dd*|)(e(+|-|)dd*|)20二进制数值表示=21+22-23*24/25(26)272829,30;3132=3334=35=36!=37(2)程序结构描述(3)程序的功能描述从文件中读入表达式,输出其四元式的结果序列递归下降示意图调用scanner调用scanner调用scanner1调用语句块分析函数出错处理(4)详细功能描述voidscanner。;/阳描voidlrparser();voidstaBlock(int*nChain);/语句块voidstaString(int*nChain);/语句用voidsta(int*nC
10、hain);/语句voidfuzhi();/赋值语句voidtiaojian(int*nChain);/条件语句voidxunhuan();/循环语句char*E();/Expresiion表达式char*T();/Term项char*F();/Factor因子char*newTemp();/自动生成临时变量voidbackpatch(intp,intt);回填intmerge(intp1,intp2);/合并p1和p2voidemit(char*res,char*num1,char*op,char*num2);生成四元式voidemit(char*res,char*num1,char*op,
11、char*num2)-该函数的功能是生成一个三地址语句送到四式表中char*newTemp()一该函数的功能是会动一个新的临时变量,临时变量名产生的顺序是T1,T2,T3.intmerge(intp1,intp2)一该函数的功能是将以P1,P2为链首的两条链合并成一条链,返回时的函数值作为合并后的链首。voidbackpatch(intp,intt)该函数的功能是把P所链接的每个四元式的第四区段(result段)都回填tovoidfuzhi()该函数的功能是对赋值语句进行分析。voidtiaojian(int*nChain)该函数的功能是对条件语句进行分析。voidxunhuan()该函数的功
12、能是对循环语句进行分析。(4)结果演不图一简单语句生成四元式imdin爵赛1皂口口宾商新建文件夹,1息1RX.MflflflssnnnKiinflflussttnnttiifflflflflsssnnttHittflsssttsnnttiiaflflttSttsnnBiiflflflSttsclmicc1-cifafcnxicIhDice瞿enac::choice3-rzJion9JiandAnaJPlaa.seinwtsourcestrinff:tx=ly-y*3;1C1x323CHT1y)图二if语句的四元式生成-|oXinputyourstwteMtping士一nain3Cr+M除加号3
13、ifgoto3T2;zl图三循环语句四元式生成Pleaseyou产rwiiinOK-l;=-d;4sourcie-strin-g!J1234&=di工5tifgoto16(5)汇编生成if(strcmp(fourComi.opera,=)=0)(printf(MoveAX,%1sn,fourComi.arg1);printf(Move%5s,Axn,fourComi.result);if(strcmp(fourComi.opera,+)=0)(printf(MovAX,%1sn,fourComi.arg1);printf(ADDAx,%1sn,fourComi.arg2);printf(Mov
14、%1s,Axn,fourComi.result);if(strcmp(fourComi.opera,-)=0)(printf(MovAX,%1sn,fourComi.arg1);printf(SUBAx,%1sn,fourComi.arg2);printf(Mov%1s,Axn,fourComi.result);if(strcmp(fourComi.opera,*)=0)(printf(MovAL,%1sn,fourComi.arg1);printf(MUL%1sn,fourComi.arg2);printf(Mov%1s,Axn,fourComi.result);if(strcmp(four
15、Comi.opera,/)=0)(printf(MovAX,%1sn,fourComi.arg1);printf(DIv%1sn,fourComi.arg2);printf(Mov%1s,ALn,fourComi.result);if(strcmp(fourComi.opera,goto)=0)(printf(jmpL%1sn,i);结果演示五、课程设计的体会与总结经过一个星期的编译原理课程设计,本人在陈宏建老师的指导下,顺利完成该课程设计。通过该课程设计,收获颇多。词法分析的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相
16、应的单词符号。通过本试验的完成,更加加深了对词法分析原理的理解。通过本次试验,了解了语法分析的运行过程,主程序大致流程为:“置初值”调用scaner函数读下一个单词符号调用IrParse结束。递归下降分析的大致流程为:“先判断是否为begin”不是则“出错处理”,若是则“调用scaner函数”调用语句串分析函数“判断是否为end”不是则“出错处理”,若是则调用scaner函数“判断syn=0&kk=0是否成立”成立则说明分析成功打印出来。不成立则“出错处理”。一、对实验原理有更深的理解通过该课程设计,掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了
17、解了编译程序的生成过程、构造工具及其相关的技术对课本上的知识有了更深的理解,课本上的知识师机械的,表面的。通过把该算法的内容,算法的执行顺序在计算机上实现,把原来以为很深奥的书本知识变的更为简单,对实验原理有更深的理解。二、对该理论在实践中的应用有深刻的理解通过把该算法的内容,算法的执行顺序在计算机上实现,知道和理解了该理论在计算机中是怎样执行的,对该理论在实践中的应用有深刻的理解。三、激发了学习的积极性通过该课程设计,全面系统的理解了编译原理程序构造的一般原理和基本实现方法。把死板的课本知识变得生动有趣,激发了学习的积极性。把学过的计算机编译原理的知识强化,能够把课堂上学的知识通过自己设计的
18、程序表示出来,加深了对理论知识的理解。以前对与计算机操在这次课程设计中,我就是按照实验指导的思想来完成。加深了理解文件系统的内部功能及内部实现,培养实践动手能力和程序开发能力的目的。附录程序清单#include#include#include#includeusingnamespacestd;#defineMAX100charinputstream50;存储输入句子inttemp1=0;数组下标intright1;判断输出信息intm2=0,sum2=0;/sum用于计算运算符的个数/m用于标记输入表达式中字符的个数charJG=A;charstrMAX;/用于存输入表达式inttokene=
19、0;/左括号的标志charprog180,token18,ch1;intsyn1,p1,m1,n1,sum1;char*rwtab16=begin,if,then,while,do,end;intr1;charprog80;存放所有输入字符chartoken8;存放词组charch;帛个字符intsyn,p,m,n,i;syn:种别编码doublesum;intcount;intisSignal;是否带正负号(0不带,1负号,2正号)intisError;intisDecimal;/是否是小数doubledecimal;小数intisExp;是否是指数intindex;指数哥intisNega
20、tive;/是否带负号doubletemp;inttemp2;intrepeat;/是否连续出现+,-intnextq;intkk;临时变量的标号intntc,nfc,nnc,nnb,nna;char*rwtab9=main,int,float,double,char,if,else,do,while;structcharresult10;/字符串(字符数组)chararg110;charopera10;chararg210;fourCom20;结构体数组cifafenxi();yufafenxi();zhongjiandaima();scaner1();voide();voide1();vo
21、idt();voidt1();voidf();voidlrparser();voidstaBlock(int*nChain);/语句块voidstaString(int*nChain);/语句串voidsta(int*nChain);语句voidfuzhi();/赋值语句voidtiaojian(int*nChain);/条件语句voidxunhuan();循环语句char*E();/Expresiion表达式char*T();/Term项char*F();/Factor因子char*newTemp();/自动生成临时变量voidbackpatch(intp,intt);/回填intmerge
22、(intp1,intp2);/合并p1和p2voidemit(char*res,char*num1,char*op,char*num2);/生成四元式voidscanner();扫描voidlrparser()intnChain;nfc=ntc=1;nextq=1;if(syn=1)/mainscanner();if(syn=26)/(scanner();if(syn=27)/)scanner();staBlock(&nChain);elseprintf(缺少右括号n);elseprintf(缺少左括号n);elseprintf(缺少mainn);语句块:=语句串voidstaBlock(in
23、t*nChain)/语句块if(syn=28)/scanner();staString(nChain);backpatch(*nChain,nextq);if(syn=29)/scanner();读下一个elseprintf(缺少号n);elseprintf(缺少号n);/语句串:=语句;语句;voidstaString(int*nChain)/语高串sta(nChain);backpatch(*nChain,nextq);while(syn=31)/;scanner();sta(nChain);/backpatch(*nChain,nextq-1);)voidsta(int*nChain)/
24、语句(if(syn=10)(fuzhi();/*nChain=0;)elseif(syn=6)/if(tiaojian(nChain);)elseif(syn=8)/doxunhuan();)条件语句-if()-if(syn=6)/if(scanner();strcpy(num1,E();if(syn=26)/(scanner();strcpy(num1,E();if(syn=32)(switch(syn)(strcpy(op,);break;strcpy(op,=);break;strcpy(op,);break;strcpy(op,=);break;strcpy(op,=);break;s
25、trcpy(op,!=);break;default:printf(error);)scanner();strcpy(num2,E();strcat(num1,op);strcat(num1,num2);/nfc=nextq+1;ntc=nextq;记住if语句位置emit(0,if,num1,goto);nfc=nextq;/if中表达式为假emit(0,goto);/第一个0已回填nextqbackpatch(ntc,nextq);/ntc链接的所有四元式都回填)if(syn=27)/)scanner();staBlock(&nChainTemp);语句块*nChain=merge(nCh
26、ainTemp,nfc);)循环语句:=do语句块while条件voidxunhuan()charres10,num110,num210,op10;intnChainTemp;if(syn=8)/donnc=nextq;/记住if语句位置,emit之后nextq就变了/emit(0,if,num1,goto);scanner();staBlock(&nChainTemp);/语句块if(syn=9)/whilescanner();if(syn=26)/(scanner();strcpy(num1,E();if(syn=37)&(syn=32)switch(syn)case32:strcpy(o
27、p,);break;strcpy(op,=);break;strcpy(op,);break;strcpy(op,=);break;strcpy(op,=);break;strcpy(op,!=);break;default:printf(error);scanner();strcpy(num2,E();strcat(num1,op);strcat(num1,num2);nnb=nextq;emit(0,if,num1,goto);backpatch(nnb,nnc);nna=nextq;emit(0,goto);backpatch(nna,nextq);if(syn=27)/)scanner
28、();voidfuzhi()赋值语句只有1个操作数charres10,num10;/num操作数if(syn=10)/字符串strcpy(res,token);结果scanner();if(syn=21)/=scanner();strcpy(num,E();emit(res,num,=,);elseprintf(缺少=号n);char*E()/Expression表达式char*res,*num1,*op,*num2;res=(char*)malloc(10);num1=(char*)malloc(10);op=(char*)malloc(10);num2=(char*)malloc(10);
29、strcpy(num1,T();while(syn=22)|(syn=23)/+-(if(syn=22)/+strcpy(op,+);elsestrcpy(op,-);scanner();strcpy(num2,T();strcpy(res,newTemp();emit(res,num1,op,num2);strcpy(num1,res);returnnum1;char*T()/Term项(char*res,*num1,*op,*num2;res=(char*)malloc(10);num1=(char*)malloc(10);op=(char*)malloc(10);num2=(char*)
30、malloc(10);strcpy(num1,F();while(syn=24)|(syn=25)/*/(if(syn=24)strcpy(op,*);elsestrcpy(op,/);scanner();strcpy(num2,F();strcpy(res,newTemp();emit(res,num1,op,num2);strcpy(num1,res);returnnum1;char*F()/Factor因子(char*res;res=(char*)malloc(10);if(syn=10)/字符串(strcpy(res,token);scanner();elseif(syn=20)/二进制数(itoa(int)sum,res,10);/整数转换为字符串scanner();)elseif(syn=26)/(scanner();res=E();if(syn=27)/)(scanner();)elseisError=1;)elseisError=1;returnres;)char*newTemp()(char*p;charvarTemp10;p=(char*)malloc(10);kk+;itoa(kk,varTemp,10);strcpy(p+1,v
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中考物理复习主题单元7第18课时机械效率课件
- S版六年级上册语文表格式教案
- 《两只小象》教学反思
- 城市建设挖掘机月租赁合同范本
- 医疗器械代发工资承诺书
- 六年级语文上册部分教案
- 水文观测防尘网施工合同
- 石油化工产品进口许可合同模板
- 乐器制造厂聘用合同模板
- 房地产销售投诉处理规范
- 2024年企业业绩对赌协议模板指南
- “全民消防生命至上”主题班会教案(3篇)
- 上海市普陀区2024-2025学年六年级(五四学制)上学期期中语文试题
- 2024黔东南州事业单位第二批遴选人员调减遴选历年高频难、易错点500题模拟试题附带答案详解
- 采伐树木合同模板
- 培训师破冰游戏大全课件
- 2024版成人术中非计划低体温预防与护理培训课件
- 期中测试卷-2024-2025学年统编版语文三年级上册
- 综合素质评价平台建设方案-2024
- 广东省珠海市紫荆中学2025届高二数学第一学期期末达标检测试题含解析
- 2024屋顶分布式光伏场站设备运维规程
评论
0/150
提交评论