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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

《编译原理课程设计报告》.docx

1、编译原理课程设计报告目 录一、课程设计的目的2二、课程设计的要求2三、课程设计报告内容2四、实验运行环境2五、实验设计步骤2六、变化后的正规文法2七、状态图3八、基本测试数据4九词法分析程序的数据结构与算法 4十、实验结果截图12十一、设计结果及体会12十二、参考文献12一、课程设计的目的加深对词法分析器的工作过程的理解;加强对词法分析方法的掌握;能够采用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。二、课程设计要求1根据以下的正规式,编制正规文法,画出状态图;标识符 (|)*十进制数 (0 | 1|2|3|4|5|6|7|8|9)(0|1|2|3|

2、4|5|6|7|8|9)*(|.)(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*八进制数 0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)* (|.)(0|1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)*十六进制数 0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)* (|.)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)*运算符和分隔符 + - *

3、/ = ( ) ;关键字 if then else while do 2根据状态图,设计词法分析函数int scan( ),完成以下功能:1)从键盘读入数据,分析出一个单词。2)返回单词种别(用整数表示),3)返回单词属性(不同的属性可以放在不同的全局变量中)。3编写测试程序,反复调用函数scan( ),输出单词种别和属性。三、 课程设计报告内容编制一个能够分析三种数、标识符、主要运算符和主要关键字的词法分析程序。四、 实验运行环境PC微机DOS操作系统或 Windows 操作系统Turbo C 程序集成环境或 Visual C+ 程序集成环境五、 实验设计步骤1.根据状态图,设计词法分析算法

4、2.采用C语言,设计函数scan( ),实现该算法3.编制测试程序(主函数main)。4.调试程序:输入一组单词,检查输出结果。六、变化后的正规文法:-(|)*- 0 - 0x -+| - |* |/ | |= |( | ) |;-if| then| else |while |do-a|b|c|d|e|f|g|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z-(0|1|2|3|4|5|6|7|8|9)|- (|.)-(0|1|2|3|4|5|6|7)|- (0|1|2|

5、3|4|5|6|7|8|9|a|b|c|d|e|f) |七、状态图图-1-空白 0-9/a-z/A-Z A-Z/a-z 其它 0-91-9 其它 0-9 非数字 0-7 0 0-7 非0-7且 0 0-7 x/X 非0-7 1-9/A-F/a-f 非(1-9/A-F/a-f) +1-111 0-9/A-F/a-f If/ while/ 非(1-9/A-F/a-f) then/ else/do八、 基本测试数据输入数据例: 0 58+data 0x2f 00 then; 正确结果:这些单词的单词种别及其属性 INT10 0 INT10 58 + _IDN data _INT16 47 INT8

6、0 Then -; -九、词法分析程序的数据结构与算法词法分析的算法思想主要是根据状态图来实现,由前面的状态图来进行结构的设计,具体细节请参见“图1”的图示。主要的数据结构如下所示:union chars /联合,可存储字符串,整型和浮点型char pro_char15;int pro_number;float real;struct data /将每个单元用一个结构来存储char kind7; /类型即种别int id; /所属的具体类型即种别号union chars pro; /属性值;种别与种别号的对应关系如下表所示:种 别 种 别 号INT10 1INT8 2INT16 3标识符 4分

7、隔符 5关键字 6出 错 7REAL10 8REAL8 9REAL16 10完整代码如下:#include#includeunion chars /联合,可存储字符串,整型和浮点型char pro_char15;int pro_number;float real;struct data /将每个单元用一个结构来存储,其内容包括:类型,所属的具体类型,以及属性值char kind7;int id;union chars pro;int scan(char *a); /对每个用空格打断的单元进行进一步的分析,对其进行进一步的分类void Prints(char a15,int id,int a_l

8、ong);/将分析后的每个token输出void save(char *a,int id,int x);/将分析后的结果保存到一个结构数组中char nowChar15; /临时的存储单元,用来存储被空格打断以后单元char kinds118= ,INT10,INT8,INT16,IDN, , , ,REAL10,REAL8,REAL16;/单词的不同种别struct data link100; /用来存放词法分析以后的结果的结构数组int link_long=0; /全局变量int scan(char *a)int id;int a_long=0;int doc=0;while(*a!=NU

9、LL)nowChar0=0;a_long=0;doc=0;/对数值的判断及处理if(0=*a&*a=9) /如果第一个字符为数值nowChara_long=*a;*a+;a_long+;/对十六进制的判断及处理if(nowChar0=0&(*a=x|*a=X) /如果第一个字符为0且第二个字符为x,则为十六进制数nowChara_long=*a;*a+;a_long+;while(*a!=NULL&(0=*a&*a=9)|(a=*a&*a=f)|(A=*a&*a=F)|*a=.)nowChara_long=*a; /一直将此十六进制数完全读入,若为浮点型的,则加以标记if(*a=.)doc=1

10、;*a+;a_long+;nowChara_long=0; /判断输入的十六进制数是否合法if(a_long=2) /输入的只有0x,则输入错误Prints(nowChar,7,a_long);return 0;if(doc) /输入的十六进制数是浮点型的Prints(nowChar,10,a_long); /则将其具体的类型属性定为10else /输入的十六进制数是整型的Prints(nowChar,3,a_long); /则将其具体的类型属性定义为3continue;/对八进制的判断及处理if(nowChar0=0&0=*a&*a=7) /如果第一个字符为0且第二个字符为07,则为八进制数

11、nowChara_long=*a;*a+;a_long+;while(*a!=NULL&(0=*a&*a=7)|*a=.)nowChara_long=*a; /一直将此八进制数完全读入,若为浮点型的,则加以标记if(*a=.)doc=1;*a+;a_long+;nowChara_long=0;if(doc) /输入的八进制数是浮点型的Prints(nowChar,9,a_long); /则将其具体的类型属性定为9else /输入的十六进制数是整型的Prints(nowChar,2,a_long); /则将其具体的类型属性定义为2continue;/对十进制数的判断及处理elsewhile(*a

12、!=NULL&(0=*a&*a=9)|*a=.)nowChara_long=*a; /一直将此十进制数完全读入,若为浮点型的,则加以标记if(*a=.)doc=1;*a+;a_long+;nowChara_long=0;if(doc) /输入的十进制数是浮点型的Prints(nowChar,8,a_long); /则将其具体的类型属性定为8else /输入的十进制数是整型的Prints(nowChar,1,a_long); /则将其具体的类型属性定义为1continue; /完成了对数值的判断及处理/对字符的判断及处理elsenowChara_long=*a;*a+;a_long+;/判断输入的字符是否为运算符或其他的分隔符switch(nowChar0)

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

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