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,>
- if分支 if<boolexpr,Nohaveboolexpr,>
- else分支 else<,,>
- else if 分支 if<boolexpr,Nohaveboolexpr,>
- 类型转换 TypeConvert<typ,value,>
- 一字段结构体 struct1field<field,,name>
- 二字段结构体 struct2field<field1,field2,name>
- 结构体声明 structdecl<,,name>
- 字段 field<field1,,>
- 2个字段 field<field1,field2,>
- 3个字段 field<field1,field2,field3>
- 赋值 assign<,,>
- 选择器左值和右值 left select right<left,right,>
- 选择器右值 select right<right,>
- 分配一个类型的内存 malloc<type,,linefeed>
Index ¶
- Variables
- func NodeToIr(f *File, n []ast.Node)
- func OneNodeToIr(f *File, n ast.Node, LineNum int, linefeed bool)
- type File
- type Ir2
- type IrNode
- func (n *IrNode) Arg1ObjExpr() **ast.Expr
- func (n *IrNode) Arg1ObjTyp() **astdata.Typ
- func (n *IrNode) Arg2ObjTyp() **astdata.Typ
- func (n *IrNode) Func() **ast.Node
- func (n *IrNode) FuncName() **ast.FuncNameNode
- func (n *IrNode) ResultObjTyp() **astdata.Typ
- func (n IrNode) String() string
- func (n *IrNode) Type() **astdata.Typ
- func (n *IrNode) Var() **ast.VarNode
- type OPEnum
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(局部变量)", RPARENOp: "rparen(右小括号)", IfOp: "if", RemainOp: "remain(取余数)", ElseOp: "else", ElseIfOp: "else if", TypeConvertOp: "type convert(类型转换)", Struct1Field: "struct 1 field(1字段结构体)", Struct2Field: "struct 2 field(2字段结构体)", StructDeclStart: "struct decl start(结构体开始)", StructDeclEnd: "struct decl end(结构体结束)", Field: "field(字段)", Field3: "field3(3个字段)", AssignOp: "assign (=)", LeftSelectRight: "left select right(选择器左值和右值)", SelectRight: "select right(选择器右值)", Malloc: "malloc(分配一个类型的内存)", }
Functions ¶
Types ¶
type File ¶
type File struct { //全局声明 GlobalDecl []ast.Node //指令 Ir []IrNode //变量初始化 VarInit []IrNode //包名 PackageName string // 文件名 FileName string //是否有自定义init函数 HaveInitFunc bool //是否在函数内 InFunc bool Sbt *ast.Sbt FuncInfo *ast.FuncInfo //错误处理上下文 Errctx *errcode.ErrCtx // contains filtered or unexported fields }
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
type OPEnum ¶
type OPEnum int
OPEnum 指令枚举
const ( NoOp OPEnum = iota //零值表示未定义的指令 ADDOP SUBOP MOVOP VarOP ConstOP MULOP DIVOP FuncOP CallOP ObjOP RbraceOP TmpVarOP RetOp PaPaOp //Passing Parameters EndCallOp ForOp SemicolonOp LessOp GreaterOp EqualOp NoEqualOp CommaOp LbraceOp LineFeedOp LocalVarOp RPARENOp IfOp RemainOp ElseOp ElseIfOp TypeConvertOp Struct1Field Struct2Field StructDeclStart StructDeclEnd Field Field3 AssignOp LeftSelectRight SelectRight Malloc )
Click to show internal directories.
Click to hide internal directories.