- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
小型编译器(词法语法分析)
目录
一.设计题目 1
二.主要内容 1
三.具体要求 1
四.进度安排 2
五.成绩评定 2
六.设计思路 2
1.词法分析 2
(1)关键字: 2
(2)函数说明: 2
2.语法分析 3
(1)首尾符集 3
(2) 算符优先表如下图所示 3
(3).i*(i+i) 的分析过程 4
七.源程序及运行结果 4
程序截图: 14
八.设计体会 17
一.设计题目
小型程序设计语言编译器的设计与实现
二.主要内容
自定义一种简单的小型高机程序设计语言,采用任意一种编程语言和编程工具设计并实现其编译器,展示编译系统中词法分析和语法分析的全过程。
三.具体要求
1、对单词的构词规则有明确的定义;
2、编写的词法分析程序能够正确识别源程序中的单词符号;
3、识别出的单词以种别码,值的二元式形式保存在符号表中并输出;
4、构造出程序设计语言各语法单位的SLR分析表;(其他分析表亦可)
5、能够对输入的源程序做出正确的语法分析并输出清晰的结果;
6、高级语言的规模不易过大,注重编译器内核的设计,对于界面无要求;
7、课程设计报告中应对所自定义高级语言进行简单描述,对编译器的设计进行简单的需求分析,给出设计说明和程序结构框架,阐明设计思路、用到的原理和方法。
8、不可更改课程设计报告中已有的字体和格式,课程设计报告中新加入内容,汉字采用宋体五号字,英文字符和数字采用Times New Roman五号字。
9、课程设计报告中的运行结果应以程序运行截图形式出现。
10、程序源代码以邮件名称:“班级学号姓名”发送至指定邮箱:sqckcsj08@126.com
四.进度安排
序号 内 容 时间(天) 1 布置题目、查找资料 1 2 概要设计
1 3 详细设计
3 4 调试分析
1 5 测试结果
0.5 6 总结和完成设计报告 1 合 计 7.5
五.成绩评定
1.考核方法:通过结合学生的动手能力,独立分析解决问题的能力和创新精神,学习态度综合考评。成绩分优、良、中、及格和不及格五等。int main()
//这个函数用来除去字符串中连续的空格和换行。第一个参数为目标字符串,第二个参数为开始位置。返回值为连续的空格和换行后的第一个有效字符在字符串的位置
int Clear_space(string str,int n)
//获得一个单词,从位置i开始查找。并且有一个引用参数j,用来返回这个单词最后一个字符在原字符串的位置。string Get_words(string str,int n,int m)
//判断i当前所指的字符是否为一个分界符,是的话返回真,反之假
bool Is_boundary(string str,int n)
//判断i当前所指的字符是否为一个运算符,是的话返回真,否则返回假
bool Is_operation(string str,int n)
//将文本的全部信息保存在全局字符数组buf[1000]中string Get_text()
//将分析结果输出void Output_text(vectorpairint,string v)
//判断否为关键字,是则返回真,否则返回假bool Is_key(string str)
//对一个字符串数组进行词法分析,返回一个pairint,string型容器
vectorpairint,string word_analyse(vectorstring vec)
2.语法分析
优先函数语法分析自下而上语法分析的基本思想是:从输入串开始,利用文法的产生式步步向上归约,试图归约到文法的初始符号。
如果从语法树的角度看,自下而上分析的过程是以输入串作为末端结点符号串,向着根结点的方向往上构造语法树,使开始符号正好是该语法树的根结点。
算符优先分析器,对常见的算术表达式语句进行分析。实现以下功能:
1) 组织算术表达式的输入;
2) 组织算符优先关系表或者优先函数的输入;
3)若输入的符号串是一个算术表达式语句,则输出一个分析过程(既每一步规约用到的最左素短语),最后归约成“#S#”的形式,则归约成功,打印分析过程,否则输出错误信息,提示该语句不满足语法,不能归约。。
待分析的语法描述为:
E-E+T|T
T-T*F|F
F-〉PF|P
P-(E)| i
基本实现方法是“移进-归约“法。即用一个寄存符号的先进后出栈,把输入符号一个一个地移进到栈里,当栈顶形成某个产生式的一个候选式时,即把栈顶的这一部分替换成(归约为)该产生式的左部符号。如此继续,直到输入串的末端。最后如栈(顶)底为开始符号,则所分析的输入串为合法的符号串,报告成功;否则,是不符合语法的符号串,报告失败及出错信息。
(1)首尾符集
FIRSTVT(E)={+,*
文档评论(0)