中国矿业大学计算机学院
2015 级本科生课程设计报告
课程名称 系统软件开发实践
报告时间
2018.04.15
学生姓名
陈洁
学
专
号
08153324
业 计算机科学与技术
任课教师
葛欣
评分
指标点
课程教学目标
占比
得分
序
号
1
2.1 能够针对一个系统
目标 1:针对编译器中词法分析
或者过程进行抽象分
器软件要求,能够分析系统需求,
析与识别,选择或建立
并采用 FLEX 脚本语言描述单词
一种模型抽象表达,并
结构。
进行推理、求解和验
目标 2:针对编译器中语法分析
证。
器软件要求,能够分析系统需求,
并采用 Bison 脚本语言描述语法
结构。
2.3 能够针对具体的计
算机领域复杂工程的
多种可选方案,进一步
2
根据约束条件进行分
析评价,通过文献研究
等方法给出具体指标
和有效结论。
3.3 在掌握基本的算法
和硬件架构基础上,理
目标 3:针对计算器需求描述,
采用 Flex/Bison 设计实现高级
解释器,进行系统设计,形成结
构化设计方案。
15%
15%
30%
3
4
解软硬件资源的管理
目标 4:针对系统软件需求描述,
以及建立在此基础上
采用软件工程进行系统分析、设
30%
的各类系统的概念、原
计和实现,形成工程方案。
理及其在计算机领域
的主要体现。
8.3 能够在计算机领
目标 5:培养独立解决问题的能
域工程实践中遵守工
力,理解并遵守计算机职业道德
程职业道德和规范,履
和规范,具有良好的法律意识、
10%
行责任。
社会公德和社会责任感。
评语:
总 目 录
课程设计 1 基于 Flex 的词法分析器设计及实现..............................................................................................5
课程设计 2 基于 Bison 的语法分析器设计及实现...........................................................................................14
课程设计 3 基于 Flex/Bison 的高级解释器设计及实现 ...................................................................................22
课程设计 4 基于 Flex/Bison 的 SQL 解析器设计就及实现.............................................................................. 39
课程设计 1 基于 Flex 的词法分析器设计及实现
目 录
课程设计 1 基于 Flex 的词法分析器设计及实现..............................................................................................5
1 需求分析.................................................................................................................................................................6
1.1 问题定义................................................................................................................................................. 6
1.2 功能描述................................................................................................................................................. 6
1.3 开发环境及工具介绍.............................................................................................................................7
2 系统概要设计........................................................................................................................................................ 8
2.1 系统体系结构.........................................................................................................................................8
2.2 系统模块划分.........................................................................................................................................8
2.3 系统数据流图.........................................................................................................................................9
3 详细设计与实现..................................................................................................................................................10
3.1 定义模块的设计与实现.......................................................................................................................10
3.2 规则模块的设计与实现.......................................................................................................................10
3.3 辅助模块的设计与实现.......................................................................................................................11
4 系统分析与测试..................................................................................................................................................12
4.1 测试用例设计.......................................................................................................................................12
4.2 测试结果...............................................................................................................................................12
结 论....................................................................................................................................................................... 13
本文工作和成果..........................................................................................................................................13
系统不足与展望..........................................................................................................................................13
1 需求分析
1.1 问题定义
参考《yacc 与 lex 快速入门》,了解 flex 工作机制,根据给定 c 语言的子集结合编译原
理编写 LEX 源文件生成相应 c 语言词法分析器。
1.2 功能描述
所设计的词法分析器可以对 c 语言子集进行相应的单词识别,如图 1-1-。
(1) 下面是语言的关键字:
else if switch for
int
float
return void while
所有的关键字都是保留字,并且必须是小写。
(2) 下面是专用符号:
+ - * / < <= > >= == != = ; , ( ) [ ] { } /* */
(3) 其他标记是标识符(ID) 和数字(NU ),通过下列正则表达式定义:
ID = letter letter*
NUM = digit digit*
letter = a|..|z|A|..|Z
digit = 0|..|9
注:小写和大写字母是有区别的
(4) 空格由空白、换行符和制表符组成。空格通常被忽略,除了它必须分开 ID、NUM 关键
字。
(5) 注释用通常的 C 语言符号/* . . . */围起来。注释可以放在任何空白出现的位置(即
注释不能放在标记内)上,且可以超过一行。注释不能嵌套。
图 1-1 词法分析器用例图
1.3 开发环境及工具介绍
代码编写:notepad++
词法分析:Flex
运行环境:Windows 10,Visual Studio 2010
图形绘制:Visio 2013
2 系统概要设计
2.1 系统体系结构
词法分析器扫描用户输入源文件中的字符识别出不同种类的单词组合,并返回相应结果,
如图:
图 2-1 词法分析器系统结构
2.2 系统模块划分
根据 lex 语法程序划分为以下模块:
(1)定义模块
功能:简化扫描器规范,%{和%}之间的代码会原样照抄到生成的 c 文件开头部分。
(2)规则模块
组成:模式(正则表达式)+动作(c 语句)
功能:模式出于每一行开头,指出每个单词如何构成,定义规则进行关键字处理、专用符
号处理、标识符处理、数字处理、注释处理、其他字符处理、空字符处理。
(3)辅助模块
功能:引入词法分析需要用到的函数。