ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:342.10KB ,
资源ID:16477921      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16477921.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理课设文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

编译原理课设文档格式.docx

1、附录:(计算机科学与技术专业 2012年级 2班 学号)Email: 9548817301 引言编译原理是将高级程序设计语言翻译成低级语言的软件,包括的过程有词法分析、语法分析、语义分析、中间代码生成、代码生成和目标代码生成。词法分析和语法分析是编译过程的第一个和第二个阶段,是编译的基础。词法分析是将字符序列转换为单词序列的过程,语法分析是在词法分析的基础上将单词序列组合成各类语法短语,目的是为了掌握自顶向下的分析方法以及LL(1)文法中堆栈的实现过程。2 实验内容基本实验部分词法分析程序设计【实验1.1】实验目的1、理解词法分析在编译程序中的作用;2、加深对有穷自动机模型的理解;3、掌握词法

2、分析程序的实现方法和技术。【实验1.2】设计思想词法分析在程序中的实现主要包括三个模块,第一个模块是扫描ID,关键字包含在其中;第二个模块是扫描NUM;第三个模块是扫描符号。对每个单词进行扫描时,先判定是不是ID或者关键字,若是,则置ID或关键字的类别码;若不是再判定是不是NUM,若是,则置NUM的类别码;若不是再判定是不是符号,若是,则置符号的类别码。当不满足以上条件,则置种别码为-1并输出ERROR。全局变量:char chter200; /待扫描的字符串 char token10; /令牌,存放单词自身的字符串 char ch; /用于扫描的每个字符 int syn; /单词种别码 in

3、t sum=0; /整形常数函数模块: void scan() /扫描if(ch=a&chAZ) /扫描IDfor(n=0;n09) /扫描NUMelse switch(ch) /扫描符号详细的流程图如下图所示:【注:因为流程图过大,所以流程图采用VISIO绘制,图片过大导致下图不清晰,故附上一份词法分析流程图的vsd文件和一份jpg文件,望老师谅解】图1 词法分析程序流程图【实验1.3】主要源代码该程序的主要部分如下:void scan()/扫描,对字符串进行逐一扫描9;n+)/先将令牌清空tokenn=NULL;ch=chterp+;while(ch= )/当扫描到空格时,空格有分隔两个单

4、词的作用ch=chterp;p+;)/当扫描到单词首字符为字母时m=0;while(ch/首字符后的字符为字母后数字tokenm+=ch;tokenm+=0;p-;syn=10;/因为扫描到的ID有可能有关键字的情况,所以要进行关键字判定syn=n+1;break;/当扫描到单词首字符为数字时sum = 0;/首字符后的字符也为数字时sum=sum*10+ch-syn=11;if(sum32767)/定义的整数不能超过int类型的范围,否则种别码为-1syn=-1;else switch(ch)/当扫描到的单词首字符为以下列出的符号时case+:syn=13;token0=ch;-syn=14

5、;*syn=15;/syn=16;if(ch=/首字符为:第二个字符为=时syn=18;elsesyn=17;/首字符为时syn=21;else if(ch=syn=22;syn=20;/首字符为syn=24;syn=23;syn=25;syn=26;(syn=27;)syn=28;#syn=0;default: syn=-1;【实验1.4】调试与测试数据输入字符不在分析范围中的错误界面:错误分析:“32769”超出了int类型,“?”不在分析符号中程序错误导致的出错:出错原因以及解决:最开始编写程序时,在扫描数字部分没有进行sum置0的操作,导致后面的整数包含了前面扫描过的整数,在我的思考和

6、同学的帮助下解决了这个BUG。另外我在编程中还出现了很多的错误,就不再一一列举,后来均在书籍和同学指导下解决了错误。以下为正确执行情况下的界面:开始界面:输入界面:输出界面:开放实验部分(可选)基于预测分析方法的表达式语法分析器【实验4.1】实验目的了解预测分析器的基本构成及用自顶向下的预测法对表达式进行语法分析的方法,掌握预测语法分析程序的手工构造方法。【实验4.2】设计思想已知文法GS:SATABUT+AT|$U*BU|$B(S)|m根据LL(1)文法的判定条件:对每个非终结符A的两个不同的产生式,A,A,满足SELECT(A)SELECT(A)=,其中、不同时能*,那么这个文法就是LL(

7、1)文法。由此我们可以通过计算SELECT集来判断,其步骤为:1、计算FIRST集;2、计算FOLLOW集;3、计算SELECT集;4、判断文法GS是否为LL(1)文法。非终结符FIRST集FOLLOW集SABUT(,m*,$+,$),#+,),#+,*,),#表1 FIRST集和FOLLOW集根据FIRST集和FOLLOW集,可求出相同左部的SELECT交集:SELECT(T+AT)SELECT(T$)=+),#=SELECT(U*BT)SELECT(U$)=*+,),#=SELECT(B(S)SELECT(Bm)=(m=所以该文法是LL(1)文法预测分析方法是自顶向下分析的一种方法,而预测

8、分析表是预测分析程序的重要组成部分。对每个终结符或#用a表示,若aSELECT(A),则把A放入MA,a中。把所有无定义的MA,a标上出错标记(可用空白表示),由此得到的GS的预测分析表为:+*(m#ATBU(S)m$*BU+AT表1 预测分析表语法分析在程序中的实现主要包括8个部分:1、当栈顶元素为非#的终结符+、*、(、)或m时,若输入串和栈顶元素相同,输入串推进一位且栈顶元素出栈,为其他终结符时显示“ERROR”;2、当栈顶元素为S时,若输入串为m,栈顶元素出栈且TA进栈,若输入串为(,栈顶元素出栈且TA进栈,若为其他输入串,显示“ERROR”;3、当栈顶元素为A时,若输入串为m,栈顶元

9、素出栈且UB进栈,若输入串为(,栈顶元素出栈且UB进栈,若为其他输入串,显示“ERROR”;4、当栈顶元素为B时,若输入串为m,栈顶元素出栈且m进栈,若输入串为(,栈顶元素出栈且)B(进栈,若为其他输入串,显示“ERROR”;5、当栈顶元素为U时,若输入串为+、)或#,栈顶元素出栈,若输入串为*,栈顶元素出栈且UB*进栈,若为其他输入串,显示“ERROR”;6、当栈顶元素为T时,若输入串为+,栈顶元素出栈且TA+进栈,若输入串为)或#,栈顶元素出栈,若为其他输入串,显示“ERROR”;7、当栈顶元素为#时,显示接受;8、若栈顶元素不满足以上条件时,显示“ERROR”。 char css50;

10、/推导所用产生式或匹配char s80; /输入的字符串int l; /输入字符串的长度struct start /表达式文法的预测分析表 /建立预测分析表char a110; / +char a210; / *char a310; / mchar a410; / (char a510; / )char a610; / #;struct start S=E,TAstruct start A=UBstruct start B=m)s(struct start U=UB*struct start T=TA+ bool pipei(int& b) /匹配if(d=|d=m) /栈顶元素为+、*、m、

11、(或)else if(d=S) /栈顶元素为S) /栈顶元素为AB) /栈顶元素为BU) /栈顶元素为UT) /栈顶元素为T) /栈顶元素为#Else /栈顶元素不满足以上条件时图2 语法分析程序流程图【实验4.3】主要源代码bool pipei(int& b)/匹配,对输入串进行逐一匹配char d;/定义栈顶元素d=sc.top();/当栈顶元素为+、*、m、(或)时if(sb=d)/若输入串与栈顶元素相同css0=sb;strcpy(css+1,匹配);b+;/字符串向前推进sc.pop();/栈顶元素出栈return true;coutATfor(int i=0;iBUstrlen(A

12、.a3);sc.push(A.a3i);/UB入栈strlen(A.a4);sc.push(A.a4i);/当栈顶元素为B时strlen(B.a3);sc.push(B.a3i);/m入栈B-else if( sb= ) strlen(B.a4);sc.push(B.a4i);/)S(入栈(S)/当栈顶元素为U时/若输入串为+$/若输入串为*strlen(U.a2);sc.push(U.a2i);/UB*入栈*BU/若输入串为#U-/若输入串为)/当栈顶元素为T时strlen(T.a1);sc.push(T.a1i);/TA+入栈T-+AT/当栈顶元素为#时接受/当栈顶元素不满足以上条件时【实

13、验4.4】调试与测试数据输入串a不在题目的终结符集中3 总结与体会在这次编译原理课程设计实践课, 我遇到很多的问题,例如C语言中某个函数的如何编写,某些符号如何使用等等。面对这些问题,我们首先通过询问其他同学或者通过书籍,网络查找等方法解决问题,直到把问题解决。在完成课程设计的时候,我对于编译原理有了很多的认识,同时个人编程能力也得到了很大提升。在整个课程设计过程中,我逐渐对于程序设计过程,以及编写程序的模块思想和对类和数据结构有了全新的认识,对文法、词法分析和语法分析的知识点加深了很多,同时我们对于计算机的这门学科,编译原理的课程设计以及程序编写产生更多的兴趣和激情。首先,感谢余宇峰老师细心地指导、提供给我的支持和给予这个锻炼的平台,其次,感谢课程设计中帮助我的同学,谢谢大家。1 第一题源程序:bianyi1.cpp2 词法分析流程图vsd文件:bianyi1.vsd3 词法分析流程图jpg文件:bianyi1.jpg4 第四题源程序:bianyi2.cpp5 语法分析流程图vsd文件:bianyi4.vsd6 语法分析流程图jpg文件:bianyi4.jpg

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1