Skip to content

Latest commit

 

History

History
80 lines (75 loc) · 3.38 KB

四元式.md

File metadata and controls

80 lines (75 loc) · 3.38 KB

##四元式 ###需要四元式运算的地方

  • 声明语句
  • 表达式
  • 语句

###四元式设计 ####声明

  • 常量声明
  • 四元式: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中 ###其余
  • 赋值语句
  • 复合语句