当前位置:首页 » 编程软件 » 编译原理四元式系统特色

编译原理四元式系统特色

发布时间: 2025-01-14 03:08:54

‘壹’ 编译原理中的拉链和回填到底什么意思

回填技术是指控制语句中布尔表达式翻译成四元式序列时,有的转移地址不能在产生这些四元式的同时得知,需要在适当的时候回填这个地址。 拉链技术是指为了记录需要回填地址的四元式,把需要回填E•ture的四元式拉成一条链,称为“真链”;把需...

‘贰’ 编译原理 四元式

四元式是一种比较普遍采用的中间代码形式。

代码段的四元式表达式:

101 T:=0 (表达式为假的出口)

103 T:=1 (表达式为真的出口)

因为用户的表达式只有一个A<B,因此A<B的真假出口就是表达式的真假出口,所以

100: if a<b goto 103 (a<b为真,跳到真出口103)

101: T:=0(否则,进入假出口)

102: goto 104 (要跳过真出口,否则T的值不就又进入真出口了,为真)

103: T:=1

104:(程序继续执行)

(2)编译原理四元式系统特色扩展阅读:

四元式是一种更接近目标代码的中间代码形式。由于这种形式的中间代码便于优化处理,因此,在目前许多编译程序中得到了广泛的应用。

四元式实际上是一种“三地址语句”的等价表示。它的一般形式为:

(op,arg1,arg2,result)

其中, op为一个二元 (也可是一元或零元)运算符;arg1,arg2分别为它的两个运算 (或操作)对象,它们可以是变量、常数或系统定义的临时变量名;运算的结果将放入result中。四元式还可写为类似于PASCAL语言赋值语句的形式:

result ∶= arg1 op arg2

需要指出的是,每个四元式只能有一个运算符,所以,一个复杂的表达式须由多个四元式构成的序列来表示。例如,表达式A+B*C可写为序列

T1∶=B*C

T2∶=A+T1

其中,T1,T2是编译系统所产生的临时变量名。当op为一元、零元运算符 (如无条件转移)时,arg2甚至arg1应缺省,即result∶=op arg1或 op result ;对应的一般形式为:

(op,arg1,,result)

(op,,,result)

‘叁’ 编译原理写出语句 if(a<b)then x:=y z;else x:=y-z ;的四元式表示

(100) if a<b goto (102)

(101) goto (105)

(102) t:=y+z //若不是+,需要进行相应修改

(103) x:=t

(104) goto (107)

(105) t:=y-z

(106) x:=t

(107)…
注: 原题if(a<b)then x:=y z,y和z之间的运算符没给出,四元式中写成了+,若是其他运算符进行相应修改即可

‘肆’ 什么是目标代码

目标代码是指源代码经过编译程序产生的能被CPU直接识别的二进制代码。
目标代码的形式
目标代码生成是以中间代码作为输入,将其转换成特定机器的机器语言或汇编语言作为输出。在此以四元式序列作为它的加工对象,输出目标代码的形式有三种:具有绝对地址的机器语言程序,具有相对地址的机器码程序和汇编指令程序。

具有绝对地址的机器语言程序在存储空间中有固定的存储位置,一旦产生此种形式的目标代码之后,便可立即执行,因此这种形式最为迅速有效,但它并不灵活,不适合大型程序。
具有相对地址的机器语言程序由若干个目标模块组成,各个模块中都包含目标程序中的一部分代码,可将它们装人到存储空间的任何位置,然后由连接装配程序将它们连接在一起之后执行。显然,连接装配程序增加了开销,但这种形式有较大的灵活性,所以为许多编译程序所采用。
目标代码生成程序可以产生汇编语言形式的目标代码,这种形式在实现上要比前两种形式容易。当然,这种形式的目标代码还需经汇编后才能成为可执行代码。

目标代码的生成
目标代码生成是编译程序的最后一个工作阶段,其任务是把经优化处理之后的中间代码变换成特定机器上的机器语言程序或汇编语言程序,实现最终的翻译工作。由于目标语言依赖于硬件系统,因而如何充分利用现有的寄存器以节省访问内存的时间,合理地选择执行速度快的指令,生成尽可能短且有效的目标代码是这个阶段考虑的主要问题。

如果代码生成程序以四元式形式的中间代码序列作为输入,在其生成目标代码时,可假定每个四元式中的运算符及运算对象的数据类型均已知道,所需的全部类型转换操作均已在中间代码中得到体现。此外,如果出现在程序中的全部符号名运行时所需的存储空间均已得到分配,它们所在的数据区编号及相对地址已分别填人符号表各相应登记项栏中。所以在四元式中,仅出现符号名在符号表中登记项的序号。
参考文献
龙马工作室编着.第8章 CSS+Div常见用法 Dreamweaver CS5从新手到高手.人民邮电出版社,2011.02.
张晶主编.第11章 目标代码生成 编译原理.哈尔滨工程大学出版社,2011.08.
王丽芳,张静,李富萍等编着.第三章 程序设计语言和方法 计算机科学导论.清华大学出版社,2012.01.

‘伍’ 编译原理四元式

四元式的一般形式为(op, arg1, arg2, result),其中:op为一个二元(也可以是零元或一元)运算符。arg1和arg2为两个运算对象,可以是变量、常数或者系统定义的临时变量名。result为运算结果。
第一步:T1=a*b,
第二步:T2=c*d,
第三步:T3=T2/e,
第四步:T4=T1-T3,
第五步:f=T4.

‘陆’ 编译原理问题,求解答

好,我来帮你理解一下,先看基本知识:
四元式是一种比较普遍采用的中间代码形式。四元式的四个组成成分是:算符op,第一和第二运算对象ARG1和ARG@及运算结果RESULT。运算对象和运算结果有时指用户自己定义的变量,有时指编译程序引进的临时变量。例如a∶=b*c+b*d的四元式表示如下:
(1)(*,b,c,t1)
(2)(*,b,d,t2)
(3)(+, t1, t2, t3)
(4)(∶=,t3, -, a)
四元式和三元式的主要不同在于,四元式对中间结果的引用必须通过给定的名字,而三元式是通过产生中间结果的三元式编号。也就是说,四元式之间的联系是通过临时变量实现的。
有时,为了更直观,也把四元式的形式写成简单赋值形式或更易理解的形式。比如把上述四元式序列写成:
(1)t1∶=b*c
(2)t2∶=b*d
(3)t3∶=t1+t2
(4)a∶=t3
把(jump,-,-,L)写成goto L
把(jrop,B,C,L)写成if B rop C goto L
好,下面分析一下a<b
这是一个表达式,它的结果要么是0,要么是1,因为没有指定这个表达式存放在哪,所以需要一个临时变量来存放它的,在你的问题中,就是T。很显然T有2个值:0或者1
因此,有
101 T:=0 (这个是表达式为假的出口)
103 T:=1 (这个是表达式为真的出口)
因为你的表达式只有一个A<B,因此A<B的真假出口就是表达式的真假出口,所以
100: if a<b goto 103 (a<b为真,跳到真出口103)
101: T:=0(否则,进入假出口)
102: goto 104 (当然要跳过真出口罗,否则T的值不就又进入真出口了,变成真了)
103: T:=1
104:(程序继续执行)

热点内容
行车记录仪安卓版如何使用 发布:2025-03-09 20:58:03 浏览:311
sql登陆不了 发布:2025-03-09 20:45:16 浏览:923
如何用本机做服务器 发布:2025-03-09 20:43:54 浏览:43
新时达服务器如何查故障 发布:2025-03-09 20:31:14 浏览:948
sql2005server 发布:2025-03-09 20:31:08 浏览:112
过滤sql注入 发布:2025-03-09 20:23:25 浏览:991
华为荣耀6大容量存储 发布:2025-03-09 20:22:34 浏览:456
php流图片 发布:2025-03-09 20:22:27 浏览:43
农行密码多少位 发布:2025-03-09 20:21:55 浏览:147
林肯冒险家两驱车型配置怎么选 发布:2025-03-09 20:18:34 浏览:23