算术表达式到四元式翻译的编译程序设计.docVIP

算术表达式到四元式翻译的编译程序设计.doc

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

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档