1.中间代码:即中间语言,独立于机器的,复杂性介于源 语言和机器语言之间的一种表示形式。
采用中间语言的好处:
(1)便于进行与机器无关的代码优化工作;
(2)使编译程序改变目标机更容易;
(3)使编译程序的结构在逻辑上更为简单明确。
2.后缀式:

(1)如果E是一个变量或常量,则E的后缀式就是E本身;

(2)如果E是形如E1 op E2的表达式,其中op是任意的二元运算符,那么,E的后缀式为E1’ E2’ op,其中E1’和 E2’分别是E1和E2的后缀式;

(3)如果E是(E1)形式的表达式,那么,E1的后缀式就是E的后缀式。

(1.后缀式的特点

(1)只要知道每个算符的目数,计算参与运算数的个数,对后缀式从左到右进行扫描,就能对它进行唯一的分解。

例如 ab-c*/ 所代表的中缀表达式是 a/(-b*c)

ab+cd+* 所代表的中缀表达式是 (a+b) *(c+d)

(2.后缀式特别适合利用栈的结构进行计算
后缀型式的扩展到其他的语言结构:

(1)无条件转移语句goto L的后缀表达形式为L GOTO,其中GOTO看作是为单目运算符。

(2)对于赋值表达式V=E,如果把赋值号看作是二目算符,那么,它的后缀形式为V’E’= 。

(3)对于条件语句if E then S1 else S2,设E’、S1’和S2’分别是E、S1和S2’的后缀形式,L1对应语句S1’的起点,L2对应语句S2’的起点,那么,上述条件语句的后缀形式可以表示为 E’ L1 GOTO S1’ L2 GOTO S2’。

例如,条件语句if (a < b) then max = b else max = a的后缀形式为 ab < 10 GOTO max b= 20 GOTO max a= 其中10表示条件为真时转移到的标号,10表示条件为假时无条件转移到的标号处。

(4)复合语句S1;S2的后缀形式可以简单的表示成S1’S2’,其中S1’和S2’分别时语句S1和S2的后缀形式。但是,如果像C、Java、Pascal等语言允许在程序块中增加声明语句,那么,就应改对程序块的标志“{}”或begin和end分别引进相应的标志.

如BLOCKBEGIN和BLOCKEND。这样,程序块{ S1;S2}的后缀式为 BLOCKBEGIN S1’S2’ BLOCKEND

(5)循环语句while E do S的可以写成下列语句: L1: if not E then goto L2 else {S; goto L1} L2: 参照条件语句和复合语句,可以把while循环语句的后缀式表示成 E’ L2 GOTO S’ L1 GOTO
--------------------------------------------------------------------------------------------------