编译原理报告(5) 本文关键词:编译,原理,报告
编译原理报告(5) 本文简介:课程实验报告课程名称:编译原理专业班级:信息安全1302班学号:姓名:指导教师:报告日期:2015年11月8日计算机科学与技术学院目录实验一词法分析3一、实验目的3二、实验要求3三、程序流程图4四、实验过程5五、测试与分析5实验二语法分析6一、实验目的6二、实验要求6三、程序流程图6四、实验过程9五
编译原理报告(5) 本文内容:
课
程
实
验
报
告
课程名称:
编译原理
专业班级:
信息安全1302班
学
号:
姓
名:
指导教师:
报告日期:
2015年11月8日
计算机科学与技术学院
目录
实验一
词法分析3
一、
实验目的3
二、
实验要求3
三、
程序流程图4
四、
实验过程5
五、
测试与分析5
实验二
语法分析6
一、
实验目的6
二、
实验要求6
三、
程序流程图6
四、
实验过程9
五、
测试与分析9
实验总结11
9
实验一
词法分析
1、
实验目的
设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。
2、
实验要求
(1)
关键字:
begin
ifthenwhiledoend
(2)
运算符和定界符:
:=+-*/>>==;()#
(3)
其他单词是标示符(ID)和整形常数(NUM),通过以下正规式定义:
ID
=
letter(letter|digit)*
NUM
=
dight
dight*
(4)
空格由空白、制表符和换行符组成,空格一般用来分隔ID、NUM、运算符、界符和关键字,词法分析阶段通常被忽略。
(5)
各种单词符号对应的种别码:
单词符号
种别码
单词符号
种别码
begin
1
:
17
if
2
:=
18
then
3
21
do
5
23
Letter(letter|digit)*
10
>=
24
dight
dight*
11
=
25
+
13
;
26
-
14
(
27
15
)
28
/
16
#
0
(6)
词法分析程序的功能
输入:所给文法的源程序字符串
输出:二元组(syn,token或sum)构成的序列
其中:syn为单词种别码
token为存放的单词自身字符串
sum为整形常数
3、
程序流程图
(1)
主算法流程图
置初值
调用扫描子程序
输出单词二元组
输入串结束?
否
是
结束
(2)
扫描子程序主要部分流程图
变量初始化
忽略空格
是
返回
是否文件结束?
否
拼数
拼字符串
报错
对不同符号给出相应的syn
syn=11
是否为关键字?
是
syn为对应关键字单词的
种别码
syn=10
返回
4、
实验过程
(1)
仔细阅读书上给出的程序框架。
(2)
填充程序框架,使之成为一个完整且符合要求的程序。
(3)
编译程序并修改错误。
(4)
运行程序并与预想结果比对,若与预想结果相符则程序正确,否则修改程序至运行结果与预想结果相符。
5、
测试与分析
程序运行结果:
实验二
语法分析
1、
实验目的
编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。
2、
实验要求
(1)
利用C语言编制递归下降分析程序,并对简单语言进行语法分析。
(2)
用扩充的BNF表示如下:
::=
beginend
::={;}
::=
::=ID:=
::={+|-}
::={*|/}
::=ID|NUM|()
(3)输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“error”。
3、
程序流程图
(1)
主算法流程图
置初值
调用scaner读下一个单词符号
调用lrparser
结束
(2)
递归下降分析程序示意图
否
是否begin?
是
调用scaner
调用语句分析函数
否
是否end?
是
调用scaner
否
Syn0&&kk=0?
是
出错处理
打印分析成功
(3)
语句串分析示意图
调用statement函数
否
是否;?
是
调用scaner
调用statement函数
出错处理
(4)
Statement语句分析函数示意图
否
是否标示符?
是
调用scaner
否
是否:=?
是
调用scaner
出错处理
调用expression函数
(5)
Expression表达式分析函数示意图
调用term函数
否
是否+,-?
是
调用scaner
出错处理
调用term函数
(6)
Term分析函数示意图
调用factor函数
否
是否*,/?
是
调用scaner
出错处理
调用factor函数
(7)
Factor分析过程示意图
是
是否标示符?
是
是否整常数?
否
是否整(?
否
调用scaner
调用scaner
调用expression函数
否
是否整)?
是
出错处理
调用scaner
4、
实验过程
(1)仔细阅读书上给出的程序框架。
(2)填充程序框架,使之成为一个完整且符合要求的程序。
(3)编译程序并修改错误。
(4)运行程序并与预想结果比对,若与预想结果相符则程序正确,否则修改程序至运行结果与预想结果相符。
5、
测试与分析
程序运行结果:
实验总结
这两个实验分别为词法分析和语法分析实验,此次基本是按照书上的源码进行实现,而且源码书上也有。所以实验的意义估计就在于让我们更加深刻的理解到词法分析和语法分析的意义和实际实现。通过这两个实验,加深了对词法分析和语法分析的理解,熟悉了词法分析和语法分析实现的方法和技术。对编译程序也有了更深一层的理解,领悟了部分在编译程序中渗透的思想,为以后写完整的编译程序和进行其他相关学习打下了基础。