欢迎来到天天文库
浏览记录
ID:6817770
大小:242.00 KB
页数:28页
时间:2018-01-27
《编译原理课程设计-基于表达式计算器》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、**工程学院编译原理课程设计课程设计题目:表达式计算器姓名:***院(系):计算机科学与工程学院专业班级:计算机科学与技术084班学号:5指导教师:***设计日期:2010年12月26日25目录表达式计算器11.需求分析11.1.总述12.概要设计12.1.开发环境12.2.总体设计22.2.1.模块结构图22.2.2.模块说明22.2.3.界面设计33.详细设计43.1.词法分析模块:43.1.1.词法分析简介:43.1.2.词法分析模块的设计及实现43.2.语法分析模块113.2.1.语法分析
2、简介113.2.2.语法分析器的实现113.3文法分析19..1文法分析器生成工具yacc194..测试分析21255课程总结246.参考文献2525表达式计算器1.需求分析1.1.总述计算器是我们经常使用的小工具,它能帮我们对数据进行有效的运算,如通过四则运算能实现对输入数据的加减乘除。本课程设计结合了编译原理中的词法分析、语法分析及语义分析方法,给出了表达式计算器的系统设计过程,并在VC++6.0中使用面向对象的技术实现了计算器。1.2.功能要求计算器的功能要求如下:可以支持加(+)、减(-)
3、、乘(*)、除(/)运算,如3+4-5*2/2;支持括号运算,如(4+5)*5/8;判断用户输入的表达式是否正确,如3+-*3是一个错误的表达式,在计算时将提示错误;用户输入表达式后,按下等号按钮执行计算。2.概要设计2.1.开发环境开发平台:WindowsXP+VC++6.0开发语言:C++251.1.总体设计程序在VC++6.0中使用面向对象的技术实现了计算器。模块设计1.1.1.模块结构图词法分析模块语法分析模块计算模块需要一个单词识别一个单词得到一个语法短语计算结果图1.程序模块图1.1.
4、2.模块说明计算器分为三个功能模块:(1)词法分析模块:对输入的表达式从左到右扫描,识别出表达式中的单词(包括运算符和运算数),若单词的构成不符合词法规则(运算符和运算数的构成规则),则报错并停止计算。(2)语法分析模块:将单词分解为各类语法短语,若存在不符合规则的语法短语,则报错并停止计算。25(3)计算模块:对符合语法规则的语法短语进行计算,若计算不能进行,则报错并停止计算。计算器的三个功能模块中语法分析模块起到了核心作用,如图1所示。1.1.1.界面设计图2表达式计算器251.详细设计1.1
5、.词法分析模块:其词法分析器调用接口为lex()1.1.1.词法分析简介:词法分析是编译原理程序的第一阶段,其任务是:从左至右逐个字符地对源程序扫描和分解,识别出一个个的单词(如标志符、常量、运算符、界符等),并判断单词的构成是否符合词法规则。可以使用上下文无关文法来描述词法规则,使用有限自动机来识别单词。1.1.2.词法分析模块的设计及实现lex工具的基本使用方法和工作原理:Lex工具是一种词法分析程序生成器,它可以根据词法规则说明书的要求来生成单词识别程序,由该程序识别出输入文本中的各个单词。
6、一般可以分为<定义部分><规则部分><用户子程序部分>。其中规则部分是必须的,定义和用户子程序部分是任选的。(1)定义部分定义部分起始于%{符号,终止于%}25符号,其间可以是包括include语句、声明语句在内的C语句。这部分跟普通C程序开头没什么区别。%{#include"stdio.h"intlinenum;%}(2)规则部分规则部分起始于"%%"符号,终止于"%%"符号,其间则是词法规则。词法规则由模式和动作两部分组成。模式部分可以由任意的正则表达式组成,动作部分是由C语言语句组成,这些语
7、句用来对所匹配的模式进行相应处理。需要注意的是,lex将识别出来的单词存放在yytext[]字符数据中,因此该数组的内容就代表了所识别出来的单词的内容。类似yytext这些预定义的变量函数会随着后面内容展开一一介绍。动作部分如果有多行执行语句,也可以用{}括起来。%%title showtitle();[] linenum++;[0-9]+ printf("Int :25%s",yytext);
8、[0-9]*.[0-9]+ printf("Float :%s",yytext);[a-zA-Z][a-zA-Z0-9]*printf("Var :%s",yytext);[+-*/%] printf("Op :%s",yytext);. printf("Unknown:%c",yytext[0]);%%A.规则部分的正则表达式规则部分是Lex描述文件中最为复杂的一部分,下
此文档下载收益归作者所有