第一范文网 - 专业文章范例文档资料分享平台

系统软件开发实践实验报告(计科-4 徐竹)

来源:用户分享 时间:2025/5/25 10:39:10 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

《系统软件开发实践》 实验报告 第7页

的cgrammar-new.tab.c文件中的一段代码并删去“if ( ! yyin )yyin = stdin”才可以编译通过(解析之前,还要设置yyin为输入文件指针); 3、在命令行里利用生成的exe文件调用测试文件得到结果。

五、实验小结

相对于flex源文件,bison源文件的编写更为艰难,但通过实验了解了flex与bison联合编译的思想和方法,并明白了bison将词法分析阶段的规则进行合并的过程,这些将有助于在接下来的实验中完成简单编译器。

实验三(第三周) 简单桌面计算器

一、实验说明

使用flex和bison开发了一个具有全部功能的桌面计算器,能够支持变量,过程,循环和条件表达式,使它成为一个虽然短小但是具有现实意义的编译器。 重点学习抽象语法树的用法,它具有强大而简单的数据结构来表示分析结果。

-

《系统软件开发实践》 实验报告 第8页

该计算器具体需要实现的功能包括变量命名、实现赋值功能、实现比较表达式(大于、小于、等于等等)、实现if/then/else和do/while的流程控制、用户可以自定义函数;简单的错误恢复机制。最后编写测试程序时首先自定义两个函数sq和avg,sq函数使用Newton方法来迭代计算平方根;avg函数计算两个数值的平均值。利用定义好的函数进行计算,得到计算结果并显示出来。

二、实验原理与设计分析

还要分析下,在Bison与Flex联用时,Bison只定义标记的ID。Flex则需要知道这些词法标记的ID,才能在识别到一个词法标记时返回这个ID给Bison。Bison传递这些ID给Flex的方法,就是在调用bison命令时使用参数-d。使用这个参数后,Bison会生成一个独立的头文件,该文件的名称形式为name.tab.h。在Flex的词法规则文件中,在定义区段里包含这个头文件即可。

在编译器中最强大的数据结构之一就是抽象语语法树。抽象语法树作为一种通用的中间表示,不仅包含各种语言共有的语法结构,某些特定类型的树节点还可以表示一些语言特有的语法结构。抽象语法树易于转换成寄存器转移语言,而寄存器转移语言适合在不同平台下进行优化,这使得GCC的两层中间表示具有良好的通用性。

作为一种良好的中间表示,抽象语法树包含了完整的源程序信息。利用抽象语法树可以实现多种源程序处理工具,比如智能编辑器、源程序浏览器等。此外,抽象语法树的解析器也可以作为程序静态分析工具的前端,为其提供一种便于分析的输入。

抽象语法树结构比较简单,其对应的词法规则和语法规则易于构造,使用flex和bison工具生成的解析器能够有效地对抽象语法树进行解析。解析器由三部分组成,分别是flex生成的词法分析器、bison生成的语法分析器和手工编写的驱动程序。词法分析器识别抽象语法树文件的记号流,提供给语法分析器;语法分析器利用嵌入其中的语义动作识别语法树节点,完成解析任务;驱动程序负责为词法分析器和语法分析器提供一个调用接口,并提供解析所需的数据结构和函数的实现。

在计算器里,factor仅仅是为了告诉语法分析器各个操作符的相对优先级,抽象语法树可以把分析树中的不需要关注的节点移除。

三、实验步骤和设计实现过程分析

本部分主要说明一下计算器的设计过程以及在设计过程中用到的一些重点算法和思想等内容。

1、首先我们要做开始声明部分,在.h头文件中我们可以用以下语句来定义抽象语法树的

struct ast {int nodetype;struct ast *l;struct ast *r;};

-

《系统软件开发实践》 实验报告 第9页

节点,且所有节点都有公共的初始nodetype。而删除和释放抽象语法树可以用语句void treefree(struct ast *)来实现即可。常量使用numval,符号引用使用symref 赋值使用symasgn,它有一个指向被赋值符号的指针和使用抽象语法树表示的值; 2、语法分析器的设计,其中在语法分析器的最后提供了小部分错误恢复机制,这让我们有可能在错误发生时把语法分析器恢复到可以继续工作的状态;

3、词法分析器中设计六个比较操作符都返回一个带有字面值以便于区分的CMP记号,其中这六个关键字和四个内置函数通过文字模式加以识别,它们放在通用模式之前以便于在通用模式之前进行匹配;

4、最后还要加一个辅助函数,正如《flex与bison》中所讲的一样,例程treefree的扩展版本会递归的遍历一颗抽象语法树并释放这棵树的所有节点。本计算器的核心例程是eval,它用来计算分析器中构造的抽象语法树。我们采用深度优先遍历算法来计算表达式的值;

5、完成以上工作后我们就可以在命令行里依次输入指令得到运行结果了:

四、实验小结

使用bison和flex工具学习编译原理,远比单独看书然后自己编写一些程序生动的多。这样你就不会在那些复杂的字符处理。但对于初学者来说,完全编译出来本次试验的桌面计算器的编译器还是挺困难的。因此本次计算器的实现主要还是依靠flex与bison这本书的帮助才得以实现。本计算器虽然短小但却很具有代表意义。我们添加了命名的变量和赋值、比较表达式、if和then等的流程控制内置和用户自定义函数以及错误恢复机制等。

实验四(第四周) 操作系统实验(Lab0实验)

一、实验目的

1、掌握OS基本概念:看在线课程,能理解OS原理与概念;看在线实验指导书并分析源码,能理解labcodes_answer的labs运行结果;

2、掌握OS设计实现:在1的基础上,能够通过编程完成labcodes的8个lab实验中的

-

《系统软件开发实践》 实验报告 第10页

基本练习和实验报告;

3、本次lab0实验主要是让我们熟悉实验环境以便于后续的实验操作。

二、实验说明

ucore的运行环境可以是真实的X86计算机,不过考虑到调试和开发的方便,我们可采用X86硬件模拟器,比如QEMU、BOCHS、VirtualBox、VMware 、Player等。ucore的开发环境主要是GCC中的gcc、gas、ld和MAKE等工具,也可采用集成了这些工具的IDE开发环境Eclipse-CDT等。在分析源代码上,可以采用Scitools提供的understand软件(跨平台),windows环境上的source、insight软件,或者基于emacs+ctags,vim+ctags等,都可以比较方便在在一堆文件中查找变量、函数定义、调用/访问关系等。软件开发的版本管理可以采用GIT、SVN等。比较文件和目录的不同可发现不同实验中的差异性和进行文件合并操作,可使用meld、kdiff3、UltraCompare等软件。调试(deubg)实验有助于发现设计中的错误,可采用gdb(配合qemu)等调试工具软件。并可整个实验的运行环境和开发环境既可以在Linux或Windows中使用。

关于实验环境的配置基本是有五种方式(在线实验--基于\实验楼\在线平台、Windows下基于MingW进行实验、Windows下基于VirtualBox or VMWare进行实验、在MAC OS下进行实验和手动在物理PC中安装环境),我选择的是手动在自己的电脑上上安装ubuntu并在ubuntu系统中安装实验环境相关软件在shell(比如gnome-terminal)下可执行相关命令来安装相关软件。以下是在自己的笔记本上安装实验环境成功的截图:

Linux文件系统被组织成一个有层次的树形结构。文件系统的最上层是 /,或称为 根目录。在 Unix 和 Linux 的设计理念中,一切皆为文件——包括硬盘、分区和可插拔介质。这就意味着所有其它文件和目录(包括其它硬盘和分区)都位于根目录中。 例如:/home/jebediah/cheeses.odt 给出了正确的完整路径,它指向 cheeses.odt 文件,而该文件位于 jebediah 目录下,该目录又位于 home 目录,最后,home 目录又位于根(/) 目录下。 了解这些对今后更深一步了解操作系统的结构尤为重要。 使用命令行并不像您想象的那么困难。使用命令行不需要专门知识,和其它软件一样,它也仅仅是一个程序。Linux 中绝大部分工作都可以用命令行完成,尽管大部分程序都有相应的图形工具,但有时这些图形工具会捉襟见肘,不够用。此时便是命令行大显身手的时候。 终端常常被称为命令行或者 shell。

QEMU是一个通用并开放源代码的模拟器,是一套由Fabrice Bellard所编写的以GPL许可证分发源码的模拟处理器,在GNU/Linux平台上使用广泛。其功能相当的强大,例如:

-

系统软件开发实践实验报告(计科-4 徐竹).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c88l2v6h7oi0zdc5257e8_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top