正在加载图片...
版权所有南京大学计算机科学与技术系许畅等2022春季版 表1.中间代码的形式及操作规范。 语法 描述 LABEL x: 定义标号x。 FUNCTION f: 定义函数f。 x:=y 赋值操作。 x :=y+z 加法操作。 x:=y-z 减法操作。 x:=y*z 乘法操作。 x:=y/z 除法操作。 x :=&y 取y的地址赋给x。 x:=y 取以y值为地址的内存单元的内容赋给x。 *x:=y 取y值赋给以x值为地址的内存单元。 GOTOx 无条件跳转至标号x。 IF x [relop]y GOTOz 如果x与y满足[relop]关系则跳转至标号z。 RETURN x 退出当前函数并返回x值。 DECx [size] 内存空间申请,大小为4的倍数。 ARGx 传实参x。 x:=CALLf 调用函数,并将其返回值赋给x。 PARAMx 函数参数声明。 READx 从控制台读取x的值。 WRITE x 向控制台打印x的值。 时变量t1,可以写成t1=#5。 4)算术运算操作包括加、减、乘、除四种操作(注意运算符前后都应由空格或制表符隔 开)。赋值号左边的x一定是一个变量或者临时变量,而赋值号右边的y和z既可以是变量或临 时变量,也可以是立即数。如果是立即数,则需要在其前面添加“#”符号。例如,如果要将 变量a与常数5相加并将运算结果赋给b,则可以写成b=a+#5。 5)赋值号右边的变量可以添加“&”符号对其进行取地址操作。例如,b=&+#8代表 将变量a的地址加上8然后赋给b。 6)当赋值语句右边的变量y添加了“*”符号时代表读取以y的值作为地址的那个内存单元 的内容,而当赋值语句左边的变量x添加了“*”符号时则代表向以x的值作为地址的那个内存 单元写入内容。 7)跳转语句分为无条件跳转和有条件跳转两种。无条件跳转语句GOTO x会直接将控制转 移到标号为X的那一行,而有条件跳转语句(注意语句中变量、关系操作符前后都应该被空格 或制表符分开)则会先确定两个操作数x和y之间的关系(相等、不等、小于、大于、小于等 70版权所有 南京大学计算机科学与技术系 许畅等 2022春季版 70 时变量t1,可以写成t1 := #5。 4) 算术运算操作包括加、减、乘、除四种操作(注意运算符前后都应由空格或制表符隔 开)。赋值号左边的x一定是一个变量或者临时变量,而赋值号右边的y和z既可以是变量或临 时变量,也可以是立即数。如果是立即数,则需要在其前面添加“#”符号。例如,如果要将 变量a与常数5相加并将运算结果赋给b,则可以写成b := a + #5。 5) 赋值号右边的变量可以添加“&”符号对其进行取地址操作。例如,b := &a + #8代表 将变量a的地址加上8然后赋给b。 6) 当赋值语句右边的变量y添加了“*”符号时代表读取以y的值作为地址的那个内存单元 的内容,而当赋值语句左边的变量x添加了“*”符号时则代表向以x的值作为地址的那个内存 单元写入内容。 7) 跳转语句分为无条件跳转和有条件跳转两种。无条件跳转语句GOTO x会直接将控制转 移到标号为x的那一行,而有条件跳转语句(注意语句中变量、关系操作符前后都应该被空格 或制表符分开)则会先确定两个操作数x和y之间的关系(相等、不等、小于、大于、小于等 表1. 中间代码的形式及操作规范。 语法 描述 LABEL x : 定义标号x。 FUNCTION f : 定义函数f。 x := y 赋值操作。 x := y + z 加法操作。 x := y - z 减法操作。 x := y * z 乘法操作。 x := y / z 除法操作。 x := &y 取y的地址赋给x。 x := *y 取以y值为地址的内存单元的内容赋给x。 *x := y 取y值赋给以x值为地址的内存单元。 GOTO x 无条件跳转至标号x。 IF x [relop] y GOTO z 如果x与y满足[relop]关系则跳转至标号z。 RETURN x 退出当前函数并返回x值。 DEC x [size] 内存空间申请,大小为4的倍数。 ARG x 传实参x。 x := CALL f 调用函数,并将其返回值赋给x。 PARAM x 函数参数声明。 READ x 从控制台读取x的值。 WRITE x 向控制台打印x的值
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有