基于FlexBison的高级解释器设计及实现.docx

基于FlexBison的高级解释器设计及实现.docx

ID:53449321

大小:510.92 KB

页数:20页

时间:2020-04-03

基于FlexBison的高级解释器设计及实现.docx_第1页
基于FlexBison的高级解释器设计及实现.docx_第2页
基于FlexBison的高级解释器设计及实现.docx_第3页
基于FlexBison的高级解释器设计及实现.docx_第4页
基于FlexBison的高级解释器设计及实现.docx_第5页
资源描述:

《基于FlexBison的高级解释器设计及实现.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、课程设计3基于Flex/Bison的高级解释器设计及实现3.1需求分析3.1.1问题定义1.使用flex和bison开发了一个具有全部功能的桌面计算器,能够支持变量,过程,循环和条件表达式,使它成为一个虽然短小但是具有现实意义的编译器。2.重点学习抽象语法树的用法,它具有强大而简单的数据结构来表示分析。3.1.2功能描述1.计算器具体需要实现的功能:a)变量命名;b)实现赋值功能;c)实现比较表达式(大于、小于、等于等等)d)实现if/then/else和do/while的流程控制;e)用户可以自定义函数;f)简

2、单的错误恢复机制。2.编写Flex/Bison源文件,实现C语言的语法分析功能,最后上机调试。3.要求编写一个测试程序:首先自定义两个函数sq和avg,sq函数使用Newton方法来迭代计算平方根;avg函数计算两个数值的平均值。利用定义好的函数进行计算,得到计算结果并显示出来。4.根据习题1的要求,修改fb3-2相关代码;实现实现以下自定义函数,并保存为fb3-3。函数示例:letsq(n){e=1;while(

3、((t=n/e)-e)>.001)do{e=avg(e,t);}}letavg(a,b){(a+b

4、)/2;}letmax(a,b){if(a>b)thena;elseb;}letmax3(a,b,c){if(a>b)then{if(a>c)thena;elsec;}else{if(b>c)thenb;elsec;}}3.1.3开发环境及工具介绍1、Window环境下载VisualStudio之后,利用其命令提示窗口进行操作。下载并安装Flex。2、vs2010的编译器cl.exe。3、flex:词法分析器  Flex是用来生成程序的工具,他们所生成的程序能够处理结构化输入,最初的Flex是用来生成编译器的,但

5、是后来他们被证明在其他领域也非常有效。Flex是一个SourceForge项目。其依赖于GNUm4宏处理器。Linux和BSD都应该有m4,对于Windos用户来说,Flex被包含在CygeinLinux模拟环境中。什么是FLEX?它是一个自动化工具,可以按照定义好的规则自动生成一个C函数yylex(),也成为扫描器(Scanner)。这个C函数把文本串作为输入,按照定义好的规则分析文本串中的字符,找到符合规则的一些字符序列后,就执行在规则中定义好的动作(Action)。例如在规则中可以这样定义:如果遇到一个换行

6、字符,那么就把行计数器的值加一。Flex文件就是一个文本文件,内容包括定义好的一系列词法规则。4、bison:语法分析器GNUbison是属于GNU项目的一个语法分析器生成器。Bison把一个关于“向前查看从左到右最右”(LALR)上下文无关文法的描述转化成可以分析该文法的C或C++程序。它也可以为二义文法生成“通用的从左到右最右”(GLR)语法分析器。Bison是一种通用目的的分析器生成器。它将LALR(1)上下文无关文法的描述转化成分析该文法的C程序。一旦你精通Bison,你可以用它生成从简单的桌面计算器

7、到复杂的程序设计语言等等许多语言的分析器。Bison基本上与Yacc兼容,并且在Yacc之上进行了改进。它经常和Flex(一个自动的词法分析器生成器)一起使用。此软件的源代码是可自由获得的,在GPL下发布。3.2系统概要设计3.2.1系统体系结构本实验计算器系统是基于抽象语法树的改进的计算器,在fb3-3.h的文件中实现声明部分,在fb3-3.l文件中实现计算器对应的词法分析,在fb3-3.y文件实现计算器的语法语义分析部分,在fb3-3funcs.c文件对应的是相应的计算器的C语言的代码。之后利用VisualS

8、tudio命令提示实现计算器的功能。结构图如下:图3-1系统体系结构图计算器系统流程图:图3-2系统流程图3.2.2系统模块划分(1)fb3-3.h文件头声明部分我们要做开始声明部分,在.h头文件中我们可以用以下语句来定义抽象语法树的structast{intnodetype;structast*l;structast*r;};且所有节点都有公共的初始nodetype。而删除和释放抽象语法树可以用语句voidtreefree(structast*)来实现即可。常量使用numval,符号引用使用symref赋值使用

9、symasgn,它有一个指向被赋值符号的指针和使用抽象语法树表示的值;(2)fb3-3.l文件词法分析部分词法分析器中设计六个比较操作符都返回一个带有字面值以便于区分的CMP记号,其中这六个关键字和四个内置函数通过文字模式加以识别,它们放在通用模式之前以便于在通用模式之前进行匹配;利用符号表进行词法分析,其中符号表中记录输入中使用的名称以及常用的符号。在这部分需要注意与C

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。