华北电力大学编译实验报告文档格式.docx
- 文档编号:13796492
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:44
- 大小:228.66KB
华北电力大学编译实验报告文档格式.docx
《华北电力大学编译实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《华北电力大学编译实验报告文档格式.docx(44页珍藏版)》请在冰豆网上搜索。
成绩:
日期:
2014年1月3日
一、课程设计的目的与要求
1.词法分析器设计的目的与要求
1.1词法分析器设计的实验目的
本实验是为计算机科学与技术专业、网络工程专业、信息安全专业的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。
通过这个实验,使学生应用编译程序设计的原理和技术设计出词法分析器,了解扫描器的组成结构,不同种类单词的识别方法。
能使得学生在设计和调试编译程序的能力方面有所提高。
为将来设计、分析编译程序打下良好的基础。
1.2词法分析器设计的实验要求
设计一个扫描器,该扫描器是一个子程序,其输入是源程序字符串,每调用一次识别并输出一个单词符号。
为了避免超前搜索,提高运行效率,简化扫描器的设计,假设该程序设计语言中,基本字(也称关键词)不能做一般标识符用,如果基本字、标识符和常数之间没有确定的运算符或界符作间隔,则用空白作间隔。
单词符号及其内部表示如表1-1所示,单词符号中标识符由一个字母后跟多个字母、数字组成,常数由多个十进制数字组成。
单词符号的内部表示,即单词的输出形式为二元式:
(种别编码,单词的属性值)。
表1-1 单词符号及其内部表示
单词符号
种别编码
单词的属性值
BEGIN
IF
THEN
ELSE
END
标识符
整型常数
+
*
**
(
)
1
2
3
4
5
6
7
8
9
10
11
12
—
在名字表中的地址
十进制整数
2.算符优先分析程序设计的目的和要求
2.1算符优先分析程序设计的实验目的
本实验是为计算机科学与技术等专业的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。
通过这个实验,使学生应用编译程序设计的原理和技术,设计、编写和调试算符优先分析程序,了解算符优先分析程序的组成结构,掌握实现通用算符优先分析算法的方法。
2.2算符优先分析程序设计的实验要求
算符优先分析属于自下而上的分析方法,该语法分析程序的输入是终结符号串(即单词符号串,以一个“”结尾),如果输入串是句子则输出“YES”,否则输出“NO”和错误信息。
算符优先分析过程与非终结符号无关,当由文法产生了优先关系之后文法也就失去了作用,本题目给出文法的目的是为了便于对语法分析结果进行验证。
(1)文法 设算符优先文法为:
说明:
i为整型常数或者为标识符表示整型变量;
使用中↑用**表示。
(2)优先关系表 设优先关系表如表1-2所示。
表1-2 优先关系表
*
↑
i
(
)
#
+
↑
3.基于算符优先分析方法的语法制导翻译程序设计的目的和要求
3.1基于算符优先分析方法的语法制导翻译程序设计的实验目的
通过这个实验,使学生应用编译程序设计的原理和技术,通过设计、编写和调试语法制导翻译程序,掌握从一种语句的语法和语义出发,构造相应的语义子程序,实现基于算符优先分析方法的语法制导翻译的方法。
3.2基于算符优先分析方法的语法制导翻译程序设计的实验要求
算符优先分析方法是通过反复把输入符号移进分析栈,使用优先关系表在分析栈顶寻找最左素短语,将其归约为一个非终结符号而实现的。
这个分析过程与非终结符号无关,当由文法产生了优先关系之后文法也就失去了作用(所以本题目无需给出文法)。
基于算符优先分析方法的语法制导翻译是在算符优先语法分析的基础上进行翻译工作(即语义分析),每当将一个最左素短语归约为一个非终结符号时,就调用对应产生式的语义子程序,去完成相应的语义翻译工作,这步归约使用的产生式对非终结符号不加区分(即将所有的非终结符号用一个通用的非终结符号表示)。
语法制导翻译程序的输入是终结符号串(即单词符号串,以一个“”结尾),如果输入符号串是句子,则按照其语义进行翻译,输出等价的四元式序列(作为练习应显示输出)。
二、课程设计正文
1.词法分析器设计
1.1以键盘输入的方式输入句子。
(1)标识符和常数的属性值
(a)标识符和常数的属性值为该单词在名次表或常数表中登记项的相对地址;
(b)当识别出一个标识符或常数时,要查名字表或常数表,若表中有其登记项,则把得到的登记项地址作为其属性值;
(c)若表中没有其登记项,则建立一个新登记项,该记录项地址作为其属性值,此处的地址为在表中的下标。
1.2实验分析
实验分析:
对于输入的句子,使用cin.get函数转换为数组。
分析过程首先要进行对空格、回车、Tab的判断,若为之一则指针向后移动。
如果是字母,继续判断后面的是否为字母或者数字,如果是,则加入arr中,继续判断arr是否为关键字,对于已经存入的关键字,需要通过查表操作来完成;
若不是关键字,则构成标识符,将其存入地址记录表。
如果开始是数字,则判断它后边紧接着的是否为数字或者小数点加数字,若满足之一,则为实数,将其存入地址记录表;
若两条均不满足,则表明为常数的单词已经结束,进行下一步单词的分析。
对于界符和运算符的的分析,只需判断单个字符即可,对于双目运算符,要在当前位置的基础上指针后移,再进行判断。
算法简要概述:
关键字表、输出串用string数组存储。
采用一个字符串arr来存储分析的单词,若未分析完,则将正在处理的字符连接到arr后面,若当前单词分析完,则重新对arr进行赋值,直至整个句子全部分析完成。
数组remember[],类型为int,为变量的地址记录表;
re为remember的指针;
jjj()函数用于将变量或常量存入地址记录表,iii()函数用于读取输入串中的下一个字符。
2.算符优先分析程序设计
2.1以键盘输入的方式输入句子。
2.2实验分析
优先关系表用一个数组chart[]表示,是一个8*8的二维矩阵;
分析栈用数组stacks[]表示,表示的元素为终结符号、“#”、非终结符N,;
数组record[],用于存放输入字符串。
算符优先分析属于自下而上的分析方法,在分析的过程中需要借助于优先关系表,在分析过程中通过查找优先关系表和分析栈的共同作用来进行分析。
算法首先将分析栈压入“#”,然后对字符串进行遍历。
算法使用两个while嵌套循环,外层为当前字符a不为#则继续,内层循环当发现栈顶终结符的优先级的低于或等于正在考察的字符时,字符入栈,执行移入操作;
当前字符与其后一个终结符的相对优先关系为大于时,则进行规约,规约的具体方法是从栈顶往栈底方向查,当发现第一个优先级低于栈顶终结符时查找结束,记录当前位置,然后从栈顶到该终结符的上一个位置规约为一个“N”,依次类推,当分析栈最终出现“#N#”,则证明输入串是句子,分析结束。
若分析栈的栈顶元素与当前输入符号没有优先关系,则说明输入串有语法错误,即输入的不是句子,输出错误提示,分析结束。
3.基于算符优先分析方法的语法制导翻译程序的设计
3.1该实验算法是在第二个实验的基础上进行的,在上一个实验中只是简单的将需要规约的部分规约为“N”,而实验三中的规约是在原来的基础上进行数字的改变。
在产生式的产生时,需要判断是使用的那个规约文法,在教材给出的五个产生式中,当采用前三个时才会有产生式生成。
将规约后产生的N变为中间变量Ti,当遇到产生中间变量时,需要输出该四元式。
三、课程设计总结或结论
1.词法分析器设计
通过词法分析器的设计,、更加加深了对词法分析原理的理解,明确了运算符、界符、标识符、常数的定义,实验需要注意的问题是对空格的过滤,以及对双目运算符的处理。
另外,对小数的处理也要加以注意,注意判断“.”是做为界符还是小数点。
对于关键字的判断,直接使用.compare(ch)函数,可以大大减少代码的行数,更可避免编写逐字比较程序时产生错误。
2.算符优先分析程序设计
算符优先分析的设计,主要是把优先关系表和分析栈结合起来,通过优先级的判断来决定进行规约、入栈还是错误判断的操作。
规约时应注意使用哪个产生式进行规约,注意栈内内容的变化。
实验另外需要注意的是对于“i+”一类非句子输入的判断。
通过本次实验更加深刻的理解了优先关系表的相关概念,也体会到了优先关系表对于编译过程的意义。
3.基于算符优先分析方法的语法制导翻译程序的设计
在算符优先分析的基础上进行本次实验,我对于基于算符优先分析方法的语法制导翻译我有了更深一步的认识。
处理的难点就是将规约与上面的实验区别开来,在产生式的产生时,需要判断是使用的那个规约文法,将规约后产生的N变为中间变量Ti,当遇到产生中间变量时,需要输出该四元式。
这次实验基本达到了实验目的,由于所学知识不够全面,在试验中也遇到了很多编程上的困难,在很多方面还有待完善,在以后的学习过程中,力争掌握更多知识,在以后学习中要更加努力。
四、参考文献
[1]陈火旺,刘春林.程序设计语言编译原理.北京:
国防工业出版社,第三版.2008,9
[2]宋雨,程晓荣,黄志强.计算机综合实践指导.北京:
清华大学出版社,第一版.2004
附录(设计流程图、程序、运行结果等)
1、
主函数
流程图
Initscanner
Scanner
Scanner
close
Lexscan
IsAlpha
IsDelimiter
IsDight
Output
Error
(词法分析)
Trans函数
writeLeft函数
checkAll函数
调用Morphology结果
开始
输入待判断语句
进行词法分析
分析成功?
进行规约分析
打印规约结果
结束
(算符优先分析)
(语法制导翻译程序)
2、源代码
(1)Morphology.cs
……………………
#region定义机内码
privatevoidNewKeyWord()
{
machineCodes[0]="
"
;
machineCodes[1]="
BEGIN"
machineCodes[2]="
IF"
machineCodes[3]="
THEN"
machineCodes[4]="
ELSE"
machineCodes[5]="
END"
machineCodes[6]="
标识符"
machineCodes[7]="
整形常数"
machineCodes[8]="
+"
machineCodes[9]="
*"
machineCod
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华北电力 大学 编译 实验 报告