《基于SNL语言编译器的面向对象开发》由会员分享,可在线阅读,更多相关《基于SNL语言编译器的面向对象开发(27页珍藏版)》请在金锄头文库上搜索。
1、“基于 SNL 语言编译器的面向对象开发”设计报告 Software College of NENU, 2010 基于 SNL 语言编译器的面向对象开发 文件标识:文件标识:基于 SNL 语言编译器的面向对象开发 当前版本:当前版本: 1.0.0.0 作作 者:者: 文件状态: 草稿 正式发布 正在修改 完成日期:完成日期: 2010.6.20 “基于 SNL 语言编译器的面向对象开发”设计报告 Software College of NENU, 2010 庄琨、戴雨达、冉启 蕾 开发流程 参与者参与者起止日期起止日期备注备注 2010.03 - 2010.04 词法分析阶段 2010.04
2、- 2010.05 语法分析阶段 2010.05 - 2010.06 语义分析阶段 2010.06 - 2010.06 编译器测试 “基于 SNL 语言编译器的面向对象开发”设计报告 Software College of NENU, 2008i 目目目 录录录 一一. . 文档介绍文档介绍 1 1 1.1 文档目的1 1.2 文档范围1 1.3 读者对象1 1.4 参考文献1 二二. . 开发环境及运行环境说明开发环境及运行环境说明 2 2 三三. . 需求分析需求分析 2 2 3.1 总体需求2 3.1.1 编译器界面要求2 3.1.2 编译器功能要求2 3.2 系统总体功能设计3 3.2
3、.1 编译程序的组成 3 3.2.2 对源语言 SNL 的分析 3 3.2.3 基于 SNL 语言编译器的实现 4 3.2.4 各模块的概要设计 4 四四. . 详细设计详细设计 5 5 4.1 词法分析模块5 4.2 语法分析模块8 4.3语义分析模块.10 五五. . 面向对象面向对象 UMLUML 设计设计 1414 5.15.1 SNLSNL 编译器用例图编译器用例图1414 5.25.2 SNLSNL 编译器类图编译器类图1414 5.35.3 SNLSNL 编译器状态图编译器状态图1616 5.45.4 SNLSNL 编译器时序图编译器时序图1616 5.55.5 SNLSNL 编
4、译器活动图编译器活动图1717 5.65.6 SNLSNL 编译器协作图编译器协作图1919 5.75.7 SNLSNL 编译器包图编译器包图1919 六六. . SNLSNL 编译器测试编译器测试1919 6.16.1 单元测试单元测试 1919 6.1.1 模块间调用测试19 6.1.2 主要类调用测试19 “基于 SNL 语言编译器的面向对象开发”设计报告 Software College of NENU, 2008ii 6.1.3 接口函数测试20 6.1.4 界面测试20 6.26.2 功能测试功能测试 2121 6.2.1 等价类表21 6.2.2 测试用例21 7.7. 小组开发
5、心得小组开发心得 2222 “基于 SNL 语言编译器的面向对象开发”设计报告 Software College of NENU, 2008Page 1 of 25 一. 文档介绍 1.1 文档目的 本文档主要对基于 SNL 语言的面向对象开发过程中词法分析、语法分析、语义分析中的 类设计、接口设计、界面设计、编码等做出了统一的规定,同时给出了面向对象设计的完整 过程。它是开发人员,测试人员编码及测试的重要参考依据。 1.2 文档范围 本文档包含以下几个部分: 1. 文档介绍 2. 开发环境及运行环境说明 3. 需求分析 4. 详细设计 5. 面向对象 UML 设计 6SNL 编译器测试 7小
6、组开发心得 1.3 读者对象 本文档的主要读者包括: 1. SNL 编译器的设计人员:包括模块设计人员 2. SNL 编译器的系统开发人员:包括编码人员 3. SNL 编译器的测试人员 1.4 参考文献 1 刘磊,金英,张晶,张荷花.编译程序的设计与实现M.北京:高等教育出版 社,2004 2 金成植.编译原理与实现M.北京:高等教育出版社,2004 “基于 SNL 语言编译器的面向对象开发”设计报告 Software College of NENU, 2008Page 2 of 25 二. 开发环境及运行环境说明 开发语言:C+ 界面制作:MFC 开发平台:VS 2008 面向对象 UML
7、设计工具:PowerDesigner12.5 版本控制:SVN 文件生成工具:JartoExe 单元测试工具:Junit3.8 三. 需求分析 3.1 总体需求 经过调研及小组讨论“SNL 编译器”的用户需求有两方面,分别为界面要求及功能要求。 3.1.1 编译器界面要求 “SNl 编译器”的窗口界面分为三部分;最上部分为菜单栏,包括文件、单步执行、小 组信息等三个按钮,其中文件按钮细分为打开、保存、关闭;单步执行按钮细分为词法分析, 语法分析。中间部分为程序显示,最下面为进行词法和语法分析后的结果显示。 3.1.2 编译器功能要求 从菜单栏中点击单步执行中的词法分析时显示词法分析结果,点击语
8、法分析时显示语法 树,如果程序有错则可以显示错误信息,点击语义分析,显示语义分析结果。 “基于 SNL 语言编译器的面向对象开发”设计报告 Software College of NENU, 2008Page 3 of 25 3.2 系统总体功能设计 3.2.1 编译程序的组成 编译程序通常包括:词法分析、语法分析、语义分析、中间代码生成、中间代码优化、 目标代码生成。如图 1 所示。由于时间有限,本编译器只做前三部分。 SNL 源程序 词 法 分 析 程序 语 法 分 析 程序 语 义 分 析 程序 出 错 处 理 目 标 代 码 生 成 SNL 目 标程序 表 格 处 理 中 间 代 码
9、生 成 中 间 代 码 优 化 图 3.2 带优化的 SNL 编译程序功能结构图 图 1 3.2.2 对源语言 SNL 的分析 词法: 1 SNL 语言的字符表:=a-z|A-Z|0-9|+|-|*|/|=|(| )| |.|;|EOF|空白字符| | 2. 单词的巴克斯范式 :=字母 字母 | 数字 :=数字 数字 := + | - | *| / | ( | ) | | | ; | . | | = | EOF | 空白字符 :=: = := := “基于 SNL 语言编译器的面向对象开发”设计报告 Software College of NENU, 2008Page 4 of 25 := :
10、= := a-z|A-Z := 0-9 语法: 1. 程序头的形式是:关键字 program 后面跟着程序名标识符; 2. 类型定义的形式是:类型名称标识符=类型定义 3. 变量声明形式是:类型名后面跟着能够逗号隔开的变量标识符序列 4. 过程声明的形式是:关键字 procedure 跟着过程名标识符以及参数声明、类型定义、 变量说明、内层 5. 程序体的形式是:以关键字 begin 开始,关键字 end 结尾,中间是用分号隔开的语 句序列。如果是主程序,则在 end 后用“. ”标志整个程序体结束 语义: 1、 构造符号表和信息表 2、 进行语义错误检查 3.2.3 基于 SNL 语言编译器
11、的实现 词法分析,以源程序为输入,生成单词的内部表示 TOKEN 序列 语法分析,以 TOKEN 序列为输入进行语法分析,采用了 LL1 方法生成整个源程序的语法 分析树。 语义分析,输入为一棵语法正确的语法分析树,遍历这棵语法分析树,构造符号表和信 息表,并进行语义错误检查,生成一棵语义正确的语法树。 3.2.4 各模块的概要设计 词法分析模块: “基于 SNL 语言编译器的面向对象开发”设计报告 Software College of NENU, 2008Page 5 of 25 根据源语言的词法规则,扫描源程序的字母(ASCII 码)序列,并识别出一个一个具有 独立意义的最小语法单位,即
12、“单词” ,同时确定该单词的种类(如标识符,或界限符,或 常数,等等) ,并把每个单词的 ASCII 码序列替换为统一的标准形式所谓的机内表示 TOKEN 形式,同时词法分析还要完成词法错误的检查以及去掉注释、空格、制表符等。词法 分析阶段不依赖于语言的语法定义。 语法分析模块: 根据源语言的语法规则,逐一地扫描词法分析后的 TOKEN 序列,以确定源程序的具体组 成结构(语法结构) 。分析时如发现有不符合语法规则的地方,则打印出错位置,以便程序 员进行修改;如果未发现语法错误,则将源程序转换成能够表示程序结构的语法树的形式。 语义分析模块: 遍历语法分析的结果语法分析树的各个结点,对于声明部
13、分的各个结点,构造符号表和 信息表,利用局部符号表栈的存储原理,进行判定是否重复声明错误。对于程序体部分的各 个节点,判定是否语义错误,如果错误,则输出错误,如果没有错误,则输出符号表。 四四. . 详细设计详细设计 4.1 词法分析模块 1. 任务目标:以源程序输入,生成单词的内部表示 TOKEN 序列 2. 词法分析程序的输入处理 缓冲区:使用 1 个字符串作为缓冲区。 3. SNL 语言词法的形式化描述 DFA 如图 2 所示。 “基于 SNL 语言编译器的面向对象开发”设计报告 Software College of NENU, 2008Page 6 of 25 Start End L
14、 标识符 状态 数字状 态 Other D 完成状 态 Other + +| |- -| |* *| |/ /| | | |= =| |( (| |) )| | | | | |; ;| |E EO OF F| |空空格格 L|D D 赋值状态 = = : 注释开 始 Other Other数组下标 . . 字符状态 . . Other Other 程序结束状态 其他符号 出错 L|D 字符状态 Other 其他出错 其他字符 出错 L|D 注释结 束 其他字符 其他字符 图 2 “基于 SNL 语言编译器的面向对象开发”设计报告 Software College of NENU, 2008Pa
15、ge 7 of 25 4. DFA 的实现 运用直接转向法,又称程序中心法,把状态转换图看成一个流程图,从状态转换图的初 态开始,对它的每一个状态节点都编一段相应的程序。 5. Token 的数据结构定义如下 class Token int t_LineNum; TokenType t_TokenType; string t_TokenSeman; 6. Token 链表 class TokenList list m_tokens; list:iterator m_tokensIterator; 7 词法分析程序的输出(要求在显示器上输出 token) 词法分析程序读入字符串形式的源程序,识别
16、出具有独立意义的最小语法单位单词, 并将单词序列变换成表明单词性质的 TOKEN 序列。 SNL 词法分析对于每类单词的分析结果的 TOKEN 结构为三元组(词法信息,语义信息以 及该单词在源程序中的行号) 。SNL 词法分析程序的输出是 TOKEN 序列。数据表示为链表形式。 8. 程序实现: 输入:字符串形式的 SNL 源程序 输出:表明单词性质的 TOKEN 序列 实现过程的主要函数如下: void Initial(string filename);/初始化函数 void LexAnalyze();/词法分析的主要分析函数 bool isLetter (char ch);/标识符 bool isDigit (char ch);/数字 bool isSymbol (ch