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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

13计科工编译原理实验报告模板课件.docx

1、13计科工编译原理实验报告模板课件院 系: 计算机科学学院 专业、年级: 13级计科(一)课程名称: 编译原理(A) 组 号: 18 学号姓名: 201321091048韩晗 学号姓名:201321091053吴珊珊学号姓名: 201321091055次珍 指导教师: 李航高 周凌云 2016 年6月 10 日组号: 18 实验类别:综合型组员学号姓名201321091048韩晗201321091053Wss201321091055次珍实验名称实验一:词法分析实验室205204实验目的或要求一.实验目的通过编写一个具体的词法分析程序,加深对词法分析原理的理解。掌握在对程序设计语言源程序进行扫描

2、过程中将其分解为各类单词的词法分析方法。编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字(关键字)、标识符、常数、运算符、分隔符五大类。依次输出各个单词的内部编码及单词符号自身值。实验原理(算法流程)二.实验原理1.待分析的简单的词法(1)关键字: begin if then while do end所有的关键字都是小写。(2)运算符和界符: = + - * / = = = ; ( ) #(3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义:ID = letter (letter | digit)*NUM = digit digit*(4)空格

3、有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略2.输入:所给文法的源程序字符串。输出:二元组(syn,token或sum)构成的序列。其中:syn为单词种别码; token为存放的单词自身字符串; sum为整型常数。三、结果分析:输入begin x:=9: if x9 then x:=2*x+1/3; end # 后经词法分析输出如下序列:(begin 1)(x 10)(:17)(= 18)(9 11)(;26)(if 2) 如图所示: 程序代码四.程序代码#include #include char prog80,token8,ch;i

4、nt syn,p,m,n,sum;char *rwtab6=begin,if,then,while,do,end; scaner();void scanner_example (FILE *fp);main() FILE *fp; fp=fopen(D:1.txt,r);/打开文件 scanner_example (fp); scaner(); void scanner_example (FILE *fp) do ch=fgetc (fp); progp+=ch; while (ch!=#);p=0;do scaner(); switch(syn) case 11:printf( %-10d%

5、5d )n,sum,syn); break; case -1:printf(you have input a wrong stringn); default: printf( %-10s%5d )n,token,syn); break; while(syn!=0); (写不完时,可另加附页。) sum=0; for(m=0;m8;m+)tokenm+=NULL; ch=progp+; m=0; while(ch= )|(ch=n)ch=progp+; if(ch=a)|(ch=A) while(ch=a)|(ch=A)|(ch=0)&(ch=9) tokenm+=ch; ch=progp+;

6、p-; syn=10; for(n=0;n=0)&(ch=0)&(ch=9) sum=sum*10+ch-0; ch=progp+; p-; syn=11; else switch(ch) case :tokenm+=ch; ch=progp+; if(ch=) syn=24; tokenm+=ch; else syn=23; p-; break; case +: tokenm+=ch; ch=progp+; if(ch=+) syn=17; tokenm+=ch; else syn=13; p-; break; case -:tokenm+=ch; ch=progp+; if(ch=-) s

7、yn=29; tokenm+=ch; else syn=14; p-; break; case !:ch=progp+; if(ch=) syn=21; tokenm+=ch; else syn=31; p-; break; case =:tokenm+=ch;ch=progp+; if(ch=) syn=25; tokenm+=ch; else syn=18; p-; break; case *: syn=15; tokenm+=ch; break; case /: syn=16; tokenm+=ch; break; case (: syn=27; tokenm+=ch; break; c

8、ase ): syn=28; tokenm+=ch; break; case : syn=5; tokenm+=ch; break; case : syn=6; tokenm+=ch; break; case ;: syn=26; tokenm+=ch; break; case : syn=30; tokenm+=ch; break; case #: syn=0; tokenm+=ch; break; case :syn=17; tokenm+=ch; break; default: syn=-1; break; tokenm+=0; 实验结果分析及心得体会通过这次实验掌握在对程序设计语言源程

9、序进行扫描过程中将其分解为各类单词的词法分析方法。发现了自己对程序逻辑设计的不足并进行了改进得到了提升。和同学配合越来越默契,更觉得团队配合的默契度对程序的编写起着重要的作用。词法分析的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。通过本试验的完成,更加加深了对词法分析原理的理解。 组员分工韩晗:代码编写 次珍:程序检验,程序调试 吴珊珊:编写报告.程序调试成绩评定教师签名: 2016年6月 日组号: 18 实验类别:综合型组员学号姓名201321091048韩晗201321091053吴珊珊20132109

10、1055次珍实验名称实验二:语法分析实验室205实验目的或要求一.实验目的根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。注:也可以采用预测分析方法、算符优先分析方法来进行分析。具体参照课本上的说明,以下是递归下降分析法的介绍实验原理(算法流程)二.实验效果图1.主程序示意图2.递归下降分析程序示意图(写不完时,可另加附页。)程序界面(效果图)3. 语句串分析过程示意图4.statement语句分析函数示意图(写不完时,可另加附页。)5. expression表达式分析函数示意图6. term分析函数示意图7. factor

11、分析过程示意图三.实验结果一、 结果分析:在d:1.txt中输入 begin a:=9; x:=2*3; b:=a+x end # 后输出ok! 如图所示:程序代码#include stdio.h#include string.hchar prog100,token8,ch;char *rwtab6=begin,if,then,while,do,end;int syn,p,m,n,sum;int kk;factor(); /递归下降分析expression(); yucu();term();statement(); /语句串分析parser();scaner();void scanner_ex

12、ample (FILE *fp);main()p=kk=0; FILE *fp; fp=fopen(D:1.txt,r);/打开文件 scanner_example (fp); scaner(); parser();void scanner_example (FILE *fp) do ch=fgetc (fp); progp+=ch; while (ch!=#);p=0;parser() /1 if(syn=1) scaner(); /*读下一个单词符号*/ yucu(); /2 /*调用yucu()函数;*/ if (syn=6) /end scaner(); if (syn=0)&(kk=

13、0) printf(ok!n); (写不完时,可另加附页。)else if(kk!=1) printf(the string havent got a end!n); kk=1; else printf(havent got a begin!n); kk=1; return; /1yucu() /2 -段分析 statement(); /3 /*调用函数statement();*/while(syn=26) /; scaner(); /*读下一个单词符号*/ if(syn!=6) /end statement(); /*调用函数statement();*/ return; /2statemen

14、t() /3 -句子分析 if(syn=10) /letter scaner(); /*读下一个单词符号*/ if(syn=18) /:= scaner(); /*读下一个单词符号*/ expression(); /*调用函数expression();*/ else printf(the sing := is wrong!n); kk=1; else printf(wrong sentence!n); kk=1; return; /3expression() /4 句子内部运算 term(); while(syn=13)|(syn=14) /+ - scaner(); /*读下一个单词符号*/

15、 term(); /*调用函数term();*/ return; /4term() /5 factor();while(syn=15)|(syn=16) /* / scaner(); /*读下一个单词符号*/ factor(); /*调用函数factor(); */ return; /5factor() if(syn=10)|(syn=11) /(letter|digit) scaner(); else if(syn=27) scaner(); /*读下一个单词符号*/ expression(); /*调用函数expression();*/./ if(syn=28) scaner(); /*读

16、下一个单词符号*/ else printf(the error on (n); kk=1; else printf(the expression error!n);kk=1; return; /5 scaner() /6 词法分析 sum=0; for(m=0;m8;m+)tokenm+=NULL; m=0; ch=progp+; while(ch= )ch=progp+; if(ch=a)|(ch=A) while(ch=a)|(ch=A)|(ch=0)&(ch=9) tokenm+=ch; ch=progp+; p-; syn=10; tokenm+=0; for(n=0;n=0)&(ch

17、=0)&(ch=9) sum=sum*10+ch-0; ch=progp+; p-; syn=11; else switch(ch) case ) syn=21; else if(ch=) syn=22; else syn=20; p-; break; case :m=0; ch=progp+; if(ch=) syn=24; else syn=23; p-; break; case :m=0; ch=progp+; if(ch=) syn=18; else syn=17; p-; break; case +: syn=13; break; case -: syn=14; break; cas

18、e *: syn=15;break; case /: syn=16;break;case (: syn=27;break; case ): syn=28;break; case =: syn=25;break; case ;: syn=26;break; case #: syn=0;break; case if: syn=2;break; case then: syn=3;break; case wile: syn=4;break; case do: syn=5;break; case end: syn=6;break; case :=: syn=18;break; case : syn=21

19、;break; case =: syn=24;break; default: syn=-1;break; 实验结果分析及心得体会 通过这次实验加深对递归下降分析法的理解。发现了自己对程序逻辑设计的不足并进行了改进得到了提升。和同学配合越来越默契,更觉得团队配合的默契度对程序的编写起着重要的作用。通过本次试验,了解了语法分析的运行过程,主程序大致流程为:“置初值”调用scaner函数读下一个单词符号调用IrParse结束。递归下降分析的大致流程为:“先判断是否为begin”不是则“出错处理”,若是则“调用scaner函数”调用语句串分析函数“判断是否为end”不是则“出错处理”,若是则调用scaner函数“判断syn=0&kk=0是否成立”成立则说明分析成功打印出来。不成立则“出错处理”。因为首先对词法分析进行了编写,在遇到语法分析的时候更得心应手了。通过实验更加强了组员间的编程能力组员分工次珍:程序编写 程序调试 韩晗:程序编写程序调试 吴珊珊:程序调试 编写实验报告成绩评定教师签名: 2016年6月 日

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

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