ir2

package
v0.0.0-...-0e42c13 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 6, 2023 License: BSD-3-Clause Imports: 12 Imported by: 0

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

func NodeToIr

func NodeToIr(f *File, n []ast.Node)

func OneNodeToIr

func OneNodeToIr(f *File, n ast.Node, LineNum int, linefeed bool)

OneNodeToIr 将一个抽象语法树节点转换为ir

Types

type File

type File struct {
	//全局声明
	GlobalDecl []ast.Node
	//指令
	Ir []IrNode
	//变量初始化
	VarInit []IrNode

	//包名
	PackageName string
	// 文件名
	FileName string
	//是否有自定义init函数
	HaveInitFunc bool
	Sbt          *ast.Sbt
	FuncInfo     *ast.FuncInfo
	// contains filtered or unexported fields
}

func NewFile

func NewFile(t *ast.Tree) *File

func (*File) String

func (f *File) String() string

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 NewIr

func NewIr(Op OPEnum, LineNum int) IrNode

func (*IrNode) Func

func (n *IrNode) Func() **ast.Node

func (*IrNode) FuncName

func (n *IrNode) FuncName() **ast.FuncNameNode

func (IrNode) String

func (n IrNode) String() string

func (*IrNode) Type

func (n *IrNode) Type() **astdata.Typ

func (*IrNode) Var

func (n *IrNode) Var() **ast.VarNode

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
	ForEndOp
)

func (OPEnum) String

func (o OPEnum) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL