Documentation ¶
Overview ¶
Package ir2实现了一种中间代码
ir实现的中间代码,是四元式、线性的中间代码
OPEnum 是中间代码的指令枚举
IrNode 给定了一条ir指令的结构体定义
# 指令 格式 op<arg1,arg2,result> []表示可选
- 变量声明 var<,,ast>
- 常量声明 const<,,ast>
- 赋值声明 mov<src,IncludeSrc,dest>
- 调用 call<callname,funcname,ParameNum and linefeed>
- 传参 papa<num,tmp,isNoEnd>
- 调用结束 stopcall<,,linefeed>
- 对象 obj<,,value>
- 函数 func<,,info>
- 右大括号 rbrace<,,>
- 加减乘除小于大于等于不等 op<src1,src2,IncludeOpValue and linefeed> (Include operation values缩写成IncludeOpValue)
- 临时变量 tmpvar<name,type,>
- 返回 ret<[value],ReturnValueAfter,endIndex>
- for循环 for<,,>
- 分号 ;<,,>
- 逗号 comma<,,>
- 空行 linefeed<,,>
- 局部变量 localVar<Name,Type,>
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var OPEnumStr = [...]string{ NoOp: "no_op (未定义的指令)", ADDOP: "add (加法运算)", SUBOP: "sub (减法运算)", MOVOP: "mov (移动操作)", VarOP: "var(变量声明)", ConstOP: "const(常量声明)", MULOP: "mul(乘法运算)", DIVOP: "dlv 除法运算", FuncOP: "func (函数声明)", CallOP: "call(调用)", ObjOP: "obj(对象)", RbraceOP: "右大括号 ", TmpVarOP: "tmp(临时变量)", RetOp: "ret(返回)", PaPaOp: "papa(传递参数)", EndCallOp: "结束调用 ", ForOp: "for ", SemicolonOp: "分号", LessOp: "less(小于)", GreaterOp: "greater(大于)", EqualOp: "equal(等于)", NoEqualOp: "noequal(不等与)", CommaOp: "comma(逗号)", LbraceOp: "左大括号", LineFeedOp: "linefeed(空行)", LocalVarOp: "loacl var(局部变量)", ForEndOp: "for end(for结束)", }
Functions ¶
Types ¶
type File ¶
type Ir2 ¶
type Ir2 interface { String() string // contains filtered or unexported methods }
Ir2 表示一个可以包含ir2定义的ir指令的类型
type IrNode ¶
type IrNode struct { Op OPEnum //操作码 Arg1Obj string //第一操作数 Arg2Obj string //第二操作数 ResultObj string //运算结果的值 Arg1Typ, Arg2Typ, ResultTyp string LineNum int //行号 }
IrNode 代表一条ir指令
func (*IrNode) FuncName ¶
func (n *IrNode) FuncName() **ast.FuncNameNode
Click to show internal directories.
Click to hide internal directories.