##四元式 ###需要四元式运算的地方
- 声明语句
- 表达式
- 语句
###四元式设计 ####声明
- 常量声明
- 四元式:int,res,op1,op2, char,res,op1,op2
- 其中res为常量名,op1为常量的值,op2为偏移量
- 含义:声明一个类型为int,char的常量
- 变量声明
- 四元式:int,name,op1,op2, char,name,op1,op2, arraydef,name,op1,op2
- 其中对于int和char类型,name为变量名,op1,op2为空;对于数组类型,op1为数组元素的类型,op2为数组所占空间大小
- 过程声明
- 四元式:procedure,res,op1,op2,其中res为过程名,op1为过程的参数个数,op2为空
- 函数声明
- 四元式:function,res,op1,op2,其中res为函数名,op1为过程的参数个数,op2为返回值类型 ####表达式
- 运算:+,-,*,/
- 赋值:
- 四元式::=, res, op1, op2
- 含义:
- 当op2为空时:res := op1
- 当op2不为空时表示对数组元素赋值::=,res,op1, op2,其中res是数组名,含义:res[op2] := op1;
- 访问数组元素:
- 四元式:array,res,op1,op2,其中op1为数组变量,op2为数组下标,含义:res := op1[op2]
- 自增自减
- 四元式:inc,op1,null,null, dec,op1,null,null
- 含义:op1增加1,op1减少1 ####语句
- 赋值语句
- 条件语句
- 当循环语句
- for循环语句
- 复合语句
- 过程调用语句(函数调用语句类似)
- 读语句
- 写语句 #####控制流语句
- cmp,op1,op2,null
- 含义:比较op1和op2并根据比较结果设置机器状态字中的条件码。
- if-then[-else]:
- ifg,L:其中L为标号,含义:如果机器状态字为大于,则跳转至标号L
- ifge,L:其中L为标号,含义:如果机器状态字为大于等于,则跳转至标号L
- ifl,L:其中L为标号,含义:如果机器状态字为小于,则跳转至标号L
- ifle,L:其中L为标号,含义:如果机器状态字为小于等于,则跳转至标号L
- ife,L:其中L为标号,含义:如果机器状态字为等于,则跳转至标号L
- ifne,L:其中L为标号,含义:如果机器状态字为不等于,则跳转至标号L
- do..while
- for #####与运行时相关语句
- 过程调用语句(函数调用类似)
- 四元式:call,retVal,name,args,其中retVal为存放返回值的变量地址(过程调用则为NULL),name为过程(函数)名,args为参数个数
- 含义:retVal = name(arg1,arg2...)
- 参数相关
- 四元式:param,res,op1,op2,其中res为参数名,op1,op2均为空
- 含义: 表明res是过程或者函数的参数,op1为空,说明res为传值参数,否则res为传引用参数
- 注:参数的进栈顺序是从右至左
- 四元式:load,res,op1,op2,其中res为引用参数,op1,op2均为空
- 含义:将res地址中的内容加载到寄存器中
- 返回语句
- 四元式:return,res,op1,op2,其中res表明当前是哪个函数或过程结束,op1,op2均为null
- 写语句
- 四元式:write,option,addr
- 含义:
- option为0时表示输出字符串,addr为要输出的字符串所在的地址
- option为1时表示输出字符,addr为要输出的字符所在的地址
- option为2时表示输出整型数,addr为要输出的值所在的地址
- 读语句
- 四元式:read,addr
- 含义:将读入数据存到addr中 ###其余
- 赋值语句
- 复合语句