7.1 KiB
AST
源码链接:
目录
Ptr
AST中使用的指针类型。实际上是std::shared_ptr
PtrList
存放Ptr的list,实际上是std::vector<Ptr>
Position
该节点代表的语法结构在源文件的位置信息,实际上是yy::location
。由bison/flex自动生成。
Type
包含SysY语言支持的数据类型:Type::INT
以及Type::VOID
。
多出的Type::STRING
类型用作系统调用的参数类型,Type::BOOL
作为条件表达式类型。
Binop
双目算术表达式的操作符。包含
Binop::PLUS
加
Binop::MINUS
减
Binop::MULTIPLY
乘
Binop::DIVIDE
除
Binop::MODULO
模
UnaryOp
单目算术表达式操作符,包含
UnaryOp::PLUS
正
UnaryOp::MINUS
负
UnaryCondOp
单目条件表达式操作符,包含
UnaryCondOp::NOT
非
BinaryCondOp
双目条件表达式操作符,包含
BinaryCondOp::LT
小于
BinaryCondOp::LTE
小于等于
BinaryCondOp::GT
大于
BinaryCondOp::GTE
大于等于
BinaryCondOp::EQ
等于等于
BinaryCondOp::NEQ
不等于
BinaryCondOp::LAND
逻辑与
BinaryCondOp::LOR
逻辑或
Node
语法树所有结点的基类,
Node::loc
是其在对应源文件的位置信息。类型为Position
virtual void Node::accept(Visitor &visitor)
为虚函数,用于访问者模式,接受一个Visitor。需要进行重写。
Assembly
AST的根结点
PtrList<GlobalDef> Assembly::global_defs
存放所有GlobalDef指针。
InitVal
代表初值的结点。该结点为嵌套定义。以下类型的变量初值均可表示:
int a = 1 + 1;
int b[2] = {1,2};
int c[2][2] = {{1,2},{3,4}}
...
bool InitVal::isExp
为真时初值为Expr类型。为假时代表以{...}
的形式进行赋初值
eg
int a = 3 + 1;//isExp=true
int c[2][2] = {{1,2},{3,4}};//isExp=false
所有InitVal
结点最底层一定是Expr类型。也即isExp
为true
PtrList<InitVal> InitVal::elementList
当isExp
为false时该域才有意义。是包含{}
中其余InitVal
结点指针的列表。
当isExp
为true时该域才有意义。一个初值表达式的指针。
GlobalDef
所有def结点的基类
FuncDef
代表函数定义。
Type FuncDef::ret_type
。
函数的返回值类型
Ptr<FuncFParamList> FuncDef::param_list
。
函数的形参指针
std::string FuncDef::name
函数名
函数体指针
VarDef
代表变量定义
bool VarDef::is_constant
是否为常量
Type VarDef::btype
变量类型(在sysY中只能是int)
std::string VarDef::name
变量名
bool VarDef::is_inited
是否初始化
PtrList<Expr> VarDef::array_length
若为数组,则是存放各维长度表达式指针的列表,否则为空
Ptr<InitVal> VarDef::initializers
若初始化,则是指向初值定义的指针
Stmt
所有statement的基类
AssignStmt
表示如下类型的语句:
target = value
即赋值型语句
赋值表达式的左值指针
赋值表达式右边表达式指针
ReturnStmt
代表return 语句
return 语句返回的表达式指针。空指针代表void return
BlockStmt
代表使用{}
括起来的stmt。
该block中所有stmt指针的列表
EmptyStmt
空语句
ExprStmt
表达式语句
表达式语句对应表达式的指针
Expr
所有表达式的基类
CondExpr
所有条件表达式的基类
AddExpr
所有算术表达式的基类
UnaryCondExpr
单目条件表达式
UnaryCondOp UnaryCondExpr::op
操作符
操作符右端表达式指针
BinaryCondExpr
双目条件表达式
BinaryCondOp BinaryCondExpr::op
操作符
Ptr<Expr> BinaryCondExpr::lhs, rhs
操作符左右两端表达式指针
BinaryExpr
双目算术表达式
BinOp BinaryExpr::op
操作符
Ptr<Expr> BinaryExpr::lhs, rhs
操作符左右两端表达式指针
UnaryExpr
单目算术表达式
UnaryOp UnaryExpr::op
操作符
操作符右端表达式指针
LVal
左值表达式
std::string Lval::name
变量名
PtrList<Expr> LVal::array_index
数组索引的指针列表。若不是数组,则为空
Literal
语义值类型,包含整数和字符串
bool Literal::is_int
是否为整形
int Literal::int_const
整数语义值
std::string Literal::str
字符串语义值(未处理转义)
FuncCallStmt
函数调用
std::string FuncCallStmt::name
被调用的函数名
PtrList<Expr> FuncCallStmt::params
存放函数实参表达式指针的列表
FuncParam
单个函数形参
std::string FuncParam::name
形参名
Type FuncParam::param_type
形参类型
PtrList<Expr> FuncParam::array_index
形参的数组维度列表,存放每一维的表达式指针。若非数组则为空
FuncFParamList
存放一个函数的所有形参
PtrList<FuncParam> FuncFParamList::params
存放所有形参指针的列表
IfStmt
表示如下结构:
if(cond_exp)
if_stmt
或
if(cond_exp)
if_stmt
else
else_stmt
cond_exp的指针
Ptr<Stmt> IfStmt::if_statement
if_stmt的指针
Ptr<Stmt> IfStmt::else_statement
else_stmt的指针(若无else,则为空)
WhileStmt
表示如下结构
while(cond_exp)
stmt
cond_exp的指针
Ptr<Stmt> WhileStmt::statement
stmt的指针
BreakStmt
表示一个break语句
ContinueStmt
表示一个continue语句
Visitor
访问者模式的基类,用于访问AST。需要重写其中的visit函数。