三地址代码是编译原理语法分析后的中间语言的一种,这是我刚完成的三地址代码生成器,符合的语法规则及其语义规则如下(S→ifCthenS1elseS2,这条规则没有加,其余都已完成,也许还有bug,欢迎大家给予指正):产生式 语义规则S→id=E S.code=E.code||gen(id.place’:=’E.place)S→ifCthenS1 C.true=newlabel;C.false=S.next;S1.next=S.next;S.code=C.code||gen(E.true’:’)||S1.codeS→ifCthenS1elseS2 C.true=newlabel;C.false=newlabel;S1.next=S2.next=S.next;S.code=C.code||gen(E.true’:’)||S1.code||gen(‘goto’,S.next)||gen(E.false’:’)||S2.codeS→whileCdoS1 S.begin=newlabel;C.true=newlabel;C.false=S.next;S1.next=S.begin;S.code=gen(S.begin’:’)||C.code||gen(E.true’:’)||S1.code||gen(‘goto’S.begin);C→E1>E2 C.code=E1.code||E2.code||gen(‘if’E1.place’>’E2.place’goto’C.true)||gen(‘goto’C.false)C→E1<E2 C.code=E1.code||E2.code||gen(‘if’E1.place’<’E2.place’goto’C.true)||gen(‘goto’C.false)C→E1=E2 C.code=E1.code||E2.code||gen(‘if’E1.place’=’E2.place’goto’C.true)||gen(‘goto’C.false)E→E1+T E.place=newtemp;E.code=E1.code||T.code||gen(E.place’:=’E1.place’+’T.place)E→E1-T E.place=newtemp;E.code=E1.code||T.code||gen(E.place’:=’E1.place’-’T.place)E→T E.place=T.place;E.code=T.codeT→F T.place=F.place;T.code=F.codeT→T1*F T.place=newtemp;T.code=T1.code||F.code||gen(T.place’:=’T1.place’*’F.place)T→T1/F T.place=newtemp;T.code=T1.code||F.code||gen(T.place’:=’T1.place’/’F.place)F→(E) F.place=E
2023/10/15 21:58:03 3KB 三地址 编译原理 语法分析器
1
1.经过以下栈运算后,x的值是()。
InitStack(s);Push(s,'a');Push(s,'b');Pop(s,x);Gettop(s,x);A.aB.bC.1D.02.循环队列存储在数组A[0..m]中,则入队时的操作为()。
A.rear=rear+1B.rear=(rear+1)mod(m-1)C.rear=(rear+1)modmD.rear=(rear+1)mod(m+1)3.栈和队列的共同点是()。
A.都是先进先出B.都是先进后出C.只允许在端点处插入和删除元素D.没有共同点4.若用一个大小为6的数组来实现循环队列,且当rear和front的值分别为0和3。
当从队列中删除一个元素,再插入两个元素后,rear和front的值分别为:()。
A.1和5B.2和4C.4和2D.5和15.程序填顺序循环队列的类型定义如下:typedefintET;typedefstruct{ET*base;intFront;intRear;intSize;}Queue;QueueQ;队列Q是否“满”的条件判断为(C)。
A.(Q.Front+1)=Q.RearB.Q.Front=(Q.Rear+1)C.Q.Front=(Q.Rear+1)%Q.sizeD.(Q.Front+1)%Q.Size=(Q.Rear+1)%Q.size6.若进栈序列为1,2,3,4,进栈过程中可以出栈,则()不可能是一个出栈序列。
A.3,4,2,1B.2,4,3,1C.1,4,2,3D.3,2,1,47.向顺序存储的循环队列Q中插入新元素的过程分为三步:()。
A.进行队列是否空的判断,存入新元素,移动队尾指针B.进行队列是否满的判断,移动队尾指针,存入新元素C.进行队列是否空的判断,移动队尾指针,存入新元素D.进行队列是否满的判断,存入新元素,移动队尾指针8.关于栈和队列,()说法不妥。
A.栈是后进先出表B.队列是先进先出表C.递归函数在执行时用到栈D.队列非常适用于表达式求值的算符优先法9.若用数组S[0..m]作为两个栈S1和S2的共同存储结构,对任何一个栈,只有当S全满时才不能作入栈操作。
为这两个栈分配空间的最佳方案是()。
A.S1的栈底位置为0,S2的栈底位置为mB.S1的栈底位置为0,S2的栈底位置为m/2C.S1的栈底位置为1,S2的栈底位置为mD.S1的栈底位置为1,S2的栈底位置为m/2二、程序填空题(没特别标注分数的空的为3分,共23分)。
1.下面的算法是将一个整数e压入堆栈S,请在空格处填上适当的语句实现该操作。
typedefstruct{int*base;int*top;intstacksize;}SqStack;intPush(SqStackS,inte){if(S.top-S.base>=S.stacksize){S.base=(int*)realloc(S.base,(S.stacksize+1)*sizeof(int));if(!S.base){printf(“NotEnoughMemory!\n”);return(0);
2023/9/21 10:03:21 18KB C语言 数据结构 第三章 作业
1
表达式计算说明 很久就想编一个这样的计算器,只可惜一直没什么思路,最近突然灵感来了,所以就写下这个程序。
现在还在测试阶段,所以功能不是很完善。
程序功能:基本的表达式运算,可以自定义函数跟常量,分别保存在“常数.txt”和“函数.txt”,方便自己添加。
双击相应的函数名或常数名就可以将函数或常量添加到表达式中。
计算过程只能当表达式只有一行时有效。
实例1:计算sqr(19+tan(98)*tan(91)-sin(122)*(5*5-(19-11)))/2 计算过程sqr(19+tan(98)*tan(91)-sin(122)*(5*5-(19-11)))/2 =sqr(19+-7.11536972238419*tan(91)-sin(122)*(5*5-(19-11)))/2 =sqr(19+-7.11536972238419*-57.2899616307588-sin(122)*(5*5-(19-11)))/2 =sqr(19+-7.11536972238419*-57.2899616307588-.848048096156426*(5*5-(19-11)))/2 =sqr(19+-7.11536972238419*-57.2899616307588-.848048096156426*(5*5-8))/2 =sqr(19+-7.11536972238419*-57.2899616307588-.848048096156426*17)/2 =20.3032618253667/2 =10.1516309126834实例2:计算 a=34 b=55 c=a+1 圆的面积(c) a*b c=a+b 圆的面积(c) 以下是计算结果: 圆的面积(c)=3848.4510006475 a*b=1870 圆的面积(c)=24884.5554090847 内置函数: !(x) -x的阶乘 lg(x),log(x) 以10为底的对数 ln(x) 以e为底x的对数 pow(x,y) x的y方次幂 prime(x) 判定x是否是素数,如果是直接将s2返回,否则将其各因子用连乘返回 sqr(x),sqrt(x) -x的二次方根 arcsin(x) -x的反正弦 arccos(x) -x的反余弦 arcsec(x) -x的反正割 arccsc(x) -x的反余割 atn(x),arctg(x) -x的反正切 arcctg(x) -x的反余切 sin(x) -x的正弦 cos(x) -x的余弦 sec(x) -x的正割 csc(x) -x的余割 tg(x),tan(x) -x的正切 ctg(x) -x的余切 harcsin(x) -x的反双曲正弦 harccos(x) -x的反双曲余弦 harcsec(x) -x的反双曲正割 harccsc(x) -x的反双曲余割 harctg(x),harctan(x) -x的反双曲正切 harcctg(x) -x的反双曲余切 hsin(x) -x的双曲正弦 hcos(x) -x的双曲余弦 hsec(x) -x的双曲正割 hcsc(x) -x的双曲余割 htg(x),htan(x) -x的双曲正切 hctg(x) -x的双曲余切有什么意见或建议可以跟我联系Email: ldm.menglv@gmail.com
2023/9/19 9:57:10 29KB 表达式 计算 vb
1
基于DVB-S2的CCSDS协议总结定义,实现和性能总结,自己翻译的,帮助需要学习DVB-S2的朋友理解
2023/9/17 2:46:40 487KB DVB-S CCSD
1
深圳宏电H7210(S3版本)短信配置DTU参数指令格式参考说明书.pdf深圳宏电H7210-s2短信配置DTU参数指令格式参考说明书.pdf深圳宏电H7210调试信息分析及系统日志分析.pdf深圳宏电H7210短信配置DTU参数指令格式参考说明书.doc
2023/9/14 5:07:01 547KB H7210 DTU配置
1
主要在用TIMESAT的时候,只接受img与dat格式的数据,所以需要转格式。
这个代码实现了tif转img,其中s2要锁定转换文件的名称,最后uint8是你原始数据的格式
2023/8/17 16:32:38 459B matlab tif转img
1
北大青鸟S2的毕业项目,宠物医院项目1.5,完整的java源码已经数据库和文档
2023/8/17 1:14:54 1.79MB java毕业设计
1
前台功能系统:提供客户访问和使用本网站服务的功能内含以下八个功能模块:新闻动态留言簿购物车分类商品信息展示商品详细页面用户登录用户注册首页管理后台功能系统:提供网站管理者维护和定义网站服务的功能内含以下五个功能模块:用户信息管理订单管理新闻管理留言簿管理商品信息管理
2023/8/14 7:12:56 5.58MB web项目 java
1
自己写的代码,本人已完成了S2的答辩,把项目拿出来和网友们分享我的经验,有不懂的地方可以私聊我
2023/7/25 9:41:44 21.61MB 易买网
1
包含S1,S2,Y2java,.net,数据库,前端技术,以及移动开发等等所有课件,并附带项目源码,本课件仅提供大家学习使用,请勿作商业用途
2023/6/5 4:41:30 3.17MB C# JAVA 数据库
1
共 63 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡