- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算术表达式到四元式翻译的编译程序设计
《编译原理》实验报告
算术表达式到四元式翻译的编译程序设计
班级学号
姓 名
成 绩
指导教师
沈阳理工大学应用技术学院
2012 年 7 月
实验一 ?
1实验时间:
2012-07-07
2实验地点:
6#506
3实验题目:
算术表达式到四元式翻译的编译程序设计
4实验目的:
掌握将算术表达式翻译成四元式的方法及过程
5实验内容:
设计一个语法制导翻译器,将算术表达式翻译成四元式。要求:先确定一个定义算术表达式的文法,为其设计一个语法分析程序,为每条产生式配备一个语义子程序,按照一遍扫描的语法制导翻译方法,实现翻译程序。对用户输入的任意一个正确的算术表达式,程序将其转换成三.四元式输出(可按一定格式输出到指定文件中)。
6实验预习:
四元式是一种更接近目标代码的中间代码形式。由于这种形式的中间代码便于优化处理,因此,在目前许多编译程序中得到了广泛的应用。具体的形式为:(op,arg1,arg2,result) 。
例如,语句 a=b+(c-d)*e+f/g*(h-i+j/(k+l*m-n)) 的四元式表示如下:
(1) (-,c,d,t1)
(2) (*,t1,e,t2)
(3) (+,b,t2,t3)
(4) (/,f,g,t4)
(5) (+,t3,t4,t5)
(6)(-,h,i,t6)
(7)(*,l,m,t7)
(8)(+,k,t4,t7)
(9)(-,t7,n,t8)
(10)(/,j,t8,t9)
(11)(+,t6,t9,t10)
(12)(=,t10,-,a)1).检查输入的元素;
2).如果是一个操作数,则进栈;
3).如果是操作符,则
i). 如果符号栈不为空或者此操作符的优先级大于符号栈栈顶的优先级,则将此运算符压栈;
ii).如果符号栈不为空或者此操作符的优先级小于符号栈栈顶的优先级,栈顶操作符出栈并进行相应的操作;
4).假定输入完毕,栈中剩余的所有操作符出栈并进行相应操作。
7 总体设计描述
按照顺序将任意一个正确的算术表达式拆分成操作符和操作数部分并入栈,而后比较优先级按照优先级高低出栈,执行操作:将算术表达式转换成四元式输出。本程序共有两个函数,一个将算术表达式翻译成四元式的函数 int translate(string s),是本程序的主要函数;另一个是主函数,负责调用翻译函数和输入输出处理。
8运行步骤与结果
输入为一个标准的算术表达式,输出为四元式,按行区分,如输入:a=b*(c-d+f*(g+h-i/j+k))
输出为:
9 程序清单
#include string.h
#include stdio.h
char w;
int j=1;
struct TOKEN
{
char t;
int i;
} ;
struct TOKEN word, sem[10];
int i_sem;
struct QT
{
char w;
struct TOKEN word1;
struct TOKEN word2;
struct TOKEN temp;
} ;
char exp[50];
int i=0;
struct QT qt[30];
int q=0;
int D();
int E();
int T();
int F();
void next();
void newt();
void quat(char);
int main()
{
clrscr();
printf(please input your expression: );
scanf( %s,exp);
next();
D();
if (w==\0)
{
printf(\n);
for (i=0;iq;i++)
{
printf( (%d) ,i+1);
if(qt[i].w!==){
printf( ( %c,qt[i].w);
if (qt[i].word1.t!=t)
printf( , %c,qt[i].word1.t);
else
printf( , %c%d,qt[i].word1.t,qt[i].word1.i);
if (qt[i].word2.t!=t)
printf( , %c,qt[i].word2.t);
else
printf( , %c%d,qt[i].word2.t,qt[i].word2.i);
printf( , %
文档评论(0)