1、 编译原理课程设计 课程设计题目 :表达式计算器表达式计算器 姓 名 :* 院(系) :计算机科学与工程学院 专业班级 :计算机科学与技术 084 班 学 号 : 指导教师 :* 设计日期 :2010 年 12 月 26 日 I 目录目录 表达式计算器 . 1 1. 需求分析 . 1 1.1. 总述 1 2. 概要设计 . 1 2.1. 开发环境. 1 2.2. 总体设计. 2 2.2.1. 模块结构图. 2 2.2.2. 模块说明 2 2.2.3. 界面设计 3 3. 详细设计 . 4 3.1. 词法分析模块: . 4 3.1.1. 词法分析简介: . 4 3.1.2. 词法分析模块的设计及
2、实现 4 3.2. 语法分析模块 11 3.2.1. 语法分析简介 11 3.2.2. 语法分析器的实现 12 3.3 文法分析20 1 文法分析器生成工具 yacc20 4. .测试分析 .22 II 5 课程总结 25 6 .参考文献 .25 1 表达式计算器 1. 需求分析 1.1. 总述 计算器是我们经常使用的小工具, 它能帮我们对数据进行有效的 运算,如通过四则运算能实现对输入数据的加减乘除。本课程设计结 合了编译原理中的词法分析、 语法分析及语义分析方法, 给出了表达 式计算器的系统设计过程,并在 VC+6.0 中使用面向对象的技术实 现了计算器。 1.2. 功能要求 计算器的功能
3、要求如下:可以支持加(+) 、减(-) 、乘(*) 、除 (/)运算,如 3+4-5*2/2;支持括号运算,如(4+5)*5/8;判断用户 输入的表达式是否正确,如 3+-*3 是一个错误的表达式,在计算时将 提示错误;用户输入表达式后,按下等号按钮执行计算。 2. 概要设计 2.1. 开发环境 开发平台:Windows XP + VC+6.0 开发语言:C+ 2 2.2. 总体设计 程序在 VC+6.0 中使用面向对象的技术实现了计算器。模块设 计 2.2.1.模块结构图 图 1. 程序模块图 2.2.2.模块说明 计算器分为三个功能模块: (1)词法分析模块:对输入的表达式从左到右扫描,识
4、别出表 达式中的单词(包括运算符和运算数) ,若单词的构成不符合词法规 则(运算符和运算数的构成规则) ,则报错并停止计算。 (2)语法分析模块:将单词分解为各类语法短语,若存在不符 合规则的语法短语,则报错并停止计算。 词 法 分 析 模 块 语 法 分 析 模 块 计 算 模 块 需要一个单词 识别一个单词 得到一个语法短语 计算结果 3 (3)计算模块:对符合语法规则的语法短语进行计算,若计算 不能进行,则报错并停止计算。 计算器的三个功能模块中语法分析模块起到了核心作用,如图 1 所示。 2.2.3.界面设计 图 2 表达式计算器 4 3. 详细设计 3.1. 词法分析模块: 其词法分析器调用接口为 lex() 3.1.1.词法分析简介: 词法分析是编译原理程序的第一阶段,其任务是:从左至右逐个 字符地对源程序扫描和分解, 识别出一个个的单词 (如标志符、 常量、 运算符、界符等) ,并判断单词的构成是否符合词法规则。可以使用 上下文无关文法来描述词法规则,使用有限自动机来识别单词。 3.1.2.词法分析模块的设计及实现 lex 工具的基本使用方法和工