ast2

package
v0.0.0-...-df767d8 Latest Latest
Warning

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

Go to latest
Published: Oct 27, 2025 License: BSD-3-Clause Imports: 13 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Builtin_func_info = map[string]Node{
	enum.Printf:        NewFuncNode(&FuncInfo{Name: enum.Printf, Parame: []astdata.Parame{astdata.NewNameAndType("format", NewObject(TypeObj, enum.String))}}),
	enum.Float:         NewFuncNode(&FuncInfo{Name: enum.Float, RetValue: []astdata.RetValue{astdata.NewNameAndType("", NewObject(TypeObj, enum.Float))}}),
	enum.Int:           NewFuncNode(&FuncInfo{Name: enum.Int, RetValue: []astdata.RetValue{astdata.NewNameAndType("", NewObject(TypeObj, enum.Int))}}),
	enum.Malloc:        NewFuncNode(&FuncInfo{Name: enum.Malloc, Parame: []astdata.Parame{astdata.NewNameAndType("type", NewObject(TypeObj, "T"))}, RetValue: []astdata.RetValue{astdata.NewNameAndType("ptr", NewObject(TypeObj, "&T"))}}),
	enum.Free:          NewFuncNode(&FuncInfo{Name: enum.Free, Parame: []astdata.Parame{astdata.NewNameAndType("ptr", NewObject(TypeObj, "&T"))}}),
	enum.UnsafeAdd:     NewFuncNode(&FuncInfo{Name: enum.UnsafeAdd, Parame: []astdata.Parame{astdata.NewNameAndType("ptr", NewObject(TypeObj, "&T")), astdata.NewNameAndType("offset", NewObject(TypeObj, enum.Int))}, RetValue: []astdata.RetValue{astdata.NewNameAndType("ptr", NewObject(TypeObj, "&T"))}}),
	enum.UnsafeConvert: NewFuncNode(&FuncInfo{Name: enum.UnsafeConvert, Parame: []astdata.Parame{astdata.NewNameAndType("ptr", NewObject(TypeObj, enum.UnsafePointer)), astdata.NewNameAndType("type", NewObject(TypeObj, "T"))}, RetValue: []astdata.RetValue{astdata.NewNameAndType("ptr", NewObject(TypeObj, "&T"))}}),
	enum.UnsafeSizeof:  NewFuncNode(&FuncInfo{Name: enum.UnsafeSizeof, Parame: []astdata.Parame{astdata.NewNameAndType("type", NewObject(TypeObj, "T"))}, RetValue: []astdata.RetValue{astdata.NewNameAndType("size", NewObject(TypeObj, enum.Int))}}),
	enum.MallocSize:    NewFuncNode(&FuncInfo{Name: enum.MallocSize, Parame: []astdata.Parame{astdata.NewNameAndType("size", NewObject(TypeObj, enum.Int))}, RetValue: []astdata.RetValue{astdata.NewNameAndType("ptr", NewObject(TypeObj, enum.UnsafePointer))}}),
	enum.MemPoolFree:   NewFuncNode(nil),
	enum.MemPoolNew:    NewFuncNode(nil),
	enum.UnsafePointer: NewFuncNode(nil),
}

预定义的函数或视为函数调用的类型转换

View Source
var NdSotfOn = false

有测试依赖函数体外的非声明语句,设置为true可以恢复之前的行为 缩写 Non declarative statements outside of a function 缩写成NdSotf

View Source
var (
	ObjKindSrtMap = [...]string{
		NoKind:    "nokind (未定义的枚举)",
		INTOBJ:    "intobj (整数)",
		FLOATOBJ:  "floatobj (浮点数)",
		BoolObj:   "boolobj (布尔值)",
		StringObj: "stringobj(字符串)",
		SymbolObj: "SymbolObj (符号)",
		LeaObj:    "leaObj (取地址)",
		DerefObj:  "derefObj (解引用)",
		StructPtr: "StructPtr (结构体指针)",
		NilObj:    "NilObj (指针的零值)",
		EnumObj:   "EnumObj (枚举值)",
		TypeObj:   "TypeObj(类型)",
	}
)
View Source
var (
	TypeEnumStrMap = map[string]*Object{
		"int":              NewObject(TypeObj, "int"),
		"string":           NewObject(TypeObj, "string"),
		"bool":             NewObject(TypeObj, "bool"),
		"float":            NewObject(TypeObj, "float"),
		enum.UnsafePointer: NewObject(TypeObj, enum.UnsafePointer),
		"any":              NewObject(TypeObj, "any"),
	}
)

Functions

This section is empty.

Types

type ASSIGNNode

type ASSIGNNode = AssignmentNode

func NewASSIGNNode

func NewASSIGNNode(Dest Expr, Src Expr, LineNum int) *ASSIGNNode

NewASSIGNNode 创建赋值节点

func (*ASSIGNNode) C

func (a *ASSIGNNode) C(buf *strings.Builder)

func (*ASSIGNNode) SetNosemicolon

func (a *ASSIGNNode) SetNosemicolon(nosemicolon bool)

func (*ASSIGNNode) String

func (a *ASSIGNNode) String() string

type Array

type Array struct {
	Len  Expr
	TYPE astdata.Typ

	UStr string

	LineNum int
	// contains filtered or unexported fields
}

Array 数组类型

func (*Array) Copy

func (c *Array) Copy() astdata.Typ

func (*Array) SetLea

func (c *Array) SetLea(i int)

func (*Array) SetTyp

func (c *Array) SetTyp()

func (*Array) String

func (c *Array) String() string

func (*Array) Typ

func (a *Array) Typ() string

type AssignmentNode

type AssignmentNode struct {
	//目的操作数,源操作数
	Dest Expr
	Src  Expr
	// contains filtered or unexported fields
}

赋值节点

type AutoFreeNode

type AutoFreeNode struct {
	Expr     Expr
	FileName string
	// contains filtered or unexported fields
}

自动释放块节点

func NewAutoFreeNode

func NewAutoFreeNode(FileName string, LineNum int) *AutoFreeNode

func (*AutoFreeNode) C

func (a *AutoFreeNode) C(buf *strings.Builder)

func (*AutoFreeNode) String

func (a *AutoFreeNode) String() string

type BreakStmt

type BreakStmt struct{}

break语句

func NewBreakStmt

func NewBreakStmt() BreakStmt

func (BreakStmt) C

func (b BreakStmt) C(buf *strings.Builder)

func (BreakStmt) String

func (b BreakStmt) String() string

type CDecl

type CDecl interface {
	Node
	CDecl(buf *strings.Builder)
}

CDecl 表示一个支持生成C头文件的一个声明语句的类型

type CType

type CType interface {
	CType(buf *strings.Builder)
}

type CallNode

type CallNode struct {
	FuncName      Expr   //调用函数名
	Parame        []Expr //Parameter
	CCallFuncName string

	InAutoFree bool
	// contains filtered or unexported fields
}

函数调用节点

func NewCallExpr

func NewCallExpr(funcname Expr, LineNum int, parame ...Expr) *CallNode

NewCallNode 创建函数调用节点

func (*CallNode) C

func (a *CallNode) C(buf *strings.Builder)

func (*CallNode) SetNosemicolon

func (c *CallNode) SetNosemicolon(nosemicolon bool)

func (*CallNode) String

func (a *CallNode) String() string

type CaseNode

type CaseNode struct {
	Expr Expr
	// contains filtered or unexported fields
}

case节点

func NewCaseNode

func NewCaseNode(LineNum int) *CaseNode

func (*CaseNode) C

func (c *CaseNode) C(buf *strings.Builder)

func (*CaseNode) String

func (c *CaseNode) String() string

type CodeBlockIface

type CodeBlockIface interface {
	Node
	// contains filtered or unexported methods
}

CodeBlockIface 是代码块节点接口

type ConstNode

type ConstNode struct {
	TYPE  astdata.Typ
	Value Expr
	Name  string
	// contains filtered or unexported fields
}

常量声明节点

func (*ConstNode) C

func (c *ConstNode) C(buf *strings.Builder)

func (*ConstNode) CDecl

func (c *ConstNode) CDecl(buf *strings.Builder)

func (*ConstNode) String

func (n *ConstNode) String() string

type ContinueStmt

type ContinueStmt struct{}

continue语句

func NewContinueStmt

func NewContinueStmt() ContinueStmt

func (ContinueStmt) C

func (c ContinueStmt) C(buf *strings.Builder)

func (ContinueStmt) String

func (c ContinueStmt) String() string

type DefaultNode

type DefaultNode struct {
	// contains filtered or unexported fields
}

default节点

func NewDefaultNode

func NewDefaultNode(LineNum int) *DefaultNode

func (*DefaultNode) C

func (c *DefaultNode) C(buf *strings.Builder)

func (*DefaultNode) String

func (d *DefaultNode) String() string

type DerefExpr

type DerefExpr struct {
	Value Expr
	// contains filtered or unexported fields
}

DerefExpr 解引用节点

func (*DerefExpr) C

func (d *DerefExpr) C(buf *strings.Builder)

func (*DerefExpr) String

func (d *DerefExpr) String() string

type ElseNode

type ElseNode struct {
	BoolExpr Expr
	// contains filtered or unexported fields
}

else节点

func NewElseNode

func NewElseNode(LineNum int) *ElseNode

NewElseNode 创建else节点

func (*ElseNode) C

func (l *ElseNode) C(buf *strings.Builder)

func (*ElseNode) String

func (l *ElseNode) String() string

type EnumDecl

type EnumDecl struct {
	Name   string
	Enums  []string
	InFunc bool
	// contains filtered or unexported fields
}

EnumDecl 枚举声明

func NewEnumDecl

func NewEnumDecl(Name string, LineNum int, InFunc bool) *EnumDecl

func (*EnumDecl) C

func (s *EnumDecl) C(buf *strings.Builder)

func (*EnumDecl) CDecl

func (s *EnumDecl) CDecl(buf *strings.Builder)

func (*EnumDecl) Copy

func (s *EnumDecl) Copy() astdata.Typ

func (*EnumDecl) SetLea

func (s *EnumDecl) SetLea(i int)

func (*EnumDecl) SetTyp

func (s *EnumDecl) SetTyp()

func (*EnumDecl) String

func (s *EnumDecl) String() string

func (*EnumDecl) Typ

func (s *EnumDecl) Typ() string

type Expr

type Expr interface {
	Node
	// contains filtered or unexported methods
}

表达式接口,代表一个表达式

type Field

type Field = astdata.NameAndType

type ForNode

type ForNode struct {
	InitStmt Node
	BoolExpr Expr
	EndStmt  Node
	// contains filtered or unexported fields
}

for节点

func NewForNode

func NewForNode(LineNum int) *ForNode

NewForNode 创建for节点

func (*ForNode) C

func (l *ForNode) C(buf *strings.Builder)

func (*ForNode) String

func (l *ForNode) String() string

type FuncInfo

type FuncInfo struct {
	Name       string
	Parame     []astdata.Parame
	RetValue   []astdata.RetValue
	TypeParame []astdata.NameAndType
	// contains filtered or unexported fields
}

FuncInfo 函数信息

func (*FuncInfo) String

func (f *FuncInfo) String() string

type FuncNode

type FuncNode struct {
	*FuncInfo
}

函数节点

func NewFuncNode

func NewFuncNode(info *FuncInfo) *FuncNode

NewFuncNode 创建函数节点

func (*FuncNode) C

func (f *FuncNode) C(buf *strings.Builder)

func (*FuncNode) CDecl

func (f *FuncNode) CDecl(buf *strings.Builder)

func (*FuncNode) String

func (f *FuncNode) String() string

type GenericInstantiation

type GenericInstantiation struct {
	BaseName   astdata.Typ
	ActualType []astdata.Typ
	FileName   string
	// contains filtered or unexported fields
}

GenericInstantiation 泛型实例化

func (*GenericInstantiation) C

func (*GenericInstantiation) Copy

func (g *GenericInstantiation) Copy() astdata.Typ

func (*GenericInstantiation) FuncName

func (g *GenericInstantiation) FuncName() string

func (*GenericInstantiation) SetLea

func (g *GenericInstantiation) SetLea(i int)

func (*GenericInstantiation) SetTyp

func (g *GenericInstantiation) SetTyp()

func (*GenericInstantiation) String

func (g *GenericInstantiation) String() string

func (*GenericInstantiation) Typ

func (g *GenericInstantiation) Typ() string

type GotoStmt

type GotoStmt struct {
	Label string
	// contains filtered or unexported fields
}

goto语句

func NewGotoStmt

func NewGotoStmt(LineNum int) *GotoStmt

func (*GotoStmt) C

func (g *GotoStmt) C(buf *strings.Builder)

func (*GotoStmt) String

func (g *GotoStmt) String() string

type IfNode

type IfNode struct {
	BoolExpr Expr
	// contains filtered or unexported fields
}

if节点

func NewIfNode

func NewIfNode(LineNum int) *IfNode

NewIfNode 创建if节点

func (*IfNode) C

func (l *IfNode) C(buf *strings.Builder)

func (*IfNode) String

func (l *IfNode) String() string

type ImportInfo

type ImportInfo struct {
	Path string
}

ImportInfo 导入信息

func (ImportInfo) String

func (info ImportInfo) String() string

type IndexExpr

type IndexExpr struct {
	X     Expr
	Index Expr
	// contains filtered or unexported fields
}

IndexExpr 索引表达式 缩写index expression 缩写成 IndexExpr

func NewIndexExpr

func NewIndexExpr(X Expr, LineNum int) *IndexExpr

func (*IndexExpr) C

func (l *IndexExpr) C(buf *strings.Builder)

func (*IndexExpr) String

func (l *IndexExpr) String() string

type LabelNode

type LabelNode struct {
	Value string
	// contains filtered or unexported fields
}

标签

func NewLabelNode

func NewLabelNode(value string, LineNum int) *LabelNode

func (*LabelNode) C

func (l *LabelNode) C(buf *strings.Builder)

func (*LabelNode) String

func (b *LabelNode) String() string

type MethodNode

type MethodNode struct {
	*FuncInfo
}

MethodNode 方法节点

func NewMethodNode

func NewMethodNode(info *FuncInfo) *MethodNode

NewMethodNode 创建函数节点

func (*MethodNode) C

func (m *MethodNode) C(buf *strings.Builder)

func (*MethodNode) CDecl

func (m *MethodNode) CDecl(buf *strings.Builder)

func (*MethodNode) String

func (m *MethodNode) String() string

type MethodTableInfo

type MethodTableInfo struct {
	Infos *Sbt
}

func NewMethodTableInfo

func NewMethodTableInfo(Thread bool) MethodTableInfo

func (MethodTableInfo) String

func (info MethodTableInfo) String() string

type Node

type Node interface {
	String() string
	C(buf *strings.Builder)
}

节点接口,代表一个抽象语法树节点

type ObjKind

type ObjKind int

对象类型枚举

const (
	NoKind ObjKind = 1 << iota
	INTOBJ
	FLOATOBJ
	BoolObj
	StringObj
	SymbolObj
	LeaObj
	DerefObj
	StructPtr
	NilObj
	EnumObj
	TypeObj
)

func (ObjKind) String

func (o ObjKind) String() string

type Object

type Object struct {
	Name string
	Kind ObjKind
}

对象节点

可能表示

  • 整数
  • 浮点数
  • 布尔值
  • 符号
  • 字符串

func NewObject

func NewObject(Kind ObjKind, Name string) *Object

创建对象节点

func (*Object) C

func (o *Object) C(buf *strings.Builder)

func (*Object) CType

func (o *Object) CType(buf *strings.Builder)

func (*Object) Copy

func (o *Object) Copy() astdata.Typ

func (*Object) SetLea

func (o *Object) SetLea(i int)

func (*Object) SetTyp

func (o *Object) SetTyp()

func (*Object) String

func (o *Object) String() string

func (*Object) Typ

func (o *Object) Typ() string

type Objects

type Objects struct {
	T              string
	Slice          []Object
	IsImportSymbol bool //是否是导入符号,由语义检查填充
}

func NewObjects

func NewObjects(slice []Object) *Objects

func (*Objects) C

func (o *Objects) C(buf *strings.Builder)

func (*Objects) CType

func (o *Objects) CType(buf *strings.Builder)

func (*Objects) Copy

func (o *Objects) Copy() astdata.Typ

func (*Objects) FuncName

func (o *Objects) FuncName() string

func (*Objects) SetLea

func (o *Objects) SetLea(i int)

func (*Objects) SetTyp

func (o *Objects) SetTyp()

func (*Objects) String

func (o *Objects) String() string

func (*Objects) Typ

func (o *Objects) Typ() string

type OpExpr

type OpExpr = OperationExpr

运算表达式节点

func NewOpExpr

func NewOpExpr(OP enum.OPSymbol, Src1, Src2 Expr, LineNum int) *OpExpr

NewOpExpr 创建运算表达式节点

func (*OpExpr) C

func (a *OpExpr) C(buf *strings.Builder)

func (*OpExpr) SetNosemicolon

func (o *OpExpr) SetNosemicolon(nosemicolon bool)

func (*OpExpr) String

func (a *OpExpr) String() string

type OperationExpr

type OperationExpr struct {
	Src1    Expr
	Src2    Expr
	OP      enum.OPSymbol
	Inparen bool //是否在小括号内
	// contains filtered or unexported fields
}

运算表达式节点

type Package

type Package struct {
	PackageName string
	//符号表
	Sbt *Sbt
	//保存抽象语法树
	Trees data.Slice[*Tree]
	//是否有init函数
	IsInitFunc bool
	//C语言头文件用到的节点
	CHeaderFile data.Slice[CDecl]
	//变量初始化
	VarInitTable VarInitTable
	//自己及依赖导入的包
	ImportPackage map[string]*Package
	//是所有的导入路径
	ImporPath *Sbt
	//并发
	Thread bool
	// contains filtered or unexported fields
}

Package 管理一个包的所有源代码文件的抽象语法树

func NewPackage

func NewPackage(dir string, thread bool, errctx *errcode.ErrCtx, sbt *Sbt, ImportPackage map[string]*Package) *Package

NewPackage 创建管理一个包的所有源代码文件的抽象语法树的 Package

  • dir是包的路径
  • thread是控制是否并发
  • errctx是错误处理上下文
  • sbt是符号表

func (*Package) AddFile

func (p *Package) AddFile(ft lex2.FileToken)

AddFile 将一个源代码文件的词法分析结果转换为抽象语法树保存

  • ft 是源代码文件的词法分析结果

func (*Package) String

func (p *Package) String() string

type RbraceNode

type RbraceNode struct{}

右大括号节点

func NewRbraceNode

func NewRbraceNode() RbraceNode

func (RbraceNode) C

func (b RbraceNode) C(buf *strings.Builder)

func (RbraceNode) String

func (b RbraceNode) String() string

type ReturnNode

type ReturnNode struct {
	RetValue Expr
	LineNum  int
}

return节点

func (*ReturnNode) C

func (l *ReturnNode) C(buf *strings.Builder)

func (*ReturnNode) String

func (l *ReturnNode) String() string

type Sbt

type Sbt struct {

	//是否并发
	Thread bool
	// contains filtered or unexported fields
}

Sbt 符号表 symbolTable

func NewSbt

func NewSbt(Thread bool) *Sbt

NewSbt 创建符号表

  • Thread控制是否可以并发

func (*Sbt) AddConst

func (s *Sbt) AddConst(n *ConstNode) errcode.ErrCode

AddConst 记录常量 有错返回错误码 - n 是被记录的常量节点

func (*Sbt) AddEnum

func (s *Sbt) AddEnum(n *EnumDecl) errcode.ErrCode

AddEnum 记录枚举 有错返回错误码 - n 是被记录的枚举节点

func (*Sbt) AddFunc

func (s *Sbt) AddFunc(info *FuncNode) errcode.ErrCode

AddFunc 记录函数

func (*Sbt) AddGenInst

func (s *Sbt) AddGenInst(node *GenericInstantiation)

AddGenInst 记录泛型实例化信息

  • node是泛型实例化节点

func (*Sbt) AddMethod

func (s *Sbt) AddMethod(method *MethodNode) errcode.ErrCode

AddMethod 记录方法 有错返回错误码

  • method是语法节点

func (*Sbt) AddPackage

func (s *Sbt) AddPackage(p *Package) errcode.ErrCode

AddPackage 记录被导入的包 有错返回错误码

  • p是被导入的包

func (*Sbt) AddStruct

func (s *Sbt) AddStruct(decl *StructDecl) errcode.ErrCode

AddStruct 记录结构体 有错返回错误码

  • decl是语法节点

func (*Sbt) AddVar

func (s *Sbt) AddVar(n *VarNode) errcode.ErrCode

AddVar 记录变量 有错返回错误码

func (*Sbt) Copy

func (v *Sbt) Copy() *Sbt

func (*Sbt) Have

func (v *Sbt) Have(name string) (fmt.Stringer, errcode.ErrCode)

Have 查询是否记录了符号

  • name是符号名

func (*Sbt) Have2

func (v *Sbt) Have2(name string) (n fmt.Stringer, inlocal bool, err errcode.ErrCode)

Have2 查询是否记录了符号

  • name是符号名

func (*Sbt) HaveMethod

func (s *Sbt) HaveMethod(Type string, Name string) fmt.Stringer

HaveMethod 查询是否记录了方法

  • Type是类型名
  • Name是函数的名字

如果符号不存在,返回空信息

func (*Sbt) HaveType

func (s *Sbt) HaveType(name string) (astdata.Typ, errcode.ErrCode)

HaveType 查询是否记录了指定类型的符号

  • name是符号名

func (*Sbt) Range

func (v *Sbt) Range(f func(key string, value fmt.Stringer) bool)

Range 循环遍历所有表中记录的符号信息

func (*Sbt) String

func (v *Sbt) String() string

type SelfOpStmt

type SelfOpStmt struct {
	Dest Expr
	OP   enum.OPSymbol
	// contains filtered or unexported fields
}

自操作语句 缩写: Self-operating statement 缩写成 SelfOpStmt 源操作数只可能是下列类型

func (*SelfOpStmt) C

func (o *SelfOpStmt) C(buf *strings.Builder)

func (*SelfOpStmt) SetNosemicolon

func (o *SelfOpStmt) SetNosemicolon(nosemicolon bool)

func (*SelfOpStmt) String

func (o *SelfOpStmt) String() string

type StructDecl

type StructDecl struct {
	Name       string
	FileName   string
	FieldTable []Field
	TypeParame []astdata.NameAndType
	InFunc     bool
	// contains filtered or unexported fields
}

StructDecl 结构体声明

缩写:struct declaration 缩写成:StructDecl

func (*StructDecl) C

func (s *StructDecl) C(buf *strings.Builder)

func (*StructDecl) CDecl

func (s *StructDecl) CDecl(buf *strings.Builder)

func (*StructDecl) Copy

func (s *StructDecl) Copy() astdata.Typ

func (*StructDecl) Dep

func (info *StructDecl) Dep(i int) data.IsItARecursiveType

func (*StructDecl) DepLen

func (info *StructDecl) DepLen() int

func (*StructDecl) FindField

func (info *StructDecl) FindField(Name string) Field

FindField 寻找结构体字段中是否有Name 返回值Field.Name==""表示结构体字段中没有要查询到

func (*StructDecl) My

func (info *StructDecl) My() string

func (*StructDecl) SetLea

func (s *StructDecl) SetLea(i int)

func (*StructDecl) SetTyp

func (s *StructDecl) SetTyp()

func (*StructDecl) String

func (s *StructDecl) String() string

func (*StructDecl) Typ

func (s *StructDecl) Typ() string

type SwitchNode

type SwitchNode struct {
	Expr Expr
	// contains filtered or unexported fields
}

switch节点

func NewSwitchNode

func NewSwitchNode(LineNum int) *SwitchNode

func (*SwitchNode) C

func (s *SwitchNode) C(buf *strings.Builder)

func (*SwitchNode) String

func (s *SwitchNode) String() string

type Tree

type Tree struct {

	//包名
	PackageName string
	//文件名称
	Filename string
	//所有节点
	Nodes []Node

	//符号表
	Sbt *Sbt
	//变量初始化表
	VarInitTable *VarInitTable

	//HaveInitFunc 记录是否有自定义init函数
	HaveInitFunc *bool

	//C语言头文件用到的节点
	CHeaderFile *data.Slice[CDecl]

	//自己及依赖导入的包
	ImportPackage *map[string]*Package

	//是所有的导入路径
	ImporPath *Sbt

	//下面两个字段用于确定是否在函数内解析
	Funcinfo *FuncInfo

	//CheckInfo是专门在语义检查时使用的信息
	CheckInfo struct {
		//switch表达式的类型
		SwitchExprTyp string
		//是否要跳过switch代码块
		SwitchSkip bool
		//检查的符号是否是常量
		IsConst bool
		//一个函数内的标签
		Label []*LabelNode
		//一个函数内待检查的goto语句
		Goto []*GotoStmt
		//生成的临时变量数量
		TmpInt int
	}
	// contains filtered or unexported fields
}

func NewTree

func NewTree(l lex2.FileToken, path string, errctx *errcode.ErrCtx, thread bool) *Tree

func (*Tree) Panic

func (t *Tree) Panic(Line int, msg errcode.Msg, code ...errcode.ErrCode)

func (*Tree) Parser

func (t *Tree) Parser()

func (*Tree) PushNewSbt

func (t *Tree) PushNewSbt(sbt *Sbt)

func (*Tree) String

func (t *Tree) String() string

func (*Tree) SubRbrace

func (t *Tree) SubRbrace()

type VarInitTable

type VarInitTable struct {
	data.Slice[*VarNode]
	// contains filtered or unexported fields
}

VarInitTable 变量初始化表 实现了 sort.Interface 接口

func (*VarInitTable) Init

func (t *VarInitTable) Init(Thread bool)

Init 初始化变量初始化表

func (*VarInitTable) InitOrder

func (t *VarInitTable) InitOrder() []*VarNode

InitOrder 返回按行升序排列的变量初始化信息

func (*VarInitTable) Len

func (t *VarInitTable) Len() int

func (*VarInitTable) Less

func (t *VarInitTable) Less(i, j int) bool

func (*VarInitTable) Swap

func (t *VarInitTable) Swap(i, j int)

type VarNode

type VarNode struct {
	TYPE   astdata.Typ //变量类型
	Value  Expr        //值
	Name   string      //变量名
	Tmp    *VarNode    //处理变量遮蔽
	CType  string
	InFunc bool
	// contains filtered or unexported fields
}

变量声明节点

func NewVarNode

func NewVarNode(name string, InFunc bool, LineNum int) *VarNode

NewVarNode 创建变量声明节点

func (*VarNode) C

func (v *VarNode) C(buf *strings.Builder)

func (*VarNode) CDecl

func (v *VarNode) CDecl(buf *strings.Builder)

func (*VarNode) SetNosemicolon

func (n *VarNode) SetNosemicolon(nosemicolon bool)

func (*VarNode) String

func (n *VarNode) String() string

Jump to

Keyboard shortcuts

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