编译原理报告(7) 本文关键词:编译,原理,报告
编译原理报告(7) 本文简介:课课程程实实验验报报告告课程名称:课程名称:编译原理编译原理专业班级:专业班级:信息安全信息安全1302班班学学号:号:姓姓名:名:指导教师:指导教师:报告日期:报告日期:2015.11.3计算机科学与技术学院计算机科学与技术学院一、原创性声明一、原创性声明本人郑重声明:本报告的内容由本人独立完成,
编译原理报告(7) 本文内容:
课课
程程
实实
验验
报报
告告
课程名称:课程名称:
编译原理编译原理
专业班级:专业班级:
信息安全信息安全
1302
班班
学学
号:号:
姓姓
名:名:
指导教师:指导教师:
报告日期:报告日期:
2015.11.3
计算机科学与技术学院计算机科学与技术学院
一、原创性声明一、原创性声明
本人郑重声明:本报告的内容由本人独立完成,有关观点、方法、数据和文献等的引用
已经在文中指出。除文中已经注明引用的内容外,本报告不包含任何其他个人或集体已经
公开发表的作品或成果,不存在剽窃、抄袭行为。
特此声明!
学生签字:
日期:
二、评语与成绩评定二、评语与成绩评定
1.指导老师评语
2.实验成绩评定
实验完成质量得分(70
分)
(实验步骤清晰详细深入,
实验记录真实完整等)
报告撰写质量得分(30
分)
(报告规范、完整、通顺、
详实等)
总成绩(100
分)
指导教师签字:
日期:
目录目录
一、词法分析
.1
1.1
实验目的.1
1.2
实验要求.1
1.3
算法思想.2
1.4
代码实现.3
1.5
实验结果.4
二、词法分析
.5
2.1
实验目的5
2.2
实验要求5
2.3
算法思想.5
2.4
代码实现.8
2.5
实验结果.8
三、体会
10
四、参考文献
10
编编
译译
原原
理理
课课
程程
实实
验验
报报
告告
1
一、词法分析一、词法分析
1.1
实验目的实验目的
设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。
1.2
实验要求实验要求
1.待分析的简单语言的词法
(1)关键字:
begin
if
thenwhiledo
end
所有的关键字都是小写
(2)运算符和界符::=+-*/
=
=;()#
(3)其他单词是标识符(ID)和整型常数(NUM)
,通过以下正规式定义:
ID=letter(letter|digit)*
NUM=digit
digit*
(4)空格由空白、制表符和换行符组成。空格一般用来分隔
ID、NUM、运算符、
界符和关键字,词法分析阶段通常被忽略。
2
各种单词符号对应的种别码
表
1.1
各种单词符号对应的种别码
单词符号种别码单词符号种别码
begin1=24
Do5=25
End6;26
letter(letter|digit)*10(27
digit
digit*11)28
+13[29
-14]3015{31
/16}32
:17,33
编编
译译
原原
理理
课课
程程
实实
验验
报报
告告
2
:=18!=34
==19#0
0
then
x:=2*x+1/3;
end#
的源文件,经词法分析后输出如下序列:
(1,
begin)
(10,
‘x’)
(25[,:=)
(11,9)
(26,
;)
(2,if)…
1.3
算法思想算法思想
算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其
基本思想是根据扫描到单词符号的第一个字种类,拼出相应的单词符号。
1.主流程示意图
主程序示意图如图
1.1
所示。代码实现如图
1.4
所示。
图
1.1
词法分析主程序示意图
编编
译译
原原
理理
课课
程程
实实
验验
报报
告告
3
其中初值包括如下两个方面。
(1)关键字表的初值。
关键字作为特殊标识符处理,把它们预先安排在一张表格中(成为关键字表)
,
当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,
否则为一般标识符。关键字表为一个字符串数组,其描述如下:
charrwtab[6]={“begin”,”if”,”then”,”while”,”do”,”end”};
(2)
程序中需要用到的主要变量为
syn,token
和
sum。
2.
扫描子程序的算法思想
首先设置
3
个变量:①token
用来存放构成单词符号的字符串;②sum
用来存放
整形单词;③syn
用来存放单词符号的种别码。扫描子程序主要部分流程如图
1.2
所
示。
图
1.2
词法分析程序流程
1.4
代码实现代码实现
1.库、全局变量和函数
编编
译译
原原
理理
课课
程程
实实
验验
报报
告告
4
实验中需要的库和全局变量如下图
1.3
所示。
图
1.3
词法分析需要的库和全局变量
2.词法分析主程序
代码实现如下图
1.4
所示。
图
1.4
词法分析主程序
1.5
实验结果实验结果
支持多语句输入和换行输入,实验结果如下图
1.5
所示
图
1.5
词法分析实验结果
编编
译译
原原
理理
课课
程程
实实
验验
报报
告告
5
对照表
1
中的种别码,证明实验结果正确。
二、词法分析二、词法分析
2.1
实验目的实验目的
编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检
查和结构分析。
2.2
实验要求实验要求
利用
C
语言编制递归下降分析程序,并对简单语言进行语法分析。
1.1.待分析的简单语言的语法待分析的简单语言的语法
用扩充的
BNF
表示如下:
(1)::=beginend
(2)::={;}
(3)::=
(4)::=ID:=
(5)::={+|-}
(6)::={*|/}
(7)::=ID|NUM|()
2.2.实验要求说明实验要求说明
输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印
“success”
,否则输出“error”
。
例如:
输入
begin
a:=9;x:=2*3;b:=a+x
end
#
输出
success
输入
x:=a+b*c
end
#
输出
error
2.3
算法思想算法思想
(1)主程序示意图如图
2.1
所示。
(2)递归下降分析程序示意图如图
2.2
所示。
(3)语句串分析过程示意图如图
2.3
所示。
(4)赋值语句、表达式、项、因子的分析函数流程图分别如图
2.4、2.5、2.6、2.7
编编
译译
原原
理理
课课
程程
实实
验验
报报
告告
6
所示。
图
2.1
主程序示意图
图
2.2
递归下降分析程序示意图
图
2.3
语句串分析程序示意图
图
2.4
statement
赋值语句分析函数示意图
编编
译译
原原
理理
课课
程程
实实
验验
报报
告告
7
图
2.5
expression
表达式分析函数示意图
图
2.6
term
项分析函数示意图
编编
译译
原原
理理
课课
程程
实实
验验
报报
告告
8
图
2.7
factor
因子分析函数示意图
2.4
代码实现代码实现
1.递归下降分析过程函数
递归下降分析过程如图
2.2
所示,其代码如下图
2.8
所示。
图
2.8
递归下降分析过程函数
2.5
实验结果实验结果
支持多语句输入和换行输入,如果实验中输入的字符串是文法正确的句子,则输出成
功信息,打印“success”
,否则输出“error”
,并且要输出出错类型,例如:“缺
end
错误”
、
“begin
错误”
、
“赋值号错误”
、
“语句错误”
、
“输出错误”
、
“表达式错误”
等。实验测试结果如下。
1.输入串文法正确,测试结果如图
2.9
所示
图
2.9
输入串文法正确
2.
begin
错误,测试结果如图
2.10
所示
编编
译译
原原
理理
课课
程程
实实
验验
报报
告告
9
图
2.10
begin
错误
3.
缺
end
错误,测试结果如图
2.11
所示
图
2.11
缺
end
错误
4.
赋值号错误,测试结果如图
2.12
所示
图
2.12
赋值号错误
5.
语句错误,测试结果如图
2.13
所示
图
2.13
语句错误
6.
输出’)’错误,测试结果如图
2.14
所示
图
2.14
输出’)’错误
7.
表达式错误,测试结果如图
2.15
所示
编编
译译
原原
理理
课课
程程
实实
验验
报报
告告
10
图
2.15
表达式错误
在实验过程中,若是输入的单词串中含有不止一个错误,如上图
2.15
所示,单词串既
有表达式错误,也有缺
end
错误,但是在本次实验中,我们因为已经判断出了表达式
错误,那么就会停止对单词串的继续扫描,所以输出结果只有第一个错误。
三、三、体会体会
通过上机,不仅提高了编程水平,更是加深了自己对课本知识的理解。
首先,我更加感受到实验前准备的意义。上机前准备越充分(如先制定好准备做
的一些步骤,画出程序流程图等)
,这样在真正实验上机的时候目的才越明确,才能
够快速而高效的编写代码,可以解决较多的问题。
其次,本次上机的具体收获有:(1)词法分析的原理和实现方法;(2)语法分
析的原理和实现方法,加深了对递归下降分析法的理解和掌握。同时也增强了自己对
于函数间相互调用的编程能力的掌握。
四、四、参考文献参考文献
[1]
编译原理(第三版)电子工业出版社