V抽象语法树
V语言所有的语法树结构体都在标准库的v.ast模块中定义,主要是通过联合类型来实现。
用联合类型来实现语法树,代码显得非常的简洁,清晰。
v ast子命令
可使用v ast子命令来生成语法树结构,这样你就可以边写代码,边查看代码对应的语法树,有助于加深对V语言语法树的理解。
v ast main.v //生成json格式的AST语法树文件main.json
v ast -w main.v //生成main.json,并且监控源文件变化,保存后自动重新生成
v ast -c main.v //同时生成AST语法树文件main.json和C源代码main.c,并监控源文件变化,保存后自动重新生成
v ast -p main.v //直接在终端中输出AST语法树
v ast -t main.v //输出简洁版的AST语法树文件main.json[]使用v ast子命令,将本章节中的示例代码生成语法树,即可查看到各种不同代码对应的语法树。
语法树结构体总览

ast.File语法树文件
整个编译过程主要的步骤就是: [ ]os.File => [ ]ast.File => 目标代码(c/x64/js) => 可执行文件。
一个os.File(源代码文件)会生成一个对应的ast.File(语法树文件)。
AST结构体
示例代码
生成的AST,整个源文件的所有语句都保存在stmts语句数组节点中:
Module 模块
AST结构体
示例代码
Const 常量
AST结构体
示例代码
Enum 枚举
示例代码
Variable 变量
Assign 变量赋值语句
AST结构体
示例代码
Identifier 标识符
AST结构体
示例代码
Literal 字面量
AST结构体
示例代码
AsCast as造型语句
AST结构体
示例代码
SizeOf sizeof语句
AST结构体
示例代码
TypeOf typeof语句
AST结构体
示例代码
CastExpr 造型表达式
AST结构体
示例代码 ( todo: need more about string(buf,n) )
Array 数组
ArrayInit 数组初始化语句
AST结构体
示例代码
IndexExpr 索引表达式
AST结构体
示例代码
RangeExpr 数组区间表达式
AST结构体
示例代码
ArrayDecompose 数组解构
AST结构体
示例代码
Map 字典
MapInit 字典初始化
AST结构体
示例代码
Operator 操作符
PrefixExpr 前缀表达式
AST结构体
示例代码
InfixExpr 中缀表达式
AST结构体
示例代码
PostfixExpr 后缀表达式
AST结构体
示例代码
SelectorExpr 选择器表达式
AST结构体
示例代码
ParExpr 括号表达式
AST结构体
示例代码
ConcatExpr 连接表达式
AST结构体
示例代码
Function 函数
FnDecl 函数声明
AST结构体
示例代码
AnonFn 匿名函数
AST结构体
示例代码
DeferStmt 函数defer语句
AST结构体
示例代码
Struct 结构体
StructDecl 结构体声明语句
AST结构体
示例代码
示例代码
StructInit 结构体初始化表达式
AST结构体
示例代码
结构体初始化例子
Interface 接口
InterfaceDecl 接口声明语句
AST结构体
示例代码
Type 类型
AliasType 类型别名声明语句
AST结构体
示例代码
FunctionType 函数类型声明语句
AST结构体
示例代码
Sumtype 联合类型
AST结构体
示例代码
TypeNode 类型表达式
主要用于联合类型的match类型匹配,以及is类型判断
AST结构体
示例代码
FlowControl 流程控制
Block 代码块语句
AST结构体
示例代码
if 条件语句
AST结构体
示例代码
match 分支匹配
AST结构体
示例代码
for 循环语句
AST结构体
示例代码
示例代码
示例代码
goto 跳转语句
AST结构体
示例代码
Error handle 错误控制
AST结构体
示例代码
Concurrent 并发
ChanInit 通道初始化
AST结构体
示例代码
SelectExpr 通道监听表达式
AST结构体
示例代码
LockExpr 并发锁表达式
AST结构体
示例代码
GoExpr 并发表达式
AST结构体
示例代码
Unsafe 不安全代码
AST结构体
示例代码
ASM 汇编
AST结构体
示例代码
SQL SQL语句
AST结构体
示例代码
TestAssert 测试断言
AssertStmt 测试断言语句
AST结构体
示例代码
DumpExpr 转储函数表达式
AST结构体
示例代码
Compile time 编译时
CompFor 编译时循环语句
AST结构体
示例代码
AtExpr at全局常量表达式
AST结构体
示例代码
C Integration C代码互操作
GlobalDecl 全局变量声明
AST结构体
示例代码
HashStmt C宏指令语句
AST结构体
示例代码
Likely likely表达式
AST结构体
示例代码
OffsetOf 结构体字段内存偏移量
AST结构体
示例代码
Comment 注释
AST结构体
示例代码
Other 其他
Empty 空语句/表达式
只在编译内部使用,用来判断空语句和空表达式。
AST结构体
NodeError 错误节点
只在编译内部使用,当解析器报错时,返回NodeError节点。
NodeError既是语句,也是表达式。
最后更新于
这有帮助吗?