2022年程序设计语言与编译实验报告 .pdf
《2022年程序设计语言与编译实验报告 .pdf》由会员分享,可在线阅读,更多相关《2022年程序设计语言与编译实验报告 .pdf(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、南华大学实验名称:词法分析程序学院:计算 机 学 院专业班级:本 2010 电气信息类 03 班学号:20104030342 姓名:谢志兴指导教师:吴取劲日期:2012 年6 月10 日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 24 页 - - - - - - - - - 实验一词法分析实验报告一、 实验目的调试并完成一个词法分析程序,加深对词法分析原理的理解。二、 实验要求a) 待分析的简单语言的词法1.关键字:begin if then while do end
2、 所有关键字都是小写。2. 运算符和界符::= + * / = = = ; ( ) # 3.其他单词是标识符( ID)和整型常数( NUM ) ,通过以下正规式定义:ID=letter ( letter| digit )* NUM=digit digit * 4. 空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM, 运算符、界符和关键字,词法分析阶段通常被忽略。b) 各种单词符号对应的种别码单词符号种别码单词符号种别码begin 1 : 17 if 2 := 18 then 3 20 while 4 21 do 5 = 22 end 6 = 24 digit digit * 11
3、= 25 * 13 ; 26 / 14 ( 27 + 15 ) 28 - 16 # 0 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 24 页 - - - - - - - - - c) 词法分析程序的功能输入:所给文法的源程序字符串。输出:二元组( syn,token或 sum)构成的序列。其中:syn为单词种别码;token为存放的单词自身字符串;sum为整型常数。三、源程序代码:#include #include #include char prog80,token
4、8; char ch; int syn,p,m=0,n,row,sum=0; char *rwtab6=begin,if,then,while,do,end; void scaner() for(n=0;n=a&ch=A&ch=0&ch=a&ch=A&ch=Z) tokenm+=ch; ch=progp+; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 24 页 - - - - - - - - - tokenm+=0; p-; syn=10; for(n=0;n=0&c
5、h=0&ch32767) syn=-1; else switch(ch) case) syn=21; tokenm+=ch; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 24 页 - - - - - - - - - else if(ch=) syn=22; tokenm+=ch; else syn=23; p-; break; case:m=0;tokenm+=ch; ch=progp+; if(ch=) syn=24; tokenm+=ch; else syn=20
6、; p-; break; case:m=0;tokenm+=ch; ch=progp+; if(ch=) syn=18; tokenm+=ch; else syn=17; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 24 页 - - - - - - - - - p-; break; case*:syn=13;token0=ch;break; case/:syn=14;token0=ch;break; case+:syn=15;token0=ch;break; case
7、-:syn=16;token0=ch;break; case=:syn=25;token0=ch;break; case;:syn=26;token0=ch;break; case(:syn=27;token0=ch;break; case):syn=28;token0=ch;break; case#:syn=0;token0=ch;break; casen:syn=-2;break; default: syn=-1;break; void main() p=0; row=1; coutPlease input string:endl; do cin.get(ch); progp+=ch; w
8、hile(ch!=#); p=0; do scaner(); switch(syn) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 24 页 - - - - - - - - - case 11: cout(syn,sum)endl; break; case -1: coutError in row row!endl; break; case -2: row=row+;break; default: cout(syn,token)0 then x:=2*x+1/3; en
9、d#输出结果b)源程序(包括上式未有的while、do以及判断错误语句) :begin x=$; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 24 页 - - - - - - - - - while a0 do b9-x; end # 输出结果五、 实验总结分析通过此次实验, 让我了解到如何设计、 编制并调试词法分析程序, 加深对词法分析原理的理解; 熟悉了构造词法分析程序的手工方式的相关原理,根据识别语言单词的状态转换图, 使用某种高级语言 (例如 C+语言)直接编
10、写此法分析程序。另外,也让我重新熟悉了C+语言的相关内容, 加深了对 C+语言的用途的理解。比如: main()函数中,用 cinch;语句得到 ch值的话,给定源程序的结果第一行得到的是 (10,beginx), 因为得到的字符串中省略了空格, 改用 cin.get(ch);问题便解决了。另外,我在程序中加入了 row 变量,以便能够准确得到错误所在。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 24 页 - - - - - - - - - 实验二算符优先分析程序一、
11、实验目的调试并完成一个算符优先分析程序,加深对算符优先分析原理的理解。二、实验要求算符优先分析程序的功能:输入:所给文法的源程序字符串、待匹配字符串。输出:转化后的文法、每个非终结符的FIRSTVT 集和 LASTVT 集、算符优先分析表、规约过程。三、源程序代码:#include stdio.h #include stdlib.h #include iostream.h char data2020; /算符优先关系char s100; /模拟符号栈 s char lable20; /文法终极符集char input100; /文法输入符号串char string2010; /用于输入串的分析
12、int k; char a; int j; char q; int r; /文法规则个数int r1; /转化后文法规则个数char st1030; /用来存储文法规则char first1010; /文法非终结符 FIRSTVT 集char last1010; /文法非终结符 LASTVT 集int fflag10=0; /标志第 i 个非终结符的 FIRSTVT 集是否已求出int lflag10=0; /标志第 i 个非终结符的 LASTVT 集是否已求出名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - -
13、 - - - - - 第 9 页,共 24 页 - - - - - - - - - int deal(); /对输入串的分析int zhongjie(char c); /判断字符 c 是否是终极符int xiabiao(char c); /求字符 c 在算符优先关系表中的下标void out(int j,int k,char *s); /打印 s栈void firstvt(char c); /求非终结符 c 的 FIRSTVT 集void lastvt(char c); /求非终结符 c 的 LASTVT 集void table(); /创建文法优先关系表void main() int i,j
14、,k=0; printf( 请输入文法规则数:); scanf(%d,&r); printf( 请输入文法规则: n); for(i=0;ir;i+) scanf(%s,sti); /存储文法规则, 初始化 FIRSTVT 集和 LASTVT 集firsti0=0; /*firsti0 和 lasti0 分别表示sti0 非终极符的FIRSTVT 集和 LASTVT 集中元素的个数 */ lasti0=0; for(i=0;ir;i+) /判断文法是否合法 for(j=0;stij!=0;j+) if(sti0Z) printf( 不是算符文法 !n); exit(-1); if(stij=A
15、&stij=A&stij+1=Z) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 24 页 - - - - - - - - - printf( 不是算符文法 !n); exit(-1); for(i=0;ir;i+) for(j=0;stij!=0;j+) if(stijZ)&stij!=-&stij!=&stij!=|) lablek+=stij; lablek=#; lablek+1=0; table(); printf( 每个非终结符的 FIRSTVT 集为:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年程序设计语言与编译实验报告 2022 程序设计语言 编译 实验 报告
限制150内