网站大量收购闲置独家精品文档,联系QQ:2885784924

基于表达式计算器.doc

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于表达式计算器

**工程学院 编译原理课程设计 课程设计题目 :表达式计算器 姓 名 :*** 院(系) :计算机科学与工程学院 专业班级 :计算机科学与技术084班 学 号 :5 指导教师 :*** 设计日期 :2010 年 12 月26日 目录 表达式计算器 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. 词法分析模块的设计及实现 4 3.2. 语法分析模块 11 3.2.1. 语法分析简介 11 3.2.2. 语法分析器的实现 11 3.3 文法分析 19 ..1 文法分析器生成工具yacc 19 4. .测试分析 21 5 课程总结 24 6 .参考文献 25 表达式计算器 需求分析 总述 计算器是我们经常使用的小工具,它能帮我们对数据进行有效的运算,如通过四则运算能实现对输入数据的加减乘除。本课程设计结合了编译原理中的词法分析、语法分析及语义分析方法,给出了表达式计算器的系统设计过程,并在VC++6.0中使用面向对象的技术实现了计算器。 功能要求 计算器的功能要求如下:可以支持加(+)、减(-)、乘(*)、除(/)运算,如3+4-5*2/2;支持括号运算,如(4+5)*5/8;判断用户输入的表达式是否正确,如3+-*3是一个错误的表达式,在计算时将提示错误;用户输入表达式后,按下等号按钮执行计算。 概要设计 开发环境 开发平台:Windows XP + VC++6.0 开发语言:C++ 总体设计 程序在VC++6.0中使用面向对象的技术实现了计算器。模块设计 模块结构图 图1. 程序模块图 模块说明 计算器分为三个功能模块: (1)词法分析模块:对输入的表达式从左到右扫描,识别出表达式中的单词(包括运算符和运算数),若单词的构成不符合词法规则(运算符和运算数的构成规则),则报错并停止计算。 (2)语法分析模块:将单词分解为各类语法短语,若存在不符合规则的语法短语,则报错并停止计算。 (3)计算模块:对符合语法规则的语法短语进行计算,若计算不能进行,则报错并停止计算。 计算器的三个功能模块中语法分析模块起到了核心作用,如图1所示。 界面设计 图2表达式计算器 详细设计 词法分析模块: 其词法分析器调用接口为lex() 词法分析简介: 词法分析是编译原理程序的第一阶段,其任务是:从左至右逐个字符地对源程序扫描和分解,识别出一个个的单词(如标志符、常量、运算符、界符等),并判断单词的构成是否符合词法规则。可以使用上下文无关文法来描述词法规则,使用有限自动机来识别单词。 词法分析模块的设计及实现 lex工具的基本使用方法和工作原理: Lex工具是一种词法分析程序生成器,它可以根据词法规则说明书的要求来生成单词识 别程序,由该程序识别出输入文本中的各个单词。 一般可以分为定义部分规则部 分用户子程序部分。其中规则部分是必须的,定义和用户子程序部分是任选的。 (1)定义部分 定义部分起始于 %{ 符号,终止于 %} 符号,其间可以是包括include语句、声明语句 在内的C语句。这部分跟普通C程序开头没什么区别。 %{ #include stdio.h int linenum; %} (2) 规则部分 规则部分起始于%%符号,终止于%%符号,其间则是词法规则。词法规则由模式和 动作两部分组成。模式部分可以由任意的正则表达式组成,动作部分是由C语言语句组 成,这些语句用来对所匹配的模式进行相应处理。需要注意的是,lex将识别出来的单 词存放在yytext[]字符数据中,因此该数组的内容就代表了所识别出来的单词的内容。 类似yytext这些预定义的变量函数会随着后面内容展开一一介绍。动作部分如果有多 行执行语句,也可以用{}括起来。 %% title???????????????? showtitle(); [\n]????????????????? linenum++; [0-9]+??????????????? printf(Int???? : %s\n,yytext); [0-9]*\.[0-9]+??????? printf(Float?? : %s\n,yytext); [a-zA-Z][a-zA-Z0-9]* printf(Var???? : %s\n,yytext); [\+\-\*\/\%]????????? printf(Op????? : %s\n,yytext); .???????????????????? printf(Unknown : %c\n,

您可能关注的文档

文档评论(0)

2017meng + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档