课 程 实 验 报 告
课程名称:
编译原理
专业班级: 信息安全 XXXX 班
学 号: XXXXXXXX
姓 名: XXXXXXXX
指导教师: XXXXXXXX
报告日期: 2012 年 11 月
计算机科学与技术学院
目录
实验一 词法分析 ...................................................................................................................... 3
一、 实验目的 .................................................................................................................. 3
二、 实验要求 .................................................................................................................. 3
三、 程序流程图.............................................................................................................. 4
四、 实验过程 .................................................................................................................. 5
五、 测试与分析.............................................................................................................. 5
实验二 语法分析 ...................................................................................................................... 6
一、 实验目的 .................................................................................................................. 6
二、 实验要求 .................................................................................................................. 6
三、 程序流程图.............................................................................................................. 6
四、 实验过程 .................................................................................................................. 9
五、 测试与分析.............................................................................................................. 9
实验总结 ...................................................................................................................................11
实验一 词法分析
一、实验目的
设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。
二、实验要求
(1)关键字:
begin
if then
(2)运算符和定界符:
while
do end
:= +
-
*
/
<
<= <> >
>= =
;
(
)
#
(3)其他单词是标示符(ID)和整形常数(NUM),通过以下正规式定义:
ID = letter(letter|digit)*
NUM = dight dight*
(4)空格由空白、制表符和换行符组成,空格一般用来分隔 ID、NUM、运算
符、界符和关键字,词法分析阶段通常被忽略。
种别码
(5)各种单词符号对应的种别码:
单词符号
begin
if
then
while
do
end
1
2
3
4
5
6
10
11
13
14
15
16
(6)词法分析程序的功能
Letter(letter|digit)*
dight dight*
+
-
*
/
单词符号
种别码
:
:=
<
<>
<=
>
>=
=
;
(
)
#
17
18
20
21
22
23
24
25
26
27
28
0
输入:所给文法的源程序字符串
输出:二元组(syn,token 或 sum)构成的序列
其中:syn 为单词种别码
token 为存放的单词自身字符串
sum 为整形常数
三、程序流程图
(1)主算法流程图
置初值
调用扫描子程序
输出单词二元组
否
输入串结束?
是
结束
(2)扫描子程序主要部分流程图
变量初始化
忽略空格
是否文件结束?
否
拼数
syn=11
syn=10
返回
拼字符串
是否为关键字?
是
syn 为对应关
键字单词的
种别码
是
返回
对不同符
号给出相
应的 syn
报错
四、实验过程
(1)仔细阅读书上给出的程序框架。
(2)填充程序框架,使之成为一个完整且符合要求的程序。
(3)编译程序并修改错误。
(4)运行程序并与预想结果比对,若与预想结果相符则程序正确,否则修
改程序至运行结果与预想结果相符。
五、测试与分析
程序运行结果:
实验二 语法分析
一、实验目的
编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法
检查和结构分析。
二、实验要求
(1)利用 C 语言编制递归下降分析程序,并对简单语言进行语法分析。
(2)用扩充的 BNF 表示如下:
(3)输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,
打印“success”,否则输出“error”。
<程序> ::= begin<语句串>end
<语句串>::=<语句>{;<语句>}
<语句>::=<赋值语句>
<赋值语句>::=ID:=<表达式>
<表达式>::=<项>{+<项>|-<项>}
<项>::=<因子>{*<因子>|/<因子>}
<因子>::=ID|NUM|(<表达式>)
三、程序流程图
(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 函数
出错处理