当前位置:首页 > 基于FlexBison的高级解释器设计及实现
课程设计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. 编写 Flex/Bison源文件,实现C 语言的语法分析功能,最后上机调试。 3. 要求编写一个测试程序:
首先自定义两个函数sq和avg,sq函数使用Newton方法来迭代计算平方根;avg函数计算两个数值的平均值。
利用定义好的函数进行计算,得到计算结果并显示出来。 4.根据习题1的要求,修改fb3-2相关代码; 实现实现以下自定义函数,并保存为fb3-3。 函数示例:
let sq(n){e=1; while (|((t=n/e)-e)>.001) do {e=avg(e,t);}} let avg(a,b){(a+b)/2;}
let max(a,b) { if(a>b) then a; else b; }
let max3(a,b,c) { if(a>b) then { if(a>c) then a; else c; }
else { if(b>c) then b; else c; } }
3.1.3 开发环境及工具介绍
1、Window环境下载Visual Studio之后,利用其命令提示窗口进行操作。下载并安装Flex。
2、vs2010的编译器cl.exe。 3、flex:词法分析器
Flex是用来生成程序的工具,他们所生成的程序能够处理结构化输入,最初的Flex是用来生成编译器的,但是后来他们被证明在其他领域也非常有效。Flex是一个SourceForge项目。其依赖于GNU m4宏处理器。Linux和BSD都应该有m4,对于Windos用户来说,Flex被包含在Cygein Linux模拟环境中。
什么是FLEX?它是一个自动化工具,可以按照定义好的规则自动生成一个C函数yylex(),也成为扫描器(Scanner)。这个C函数把文本串作为输入,按照定义好的规则分析文本串中的字符,找到符合规则的一些字符序列后,就执行在规则中定义好的动作(Action)。例如在规则中可以这样定义:如果遇到一个换行字符\\n,那么就把行计数器的值加一。Flex文件就是一个文本文件,内容包括定义好的一系列词法规则。
4、bison:语法分析器
GNU bison 是属于 GNU 项目的一个语法分析器生成器。Bison 把一个关于“向前查看 从左到右 最右”(LALR) 上下文无关文法的描述转化成可以分析该文法的 C 或 C++ 程序。它也可以为二义文法生成 “通用的 从左到右 最右” (GLR)语法分析器。
Bison是一种通用目的的分析器生成器。它将LALR(1)上下文无关文法的描述转化成分析该文法的C程序。 一旦你精通Bison,你可以用它生成从简单的桌面计算器到复杂的程序设计语言等等许多语言的分析器。
Bison 基本上与 Yacc 兼容,并且在 Yacc 之上进行了改进。它经常和 Flex (一个自动的词法分析器生成器)一起使用。 此软件的源代码是可自由获得的,在 GPL 下发布。
3.2 系统概要设计
3.2.1 系统体系结构
本实验计算器系统是基于抽象语法树的改进的计算器,在fb3-3.h的文件中实现声明部分,在fb3-3.l文件中实现计算器对应的词法分析,在fb3-3.y文件实现计算器的语法语义分析部分,在fb3-3funcs.c文件对应的是相应的计算器的C语言的代码。之后利用Visual Studio命令提示实现计算器的功能。结构图如下:
声明部分fb3-3.h计算器词法分析fb3-3.l语法语义分析fb3-3.yC语言代码fb3-3.funcs.c
图3-1 系统体系结构图
计算器系统流程图:
开始计算式词法分析器读取标识符语法分析器处理判断节点类型建立相应节点求值输出结果释放结束
图3-2 系统流程图
共分享92篇相关文档