《编译原理》实验报告

上传人:第*** 文档编号:34719857 上传时间:2018-02-27 格式:DOC 页数:9 大小:113KB
返回 下载 相关 举报
《编译原理》实验报告_第1页
第1页 / 共9页
《编译原理》实验报告_第2页
第2页 / 共9页
《编译原理》实验报告_第3页
第3页 / 共9页
《编译原理》实验报告_第4页
第4页 / 共9页
《编译原理》实验报告_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《《编译原理》实验报告》由会员分享,可在线阅读,更多相关《《编译原理》实验报告(9页珍藏版)》请在金锄头文库上搜索。

1、编译原理实验报告班级学号 08301133 姓 名 黄鹏贤 成 绩 指导教师 孙承福 沈阳理工大学应用技术学院 2011 年 8 月实验一 1实验时间: 2011-8-2 2实验地点: 6#503 3实验题目: 算术表达式到四元式翻译的编译程序设计 4实验目的:该实验的目的是让学生掌握程序设计语言编译程序构造的一 般原理、基本设计方法、主要实现技术和一些自动构造的工具。 通过该实验的学习,使我们较好的掌握编译原理的基本原理和基 础技术、编译原理中涉及的基本算法、基本构造和主要实现技术, 从而让我们了解将高级程序设计语言源程序编译成计算机能处理 的目标代码语言的整个过程,基本掌握计算机系统软件之

2、一编译 程序的构造原理及相关技术,同时,还可以提高我们计算机专业 素质,培养我们的抽象思维能力。 5实验内容: 设计内容及要求:设计一个语法制导翻译器,将算术表达式 翻译成四元式。要求:先确定一个定义算术表达式的文法,为其 设计一个语法分析程序,为每条产生式配备一个语义子程序,按 照一遍扫描的语法制导翻译方法,实现翻译程序。对用户输入的 任意一个正确的算术表达式,程序将其转换成三.四元式输出(可 按一定格式输出到指定文件中)。 6实验预习: 四元式是一种更接近目标代码的中间代码形式。由于这种 形式的中间代码便于优化处理,因此,在目前许多编译程序中 得到了广泛的应用。 具体的形式犹如:( 1)

3、(op,arg1,arg2,result)例如,语句 a=b+(c-d)*e+f/g 的四元式表示如表 2.1所示。 op left right T(1) (2) (3) (4) (5) (6) - c d T1 * T1 e T2 + b T2 T3 / f g T4 + T3 T4 T5 = a T5 T6 1).检查输入的元素; 2).如果是一个操作数,则进栈; 3).如果是操作符,则i). 如果符号栈不为空或者此操作符的优先级大于符号栈栈顶 的优先级,则将此运算符压栈;ii).如果符号栈不为空或者此操作符的优先级小于符号栈栈顶 的优先级,栈顶操作符出栈并进行相应的操作; 4).假定输入

4、完毕,栈中剩余的所有操作符出栈并进行相应操作。 7总体设计描述: 按照顺序将任意一个正确的算术表达式拆分成操作符和操作 数部分并入栈,如后比较优先级按照优先级高低出栈,执行操作 将算术表达式转换成四元式输出。 本程序共有两个函数,一个将算术表达式翻译成四元式的函数 int translate(string s),是本程序的主要函数;另一个是主函数,负责 调用翻译函数和输入输出处理 运行步骤与结果:程序清单: #include #include #include #include #include using namespace std; const char*Schange_file=“f1.

5、txt“; ifstream input_file; ofstream output_file; int instack(const char c) switch(c) case =: return -1; case (: return 0;case +: return 2; case -: return 2; case *: return 4; case /: return 4; case ): return 5; default: return -2; int outstack(const char c) switch(c) case (: return 6; case +: return

6、 1; case -: return 1; case *: return 3; case /: return 3; case ): return 0; default: return -2; int translate(string s) stack OPND; stack OPER; char op;string arg1, arg2; int step = 0; char sChange10; string sTemp; cout =0 output_file.open(Schange_file,ios:out);translate(s);output_file.close(); cout

7、 endl; return 0; 8 实验总结: 编译原理课程对实践的要求比较高,所以实验课是培养我们 实践能力的重要环节,是巩固和验证所学理论知识,培养学生分 析能力的重要环节。因此为了能达到好的效果,积极的促进我们 对原理的理解,我们可以认真的设计实验内容,同时也达到了一 定的效果。同时加深了我对词法分析和语法分析的理解,而且提 高额 C,C#的编程水平,有助于编译原理课程的学习。 在实验的过程中还发现了自己的许多不足之处,例如对知识 理解的不够深刻,掌握得不够牢固,这样就可以从课本上查漏补 缺。除了课本上的知识,还进一步掌握了词法分析和递归子程序 语法分析的实现过程。 总之,本次实验,使我获益匪浅。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号