Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

class Annotation

public class Annotation <: Node {
    public init(inputs: Tokens)
    public init()
}

功能:表示编译器内置的注解节点。

一个 Annotation 节点:@CallingConv[xxx], @Attribute[xxx], @When[condition]等。

父类型:

prop arguments

public mut prop arguments: ArrayList<Argument>

功能:获取或设置 Annotation 中的参数序列,如 @CallingConv[xxx] 中的 xxx

类型:ArrayList<Argument>

prop at

public mut prop at: Token

功能:获取或设置 Annotation 节点中的 @ 操作符或 @! 操作符。

类型:Token

异常:

  • ASTException - 当设置的 Token 不是 @ 操作符或 @! 操作符时,抛出异常。

prop attributes

public mut prop attributes: Tokens

功能:获取或设置 Attribute 中设置的属性值,仅用于 @Attribute,如 @Attribute[xxx] 中的 xxx

类型:Tokens

prop condition

public mut prop condition: Expr

功能:获取或设置条件编译中的条件表达式,用于 @When,如 @When[xxx] 中的 xxx

类型:Expr

异常:

prop identifier

public mut prop identifier: Token

功能:获取或设置 Annotation 节点的标识符,如 @CallingConv[xxx] 中的 CallingConv

类型:Token

init()

public init()

功能:构造一个默认的 Annotation 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 Annotation 对象
    let annotation = Annotation()

    // 设置 Annotation 的属性
    annotation.identifier = Token(TokenKind.IDENTIFIER, "Anno")
    
    // 输出 Annotation 节点转化成的 Tokens
    println("annotation.toTokens(): ${annotation.toTokens()}")
}

运行结果:

annotation.toTokens(): @Anno

init(Tokens)

public init(inputs: Tokens)

功能:根据输入的词法单元,构造一个 Annotation 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 Annotation 对象
    let annotation = Annotation(quote(@!Anno))

    // 输出 Annotation 节点转化成的 Tokens
    println("annotation.toTokens(): ${annotation.toTokens()}")
}

运行结果:

annotation.toTokens(): @!Anno

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 Annotation 对象
    let annotation = Annotation(quote(@!Anno))

    // 输出 Annotation 节点转化成的 Tokens
    println("annotation.toTokens(): ${annotation.toTokens()}")
}

运行结果:

annotation.toTokens(): @!Anno

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: Annotation) {
        println("Visiting Annotation")
    }
}

main(): Unit {
    let annotation = Annotation(quote(@!Anno))

    // 对 Annotation 节点进行遍历
    annotation.traverse(MyVisitor())
}

运行结果:

Visiting Annotation

class Argument

public class Argument <: Node {
    public init()
}

功能:表示函数调用的实参节点。

例如 foo(arg:value) 中的 arg:value

父类型:

prop colon

public mut prop colon: Token

功能:获取或设置 Argument 节点中的操作符 ":",可能为 ILLEGAL 的词法单元。

类型:Token

异常:

prop expr

public mut prop expr: Expr

功能:获取或设置 Argument 节点中的表达式,如 arg:value 中的 value

类型:Expr

prop identifier

public mut prop identifier: Token

功能:获取或设置 Argument 节点中的标识符,如 arg:value 中的 arg,可能为 ILLEGAL 的词法单元。

类型:Token

异常:

prop keyword

public mut prop keyword: Token

功能:获取或设置 Argument 节点中的关键字 inout,可能为 ILLEGAL 的词法单元。

类型:Token

init()

public init()

功能:构造一个默认的 Argument 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 Argument 对象
    let argument = Argument()
    argument.expr = RefExpr(quote(value))
    
    // 将 Argument 转化为 Tokens 并输出
    println("argument.toTokens(): ${argument.toTokens()}")
}

运行结果:

argument.toTokens(): value

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let argument = Argument()
    let identifierToken = Token(TokenKind.IDENTIFIER, "arg")
    let colonToken = Token(TokenKind.COLON, ":")
    
    // 设置 Argument 的属性
    argument.identifier = identifierToken
    argument.colon = colonToken
    argument.expr = RefExpr(quote(value))
    
    // 将 Argument 转化为 Tokens 并输出
    println("argument.toTokens(): ${argument.toTokens()}")
}

运行结果:

argument.toTokens(): arg: value

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: Argument) {
        println("Visiting Argument")
    }
}

main(): Unit {
    let argument = Argument()
    argument.expr = RefExpr(quote(value))
    
    // 使用自定义访问器遍历 Argument 节点
    argument.traverse(MyVisitor())
}

运行结果:

Visiting Argument

class ArrayLiteral

public class ArrayLiteral <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示 Array 字面量节点。

ArrayLiteral 节点:使用格式 [element1, element2, ... , elementN] 表示, 每个 element 是一个表达式。

父类型:

prop elements

public mut prop elements: ArrayList<Expr>

功能:获取或设置 ArrayLiteral 中的表达式列表。

类型:ArrayList<Expr>

prop lSquare

public mut prop lSquare: Token

功能:获取或设置 ArrayLiteral 中的 "["。

类型:Token

异常:

prop rSquare

public mut prop rSquare: Token

功能:获取或设置 ArrayLiteral 中的 "]"。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 ArrayLiteral 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 ArrayLiteral 对象
    let arrayLiteral = ArrayLiteral()

    // 设置 ArrayLiteral 的属性
    arrayLiteral.lSquare = Token(TokenKind.LSQUARE, "[")
    arrayLiteral.rSquare = Token(TokenKind.RSQUARE, "]")
    
    println("arrayLiteral.toTokens(): ${arrayLiteral.toTokens()}")
}

运行结果:

arrayLiteral.toTokens(): []

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 ArrayLiteral 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {    
    // 从 Tokens 创建 ArrayLiteral 对象
    let arrayLiteral = ArrayLiteral(quote([1, 2, 3]))
    
    println("arrayLiteral.toTokens(): ${arrayLiteral.toTokens()}")
}

运行结果:

arrayLiteral.toTokens(): [1, 2, 3]

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let arrayLiteral = ArrayLiteral()
    
    // 设置数组字面量的属性
    arrayLiteral.lSquare = Token(TokenKind.LSQUARE, "[")
    arrayLiteral.rSquare = Token(TokenKind.RSQUARE, "]")
    arrayLiteral.elements.add(RefExpr(quote(item)))
    
    // 转化为 Tokens 并输出
    println("arrayLiteral.toTokens(): ${arrayLiteral.toTokens()}")
}

运行结果:

arrayLiteral.toTokens(): [item]

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ArrayLiteral) {
        println("Visiting ArrayLiteral")
    }
}

main(): Unit {
    let arrayLiteral = ArrayLiteral(quote([1, 2]))
    
    // 使用自定义访问器遍历 ArrayLiteral 节点
    arrayLiteral.traverse(MyVisitor())
}

运行结果:

Visiting ArrayLiteral

class AsExpr

public class AsExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示一个类型检查表达式。

一个 AsExpr 表达式:e as T,类型为 Option<T>。其中 e 可以是任何类型的表达式,T 可以是任何类型。

父类型:

prop expr

public mut prop expr: Expr

功能:获取或设置 AsExpr 节点中的表达式节点。

类型:Expr

prop keyword

public mut prop keyword: Token

功能:获取或设置 AsExpr 节点中的 as 操作符。

类型:Token

异常:

prop shiftType

public mut prop shiftType: TypeNode

功能:获取或设置 AsExpr 节点中的目标类型。

类型:TypeNode

init()

public init()

功能:构造一个默认的 AsExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 AsExpr 对象
    let asExpr = AsExpr()
    
    // 设置 AsExpr 的属性
    asExpr.expr = RefExpr(quote(x))
    asExpr.keyword = Token(TokenKind.AS, "as")
    asExpr.shiftType = RefType(quote(A))
    
    println("asExpr.toTokens(): ${asExpr.toTokens()}")
}

运行结果:

asExpr.toTokens(): x as A

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 AsExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 AsExpr 对象
    let asExpr = AsExpr(quote(value as Int64))
    
    println("asExpr.toTokens(): ${asExpr.toTokens()}")
}

运行结果:

asExpr.toTokens(): value as Int64

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 AsExpr 对象
    let asExpr = AsExpr(quote(value as Int64))
    
    // 转化为 Tokens 并输出
    println("asExpr.toTokens(): ${asExpr.toTokens()}")
}

运行结果:

asExpr.toTokens(): value as Int64

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: AsExpr) {
        println("Visiting AsExpr")
    }
}

main(): Unit {
    let asExpr = AsExpr(quote(a as Int32))
    
    // 使用自定义访问器遍历 AsExpr 节点
    asExpr.traverse(MyVisitor())
}

运行结果:

Visiting AsExpr

class AssignExpr

public class AssignExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示赋值表达式节点。

用于将左操作数的值修改为右操作数的值。一个 AssignExpr 节点:a = b

父类型:

prop assign

public mut prop assign: Token

功能:获取或设置 AssignExpr 节点中的赋值操作符(如 = 等)。

类型:Token

异常:

prop leftExpr

public mut prop leftExpr: Expr

功能:获取或设置 AssignExpr 节点中的左操作数。

类型:Expr

prop rightExpr

public mut prop rightExpr: Expr

功能:获取或设置 AssignExpr 节点中的右操作数。

类型:Expr

init()

public init()

功能:构造一个默认的 AssignExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 AssignExpr 对象
    let assignExpr = AssignExpr()
    
    // 设置 AssignExpr 的属性
    assignExpr.leftExpr = RefExpr(quote(a))
    assignExpr.assign = Token(TokenKind.ASSIGN, "=")
    assignExpr.rightExpr = RefExpr(quote(b))
    
    println("assignExpr.toTokens(): ${assignExpr.toTokens()}")
}

运行结果:

assignExpr.toTokens(): a = b

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 AssignExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 AssignExpr 对象
    let assignExpr = AssignExpr(quote(x = 10))
    
    println("assignExpr.toTokens(): ${assignExpr.toTokens()}")
}

运行结果:

assignExpr.toTokens(): x = 10

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let assignExpr = AssignExpr()
    
    // 设置 AssignExpr 的属性
    assignExpr.leftExpr = RefExpr(quote(x))
    assignExpr.assign = Token(TokenKind.ASSIGN, "=")
    assignExpr.rightExpr = LitConstExpr(quote(42))
    
    // 转化为 Tokens 并输出
    println("assignExpr.toTokens(): ${assignExpr.toTokens()}")
}

运行结果:

assignExpr.toTokens(): x = 42

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: AssignExpr) {
        println("Visiting AssignExpr")
    }
}

main(): Unit {
    let assignExpr = AssignExpr(quote(x = 10))
    
    // 使用自定义访问器遍历 AssignExpr 节点
    assignExpr.traverse(MyVisitor())
}

运行结果:

Visiting AssignExpr

class BinaryExpr

public class BinaryExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示一个二元操作表达式节点。

一个 BinaryExpr 节点:a + b, a - b 等。

父类型:

prop leftExpr

public mut prop leftExpr: Expr

功能:获取或设置 BinaryExpr 节点中操作符左侧的表达式节点。

类型:Expr

prop op

public mut prop op: Token

功能:获取或设置 BinaryExpr 节点中的二元操作符。

类型:Token

prop rightExpr

public mut prop rightExpr: Expr

功能:获取或设置 BinaryExpr 节点中操作符右侧的表达式节点。

类型:Expr

init()

public init()

功能:构造一个默认的 BinaryExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 BinaryExpr 对象
    let binaryExpr = BinaryExpr()

    // 设置 BinaryExpr 的属性
    binaryExpr.leftExpr = RefExpr(quote(x))
    binaryExpr.op = Token(TokenKind.ADD, "+")
    binaryExpr.rightExpr = RefExpr(quote(y))
    
    println("binaryExpr.toTokens(): ${binaryExpr.toTokens()}")
}

运行结果:

binaryExpr.toTokens(): x + y

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 BinaryExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 BinaryExpr 对象
    let binaryExpr = BinaryExpr(quote(5 + 3))
    
    println("binaryExpr.toTokens(): ${binaryExpr.toTokens()}")
}

运行结果:

binaryExpr.toTokens(): 5 + 3

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 BinaryExpr 对象
    let binaryExpr = BinaryExpr()
    
    // 设置 BinaryExpr 的属性
    binaryExpr.leftExpr = RefExpr(quote(a))
    binaryExpr.op = Token(TokenKind.MUL, "*")
    binaryExpr.rightExpr = RefExpr(quote(b))
    
    // 转化为 Tokens 并输出
    println("binaryExpr.toTokens(): ${binaryExpr.toTokens()}")
}

运行结果:

binaryExpr.toTokens(): a * b

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: BinaryExpr) {
        println("Visiting BinaryExpr")
    }
}

main(): Unit {
    let binaryExpr = BinaryExpr(quote(1 + 1))
    
    // 使用自定义访问器遍历 BinaryExpr 节点
    binaryExpr.traverse(MyVisitor())
}

运行结果:

Visiting BinaryExpr

class Block

public class Block <: Expr {
    public init()
}

功能:表示块节点。

Block 由一对匹配的大括号及其中可选的表达式声明序列组成的结构,简称 “块”。

父类型:

prop lBrace

public mut prop lBrace: Token

功能:获取或设置 Block 的 "{"。

类型:Token

异常:

prop nodes

public mut prop nodes: ArrayList<Node>

功能:获取或设置 Block 中的表达式或声明序列。

类型:ArrayList<Node>

prop rBrace

public mut prop rBrace: Token

功能:获取或设置 Block 的 "}"。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 Block 对象。

说明:

Block 节点无法脱离表达式或声明节点单独存在,因此不提供其他的构造函数。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 Block 对象
    let block = Block()

    // 设置 Block 的属性
    block.lBrace = Token(TokenKind.LCURL, "{")
    block.rBrace = Token(TokenKind.RCURL, "}")
    
    // 转化为 Tokens 并输出
    println("block.toTokens(): ${block.toTokens()}")
}

运行结果:

block.toTokens(): {
}

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let block = Block()
    
    // 设置 Block 的属性
    block.lBrace = Token(TokenKind.LCURL, "{")
    block.rBrace = Token(TokenKind.RCURL, "}")
    let expr = CallExpr(quote(foo()))
    block.nodes.add(expr)
    
    // 转化为 Tokens 并输出
    println("block.toTokens(): ${block.toTokens()}")
}

运行结果:

block.toTokens(): {
    foo()
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: Block) {
        println("Visiting Block")
    }
}

main(): Unit {
    let block = Block()

    // 设置 Block 的属性
    block.lBrace = Token(TokenKind.LCURL, "{")
    block.rBrace = Token(TokenKind.RCURL, "}")
    
    // 使用自定义访问器遍历 Block 节点
    block.traverse(MyVisitor())
}

运行结果:

Visiting Block

class Body

public class Body <: Node {
    public init(decls: ArrayList<Decl>)
    public init()
}

功能:表示 Class 类型、 Struct 类型、 Interface 类型以及扩展中由 {} 和内部的一组声明节点组成的结构。

父类型:

prop decls

public mut prop decls: ArrayList<Decl>

功能:获取或设置 Body 内的声明节点集合。

类型:ArrayList<Decl>

prop lBrace

public mut prop lBrace: Token

功能:获取或设置 { 词法单元。

类型:Token

异常:

prop rBrace

public mut prop rBrace: Token

功能:获取或设置 } 词法单元。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 Body 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 Body 对象
    let body = Body()

    // 设置 Body 的属性
    body.lBrace = Token(TokenKind.LCURL, "{")
    body.rBrace = Token(TokenKind.RCURL, "}")

    println("body.toTokens(): ${body.toTokens()}")
}

运行结果:

body.toTokens(): {
}

init(ArrayList<Decl>)

public init(decls: ArrayList<Decl>)

功能:构造一个 Body 对象。

参数:

示例:

import std.ast.*
import std.collection.*

main(): Unit {
    // 创建声明列表
    let decls = ArrayList<Decl>()
    // 将变量声明添加到列表中
    decls.add(VarDecl(quote(let x: Int64 = 10)))
    
    // 使用声明列表创建 Body 对象
    let body = Body(decls)
    // 输出转换后的 Tokens
    println("body.toTokens(): ${body.toTokens()}")
}

运行结果:

body.toTokens(): {
    let x: Int64 = 10
}

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*
import std.collection.*

main(): Unit {
    // 构造一个默认的 Body 对象
    let body = Body()
    // 将变量声明添加到 Body 中
    body.decls.add(VarDecl(quote(let x: Int64 = 10)))
    // 将函数声明添加到 Body 中
    body.decls.add(FuncDecl(quote(func foo() {})))
    
    // 设置左右花括号
    body.lBrace = Token(TokenKind.LCURL, "{")
    body.rBrace = Token(TokenKind.RCURL, "}")
    
    // 转换为 Tokens 并输出
    println("body.toTokens(): ${body.toTokens()}")
}

运行结果:

body.toTokens(): {
    let x: Int64 = 10
    func foo() {
    }
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*
import std.collection.*

class MyVisitor <: Visitor {
    public override func visit(_: Body) {
        println("Visiting Body")
    }
}

main(): Unit {
    // 构造一个默认的 Body 对象
    let body = Body()

    // 设置 Body 的属性
    body.lBrace = Token(TokenKind.LCURL, "{")
    body.rBrace = Token(TokenKind.RCURL, "}")
    
    // 使用自定义访问器遍历 Body 节点
    body.traverse(MyVisitor())
}

运行结果:

Visiting Body

class CallExpr

public class CallExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示函数调用节点节点。

一个 CallExpr 节点包括一个表达式后面紧跟参数列表,例如 foo(100)

父类型:

prop arguments

public mut prop arguments: ArrayList<Argument>

功能:获取或设置 CallExpr 节点中函数参数。

类型:ArrayList<Argument>

prop callFunc

public mut prop callFunc: Expr

功能:获取或设置 CallExpr 节点中的函数调用节点。

类型:Expr

prop lParen

public mut prop lParen: Token

功能:获取或设置 CallExpr 节点中的 "("。

类型:Token

异常:

prop rParen

public mut prop rParen: Token

功能:获取或设置 CallExpr 节点中的 ")"。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 CallExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 CallExpr 对象
    let callExpr = CallExpr()

    // 设置 CallExpr 的属性
    callExpr.callFunc = RefExpr(quote(bar))
    callExpr.lParen = Token(TokenKind.LPAREN, "(")
    callExpr.rParen = Token(TokenKind.RPAREN, ")")

    println("callExpr.toTokens(): ${callExpr.toTokens()}")
}

运行结果:

callExpr.toTokens(): bar()

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 CallExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 CallExpr 对象
    let callExpr = CallExpr(quote(foo(10, "hello")))

    // 转化为 Tokens 并输出
    println("callExpr.toTokens(): ${callExpr.toTokens()}")
}

运行结果:

callExpr.toTokens(): foo(10, "hello")

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*
import std.collection.*

main(): Unit {
    // 构造一个默认的 CallExpr 对象
    let callExpr = CallExpr()
    
    // 设置 CallExpr 的属性
    callExpr.callFunc = RefExpr(quote(bar))
    callExpr.lParen = Token(TokenKind.LPAREN, "(")
    callExpr.rParen = Token(TokenKind.RPAREN, ")")
    
    // 创建第一个参数并添加到调用表达式中
    let arg1 = Argument()
    arg1.expr = LitConstExpr(quote(true))
    callExpr.arguments.add(arg1)
    
    // 创建第二个参数并添加到调用表达式中
    let arg2 = Argument()
    arg2.expr = LitConstExpr(quote(3.14))
    callExpr.arguments.add(arg2)
    
    // 转化为 Tokens 并输出
    println("callExpr.toTokens(): ${callExpr.toTokens()}")
}

运行结果:

callExpr.toTokens(): bar(true, 3.14)

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: CallExpr) {
        println("Visiting CallExpr")
    }
}

main(): Unit {
    let callExpr = CallExpr(quote(foo(42)))
    
    // 使用自定义访问器遍历 CallExpr 节点
    callExpr.traverse(MyVisitor())
}

运行结果:

Visiting CallExpr

class ClassDecl

public class ClassDecl <: Decl {
    public init(inputs: Tokens)
    public init()
}

功能:类定义节点。

类的定义使用 class 关键字,定义依次为:可缺省的修饰符、class 关键字、class 名、可选的类型参数、是否指定父类或父接口、可选的泛型约束、类体的定义。

父类型:

prop body

public mut prop body: Body

功能:获取或设置 ClassDecl 节点的类体。

类型:Body

prop superTypeBitAnds

public mut prop superTypeBitAnds: Tokens

功能:获取或设置 ClassDecl 节点的父类或父接口声明中的 & 操作符的词法单元序列,可能为空。

类型:Tokens

异常:

prop superTypes

public mut prop superTypes: ArrayList<TypeNode>

功能:获取或设置 ClassDecl 节点的父类或者父接口。

类型:ArrayList<TypeNode>

prop upperBound

public mut prop upperBound: Token

功能:获取或设置 <: 操作符。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 ClassDecl 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 ClassDecl 对象
    let classDecl = ClassDecl()

    // 设置 ClassDecl 的属性
    classDecl.keyword = Token(TokenKind.CLASS, "class")
    classDecl.identifier = Token(TokenKind.IDENTIFIER, "A")
    classDecl.body = Body()

    println("classDecl.toTokens(): ${classDecl.toTokens()}")
}

运行结果:

classDecl.toTokens(): class A {
}

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 ClassDecl 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 ClassDecl 对象
    let classDecl = ClassDecl(quote(class MyClass {}))

    // 转化为 Tokens 并输出
    println("classDecl.toTokens(): ${classDecl.toTokens()}")
}

运行结果:

classDecl.toTokens(): class MyClass {
}

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*
import std.collection.*

main(): Unit {
    // 构造一个默认的 ClassDecl 对象
    let classDecl = ClassDecl()
    
    // 设置 ClassDecl 的属性
    classDecl.keyword = Token(TokenKind.CLASS, "class")
    classDecl.identifier = Token(TokenKind.IDENTIFIER, "A")
    let varDecl = VarDecl(quote(let x: Int64 = 10))
    classDecl.body = Body(ArrayList<Decl>([varDecl]))
    
    // 转化为 Tokens 并输出
    println("classDecl.toTokens(): ${classDecl.toTokens()}")
}

运行结果:

classDecl.toTokens(): class A {
    let x: Int64 = 10
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ClassDecl) {
        println("Visiting ClassDecl")
    }
}

main(): Unit {
    // 从 Tokens 创建 ClassDecl 对象
    let classDecl = ClassDecl(quote(class Test {}))
    
    // 使用自定义访问器遍历 ClassDecl 节点
    classDecl.traverse(MyVisitor())
}

运行结果:

Visiting ClassDecl

class CommandTypePattern

public class CommandTypePattern <: Pattern {
    public init()
    public init(inputs: Tokens)
}

功能:表示一个带有类型注解的命令模式,例如:pattern: Type1 | Type2 | ...

一个 CommandTypePattern 节点的示例: someCommand: Effect

父类型:

prop pattern

public mut prop pattern: Pattern

功能:获取或设置冒号(:)之前的命令模式。

类型:Pattern

prop colon

public mut prop colon: Token

功能:获取或设置用于分隔模式与类型的冒号(:)标记。

类型:Token

异常:

  • ASTException — 如果提供的标记不是冒号,则抛出异常。

prop types

public mut prop types: ArrayList<TypeNode>

功能:获取或设置冒号后面的类型节点列表,例如:String | Int | Float

类型:ArrayList<TypeNode>

init()

public init()

功能:构建一个默认的 CommandTypePattern 对象。

示例:

import std.ast.*
import std.collection.*

main(): Unit {
    // 构造一个默认的 CommandTypePattern 对象
    let commandTypePattern = CommandTypePattern()
    
    // 设置 CommandTypePattern 的属性
    commandTypePattern.colon = Token(TokenKind.COLON, ":")
    commandTypePattern.pattern = WildcardPattern()
    commandTypePattern.types = ArrayList<TypeNode>([RefType(quote(Eff))])

    // 转化为 Tokens 并输出
    println("commandTypePattern.toTokens(): ${commandTypePattern.toTokens()}")
}

运行结果:

commandTypePattern.toTokens(): _: Eff

init(Tokens)

public init(inputs: Tokens)

功能:从标记流中构建一个 CommandTypePattern 对象。

参数:

  • inputs: Tokens — 要解析为 CommandTypePattern 节点的标记集合。

异常:

  • ASTException — 如果输入的标记无法解析为有效的 CommandTypePattern 节点,则抛出异常。

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 CommandTypePattern 对象
    let commandTypePattern = CommandTypePattern(quote(e: MyEffect))

    // 转化为 Tokens 并输出
    println("commandTypePattern.toTokens(): ${commandTypePattern.toTokens()}")
}

运行结果:

commandTypePattern.toTokens(): e: MyEffect

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*
import std.collection.*

main(): Unit {
    // 构造一个默认的 CommandTypePattern 对象
    let commandTypePattern = CommandTypePattern()
    
    // 设置 CommandTypePattern 的属性
    commandTypePattern.colon = Token(TokenKind.COLON, ":")
    commandTypePattern.pattern = WildcardPattern()
    commandTypePattern.types = ArrayList<TypeNode>([RefType(quote(Eff))])

    // 转化为 Tokens 并输出
    println("commandTypePattern.toTokens(): ${commandTypePattern.toTokens()}")
}

运行结果:

commandTypePattern.toTokens(): _: Eff

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: CommandTypePattern) {
        println("Visiting CommandTypePattern")
    }
}

main(): Unit {
    // 从 Tokens 创建 CommandTypePattern 对象
    let commandTypePattern = CommandTypePattern(quote(e: MyEffect))
    
    // 使用自定义访问器遍历 CommandTypePattern 节点
    commandTypePattern.traverse(MyVisitor())
}

运行结果:

Visiting CommandTypePattern

class ConstPattern

public class ConstPattern <: Pattern {
    public init(inputs: Tokens)
    public init()
}

功能:表示常量模式节点。

常量模式可以是整数字面量、字符字节字面量、浮点数字面量、字符字面量、布尔字面量、字符串字面量等字面量,如 case 1 => 0 中的 1

父类型:

prop litConstExpr

public mut prop litConstExpr: LitConstExpr

功能:获取或设置 ConstPattern 节点中的字面量表达式。

类型:LitConstExpr

init()

public init()

功能:构造一个默认的 ConstPattern 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 ConstPattern 对象
    let constPattern = ConstPattern()

    // 设置 ConstPattern 的属性
    constPattern.litConstExpr = LitConstExpr(quote(1))

    println("constPattern.toTokens(): ${constPattern.toTokens()}")
}

运行结果:

constPattern.toTokens(): 1

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 ConstPattern 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 ConstPattern 对象
    let constPattern = ConstPattern(quote(42))

    // 输出转换后的 Tokens
    println("constPattern.toTokens(): ${constPattern.toTokens()}")
}

运行结果:

constPattern.toTokens(): 42

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 ConstPattern 对象
    let constPattern = ConstPattern()

    // 设置 ConstPattern 的属性
    constPattern.litConstExpr = LitConstExpr(quote(3.14))
    
    // 转化为 Tokens 并输出
    println("constPattern.toTokens(): ${constPattern.toTokens()}")
}

运行结果:

constPattern.toTokens(): 3.14

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ConstPattern) {
        println("Visiting ConstPattern")
    }
}

main(): Unit {
    // 从 Tokens 创建 ConstPattern 对象
    let constPattern = ConstPattern(quote(100))
    
    // 使用自定义访问器遍历ConstPattern节点
    constPattern.traverse(MyVisitor())
}

运行结果:

Visiting ConstPattern

class Constructor

public class Constructor <: Node {
    public init()
}

功能:表示 enum 类型中的 Constructor 节点。

一个 Constructor 节点:enum TimeUnit { Year | Month(Float32, Float32)} 中的 Year 和 Month(Float32, Float32)。

说明:

Constructor 可以没有参数,也可以有一组不同类型的参数。

父类型:

prop annotations

public mut prop annotations: ArrayList<Annotation>

功能:获取或设置作用于 Constructor 节点的注解列表。

类型:ArrayList<Annotation>

prop identifier

public mut prop identifier: Token

功能:获取或设置 Constructor 的标识符词法单元。

类型:Token

prop lParen

public mut prop lParen: Token

功能:获取或设置 Constructor 节点中的 "(" 词法单元。

类型:Token

异常:

prop rParen

public mut prop rParen: Token

功能:获取或设置 Constructor 节点中的 ")" 词法单元。

类型:Token

异常:

prop typeArguments

public mut prop typeArguments: ArrayList<TypeNode>

功能:获取或设置 Constructor 节点可选的参数类型节点的集合。

类型:ArrayList<TypeNode>

init()

public init()

功能:构造一个默认的 Constructor 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 Constructor 对象
    let constructor = Constructor()
    
    // 设置 Constructor 的属性
    constructor.identifier = Token(TokenKind.IDENTIFIER, "Con")

    // 转化为 Tokens 并输出
    println("constructor.toTokens(): ${constructor.toTokens()}")
}

运行结果:

constructor.toTokens(): Con

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 Constructor 对象
    let constructor = Constructor()
    
    // 设置 Constructor 的属性
    constructor.identifier = Token(TokenKind.IDENTIFIER, "Year")
    
    // 转化为 Tokens 并输出
    println("constructor.toTokens(): ${constructor.toTokens()}")
}

运行结果:

constructor.toTokens(): Year

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: Constructor) {
        println("Visiting Constructor")
    }
}

main(): Unit {
    // 构造一个默认的 Constructor 对象
    let constructor = Constructor()
    
    // 设置 Constructor 的属性
    constructor.identifier = Token(TokenKind.IDENTIFIER, "Month")
    
    // 使用自定义访问器遍历 Constructor 节点
    constructor.traverse(MyVisitor())
}

运行结果:

Visiting Constructor

class Decl

public open class Decl <: Node {
    protected var annotations_: ArrayList<Annotation> = ArrayList<Annotation>()
    protected var modifiers_: ArrayList<Modifier> = ArrayList<Modifier>()
    protected var keyword_: Token = Token()
    protected var identifier_: Token = Token()
    protected var node: Node = Expr()
}

功能:所有声明节点的父类,继承自 Node 节点,提供了所有声明节点的通用接口。

说明:

类定义、接口定义、函数定义、变量定义、枚举定义、结构体定义、扩展定义、类型别名定义、宏定义等都属于 Decl 节点。

父类型:

var annotations_

protected var annotations_: ArrayList<Annotation> = ArrayList<Annotation>()

功能:获取或设置作用于 Decl 节点的注解列表。

类型:ArrayList<Annotation>

var identifier_

protected var identifier_: Token = Token()

功能:获取或设置声明节点的标识符,如 class foo {} 中的 foo

类型:Token

var keyword_

protected var keyword_: Token = Token()

功能:获取或设置声明节点的关键字。

类型:Token

var modifiers_

protected var modifiers_: ArrayList<Modifier> = ArrayList<Modifier>()

功能:获取或设置节点的修饰符列表。

类型:ArrayList<Modifier>

var node

protected var node: Node = Expr()

功能:获取或设置Decl 节点的形参节点。

类型:Node

prop annotations

public mut prop annotations: ArrayList<Annotation>

功能:获取或设置作用于 Decl 节点的注解列表。

类型:ArrayList<Annotation>

prop constraintCommas

public mut prop constraintCommas: Tokens

功能:获取或设置 Decl 节点中的 "," 词法单元序列,可能为空。

类型:Tokens

异常:

prop genericConstraint

public mut prop genericConstraint: ArrayList<GenericConstraint>

功能:获取或设置声明节点的泛型约束,可能为空,如 func foo<T>() where T <: Comparable<T> {} 中的 where T <: Comparable<T>

类型:ArrayList<GenericConstraint>

prop genericParam

public mut prop genericParam: GenericParam

功能:获取或设置形参列表,类型形参列表由 <> 括起,多个类型形参之间用逗号分隔。

类型:GenericParam

异常:

  • ASTException - 当节点未定义类型形参列表时,抛出异常。

prop identifier

public mut open prop identifier: Token

功能:获取或设置声明节点的标识符,如 class foo {} 中的 foo

类型:Token

prop isGenericDecl

public mut prop isGenericDecl: Bool

功能:判断是否是一个泛型节点。

类型:Bool - 是一个泛型节点为 true;反之为 false。

prop keyword

public mut prop keyword: Token

功能:获取或设置声明节点的关键字。

类型:Token

prop modifiers

public mut prop modifiers: ArrayList<Modifier>

功能:获取或设置节点的修饰符列表。

类型:ArrayList<Modifier>

func dump(UInt16)

protected open func dump(indent: UInt16): String

功能:将当前语法树节点转化为树形结构的形态并进行打印。语法树节点的树形结构将按照以下形式进行输出:

  • - 字符串:表示当前节点的公共属性, 如 -keyword , -identifier
  • 节点属性后紧跟该节点的具体类型, 如 -declType: PrimitiveType 表示节点类型是一个 PrimitiveType 节点。
  • 每个类型使用大括号表示类型的作用区间。

语法树输出的详细格式请参见语法树节点打印

参数:

  • indent: UInt16 - 格式化输出的缩进空格数量。

返回值:

  • String - 格式化输出内容。

示例:

import std.ast.*

// 在子类中调用
extend FuncDecl {
    public func myDump() {
        dump(1)
    }
}

main(): Unit {
    // 创建 Decl 的子类
    let decl = FuncDecl(quote(func foo() {}))

    println("decl.myDump(): ${decl.myDump()}")
}

运行结果:

decl.myDump(): FuncDecl {
    -keyword: Token {
      value: "func"
      kind: FUNC
      pos: 12: 31
    }
    -identifier: Token {
      value: "foo"
      kind: IDENTIFIER
      pos: 12: 36
    }
    -block: Block {
    }
  }

func getAttrs()

public func getAttrs(): Tokens

功能:获取当前节点的属性(一般通过内置的 Attribute 来设置某个声明设置属性值)。

返回值:

  • Tokens - 当前节点的属性。

示例:

import std.ast.*

main(): Unit {
    // 创建 Decl 节点
    let decl = ClassDecl(quote(@Attribute[attr1, attr2] class A {}))

    // 获取 Decl 节点属性值
    println("decl.getAttrs(): ${decl.getAttrs()}")
}

运行结果:

decl.getAttrs(): attr1 attr2

func hasAttr(String)

public func hasAttr(attr: String): Bool

功能:判断当前节点是否具有某个属性(一般通过内置的 Attribute 来设置某个声明的属性值)。

参数:

  • attr: String - 将要判断是否存在于该节点的属性。

返回值:

  • Bool - 当前节点具有该属性时,返回 true;反之,返回 false。

示例:

import std.ast.*

main(): Unit {
    // 创建 Decl 节点
    let decl = ClassDecl(quote(@Attribute[attr1, attr2] class A {}))

    // 判断 Decl 节点是否有对应属性值
    println("decl.hasAttr(\"attr1\"): ${decl.hasAttr("attr1")}")
    println("decl.hasAttr(\"attr2\"): ${decl.hasAttr("attr2")}")
    println("decl.hasAttr(\"attr3\"): ${decl.hasAttr("attr3")}")
}

运行结果:

decl.hasAttr("attr1"): true
decl.hasAttr("attr2"): true
decl.hasAttr("attr3"): false

func toTokens()

public open func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*
import std.collection.*

main(): Unit {
    // 创建 Decl 节点
    let decl = ClassDecl(quote(class A {}))
    
    // 转化为 Tokens 并输出
    println("decl.toTokens(): ${decl.toTokens()}")
}

运行结果:

decl.toTokens(): class A {
}

func traverse(Visitor)

public open func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: Decl) {
        breakTraverse()
        println("Visiting Decl")
    }
}

main(): Unit {
    // 创建 Decl 节点(以 ClassDecl 为例)
    let decl = ClassDecl(quote(class A {}))
    
    // 使用自定义访问器遍历 Decl 节点
    decl.traverse(MyVisitor())
}

运行结果:

Visiting Decl

class DoWhileExpr

public class DoWhileExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示 do-while 表达式。

父类型:

prop block

public mut prop block: Block

功能:获取或设置 DoWhileExpr 中的块表达式。

类型:Block

prop condition

public mut prop condition: Expr

功能:获取或设置关键字 DoWhileExpr 中的条件表达式。

类型:Expr

prop keywordD

public mut prop keywordD: Token

功能:获取或设置 DoWhileExpr 节点中 do 关键字,其中 keywordD 中的 D 为关键字 do 的首字母大写,代表关键字 do

类型:Token

异常:

prop keywordW

public mut prop keywordW: Token

功能:获取或设置 DoWhileExpr 节点中 while 关键字,其中 keywordW 中的 W 为关键字 while 的首字母大写,代表关键字 while

类型:Token

异常:

prop lParen

public mut prop lParen: Token

功能:获取或设置 DoWhileExprwhile 关键字之后的 "("。

类型:Token

异常:

prop rParen

public mut prop rParen: Token

功能:获取或设置 DoWhileExprwhile 关键字之后的 ")"。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 DoWhileExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 DoWhileExpr 对象
    let doWhileExpr = DoWhileExpr()
    
    // 设置 DoWhileExpr 的属性
    doWhileExpr.keywordD = Token(TokenKind.DO, "do")
    doWhileExpr.keywordW = Token(TokenKind.WHILE, "while")
    doWhileExpr.lParen = Token(TokenKind.LPAREN, "(")
    doWhileExpr.rParen = Token(TokenKind.RPAREN, ")")
    doWhileExpr.condition = RefExpr(quote(flag))
    let block = Block()
    block.lBrace = Token(TokenKind.LCURL, "{")
    block.rBrace = Token(TokenKind.RCURL, "}")
    doWhileExpr.block = block
    
    // 转化为 Tokens 并输出
    println("doWhileExpr.toTokens(): ${doWhileExpr.toTokens()}")
}

运行结果:

doWhileExpr.toTokens(): do {
}
while(flag)

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 DoWhileExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 DoWhileExpr 对象
    let doWhileExpr = DoWhileExpr(quote(do {} while (true)))

    // 转化为 Tokens 并输出
    println("doWhileExpr.toTokens(): ${doWhileExpr.toTokens()}")
}

运行结果:

doWhileExpr.toTokens(): do {
}
while(true)

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 DoWhileExpr 对象
    let doWhileExpr = DoWhileExpr()
    
    // 设置 DoWhileExpr 的属性
    doWhileExpr.keywordD = Token(TokenKind.DO, "do")
    doWhileExpr.keywordW = Token(TokenKind.WHILE, "while")
    doWhileExpr.lParen = Token(TokenKind.LPAREN, "(")
    doWhileExpr.rParen = Token(TokenKind.RPAREN, ")")
    doWhileExpr.condition = RefExpr(quote(flag))
    let block = Block()
    block.lBrace = Token(TokenKind.LCURL, "{")
    block.rBrace = Token(TokenKind.RCURL, "}")
    doWhileExpr.block = block
    
    // 转化为 Tokens 并输出
    println("doWhileExpr.toTokens(): ${doWhileExpr.toTokens()}")
}

运行结果:

doWhileExpr.toTokens(): do {
}
while(flag)

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: DoWhileExpr) {
        println("Visiting DoWhileExpr")
    }
}

main(): Unit {
    let doWhileExpr = DoWhileExpr(quote(do {} while (false)))
    
    // 使用自定义访问器遍历 DoWhileExpr 节点
    doWhileExpr.traverse(MyVisitor())
}

运行结果:

Visiting DoWhileExpr

class EnumDecl

public class EnumDecl <: Decl {
    public init(inputs: Tokens)
    public init()
}

功能:表示一个 Enum 定义节点。

Enum 的定义使用 enum 关键字,定义依次为:可缺省的修饰符、enum 关键字、enum 名、可选的类型参数、是否指定父接口、可选的泛型约束、enum 体的定义。

父类型:

prop constructors

public mut prop constructors: ArrayList<Constructor>

功能:获取或设置 EnumDecl 节点内 constructor 的成员。

类型:ArrayList<Constructor>

prop decls

public mut prop decls: ArrayList<Decl>

功能:获取或设置 EnumDecl 节点内除 constructor 的其他成员。

类型:ArrayList<Decl>

prop ellipsis

public mut prop ellipsis: Token

功能:获取或设置 EnumDecl 节点中可选的 ... 词法单元,可能为 ILLEGAL 的词法单元类型。

类型:Token

异常:

prop lBrace

public mut prop lBrace: Token

功能:获取或设置 EnumDecl 节点的 { 词法单元类型。

类型:Token

异常:

prop rBrace

public mut prop rBrace: Token

功能:获取或设置 EnumDecl 节点的 } 词法单元类型。

类型:Token

异常:

prop superTypeBitAnds

public mut prop superTypeBitAnds: Tokens

功能:获取或设置 EnumDecl 节点的父接口声明中的 & 操作符的词法单元序列,可能为空。

类型:Tokens

异常:

prop superTypes

public mut prop superTypes: ArrayList<TypeNode>

功能:获取或设置 EnumDecl 节点的父接口。

类型:ArrayList<TypeNode>

prop upperBound

public mut prop upperBound: Token

功能:获取或设置 <: 操作符。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 EnumDecl 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 EnumDecl 对象
    let enumDecl = EnumDecl()
    
    // 设置 EnumDecl 的属性
    enumDecl.keyword = Token(TokenKind.ENUM, "enum")
    enumDecl.identifier = Token(TokenKind.IDENTIFIER, "status")
    let constructor = Constructor()
    constructor.identifier = Token(TokenKind.IDENTIFIER, "Active")
    enumDecl.constructors.add(constructor)
    enumDecl.lBrace = Token(TokenKind.LCURL, "{")
    enumDecl.rBrace = Token(TokenKind.RCURL, "}")
    
    // 转化为 Tokens 并输出
    println("enumDecl.toTokens(): ${enumDecl.toTokens()}")
}

运行结果:

enumDecl.toTokens(): enum status {
    Active
}

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 EnumDecl 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 EnumDecl 对象
    let enumDecl = EnumDecl(quote(enum Color { Red | Green | Blue }))

    // 转化为 Tokens 并输出
    println("enumDecl.toTokens(): ${enumDecl.toTokens()}")
}

运行结果:

enumDecl.toTokens(): enum Color {
    Red
    | Green
    | Blue
}

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*
import std.collection.*

main(): Unit {
    // 构造一个默认的 EnumDecl 对象
    let enumDecl = EnumDecl()
    
    // 设置 EnumDecl 的属性
    enumDecl.keyword = Token(TokenKind.ENUM, "enum")
    enumDecl.identifier = Token(TokenKind.IDENTIFIER, "status")
    let constructor = Constructor()
    constructor.identifier = Token(TokenKind.IDENTIFIER, "Active")
    enumDecl.constructors.add(constructor)
    
    // 创建函数声明
    let funcDecl = FuncDecl(quote(func getValue(): Int64 { 0 }))
    // 将函数声明添加到EnumDecl中
    enumDecl.decls.add(funcDecl)
    
    // 设置左右花括号
    enumDecl.lBrace = Token(TokenKind.LCURL, "{")
    enumDecl.rBrace = Token(TokenKind.RCURL, "}")
    
    // 转化为 Tokens 并输出
    println("enumDecl.toTokens(): ${enumDecl.toTokens()}")
}

运行结果:

enumDecl.toTokens(): enum status {
    Active
    func getValue(): Int64 {
        0
    }
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: EnumDecl) {
        println("Visiting EnumDecl")
    }
}

main(): Unit {
    let enumDecl = EnumDecl(quote(enum Status { Pending | Completed }))
    
    // 使用自定义访问器遍历 EnumDecl 节点
    enumDecl.traverse(MyVisitor())
}

运行结果:

Visiting EnumDecl

class EnumPattern

public class EnumPattern <: Pattern {
    public init()
    public init(inputs: Tokens)
}

功能:表示 enum 模式节点。

用于匹配 enum 的 constructor, 如 case Year(n) => 1 中的 Year(n)

父类型:

prop commas

public mut prop commas: Tokens

功能:获取或设置 EnumPattern 节点中的 "," 词法单元序列,可能为空。

类型:Tokens

异常:

prop constructor

public mut prop constructor: Expr

功能:获取或设置 EnumPattern 节点中的构造器表达式节点。

类型:Expr

prop lParen

public mut prop lParen: Token

功能:获取或设置 EnumPattern 节点中的 "(" 的词法单元。

类型:Token

异常:

prop patterns

public mut prop patterns: ArrayList<Pattern>

功能:获取或设置 EnumPattern 节点中有参构造器内的模式节点列表。

类型:ArrayList<Pattern>

prop rParen

public mut prop rParen: Token

功能:获取或设置 EnumPattern 节点中的 ")" 的词法单元。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 EnumPattern 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 EnumPattern 对象
    let enumPattern = EnumPattern()
    
    // 设置 EnumPattern 的属性
    enumPattern.constructor = RefExpr(quote(Status))
    enumPattern.lParen = Token(TokenKind.LPAREN, "(")
    enumPattern.rParen = Token(TokenKind.RPAREN, ")")
    let pattern = WildcardPattern()
    enumPattern.patterns.add(pattern)
    
    // 转化为 Tokens 并输出
    println("enumPattern.toTokens(): ${enumPattern.toTokens()}")
}

运行结果:

enumPattern.toTokens(): Status(_)

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 EnumPattern 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 EnumPattern 对象
    let enumPattern = EnumPattern(quote(Point(x, y)))

    // 转化为 Tokens 并输出
    println("enumPattern.toTokens(): ${enumPattern.toTokens()}")
}

运行结果:

enumPattern.toTokens(): Point(x, y)

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*
import std.collection.*

main(): Unit {
    // 构造一个默认的 EnumPattern 对象
    let enumPattern = EnumPattern()
    
    // 设置 EnumPattern 的属性
    enumPattern.constructor = RefExpr(quote(Status))
    enumPattern.lParen = Token(TokenKind.LPAREN, "(")
    enumPattern.rParen = Token(TokenKind.RPAREN, ")")
    
    // 创建模式
    let pattern = WildcardPattern()
    // 将模式添加到 EnumPattern 中
    enumPattern.patterns.add(pattern)
    
    // 转化为 Tokens 并输出
    println("enumPattern.toTokens(): ${enumPattern.toTokens()}")
}

运行结果:

enumPattern.toTokens(): Status(_)

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: EnumPattern) {
        println("Visiting EnumPattern")
    }
}

main(): Unit {
    // 从 Tokens 创建 EnumPattern 对象
    let enumPattern = EnumPattern(quote(Error(code)))
    
    // 使用自定义访问器遍历 EnumPattern 节点
    enumPattern.traverse(MyVisitor())
}

运行结果:

Visiting EnumPattern

class ExceptTypePattern

public class ExceptTypePattern <: Pattern {
    public init()
    public init(inputs: Tokens)
}

功能:表示一个用于异常模式状态下的节点。

例如 e: Exception1 | Exception2

父类型:

prop colon

public mut prop colon: Token

功能:获取或设置 ExceptTypePattern 节点中的 ":" 操作符的词法单元。

类型:Token

异常:

prop pattern

public mut prop pattern: Pattern

功能:获取或设置 ExceptTypePattern 节点中的模式节点。

类型:Pattern

prop types

public mut prop types: ArrayList<TypeNode>

功能:获取或设置 ExceptTypePattern 节点中有类型列表。

类型:ArrayList<TypeNode>

init()

public init()

功能:构造一个默认的 ExceptTypePattern 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 ExceptTypePattern 对象
    let exceptTypePattern = ExceptTypePattern()
    
    // 设置 ExceptTypePattern 的属性
    exceptTypePattern.colon = Token(TokenKind.COLON, ":")
    exceptTypePattern.pattern = WildcardPattern()
    let ioExceptionType = RefType(quote(IOException))
    exceptTypePattern.types.add(ioExceptionType)
    
    // 转化为 Tokens 并输出
    println("exceptTypePattern.toTokens(): ${exceptTypePattern.toTokens()}")
}

运行结果:

exceptTypePattern.toTokens(): _: IOException

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 ExceptTypePattern 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 ExceptTypePattern 对象
    let exceptTypePattern = ExceptTypePattern(quote(e: IOException))

    // 转化为 Tokens 并输出
    println("exceptTypePattern.toTokens(): ${exceptTypePattern.toTokens()}")
}

运行结果:

exceptTypePattern.toTokens(): e: IOException

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*
import std.collection.*

main(): Unit {
    // 构造一个默认的 ExceptTypePattern 对象
    let exceptTypePattern = ExceptTypePattern()
    
    // 设置 ExceptTypePattern 的属性
    exceptTypePattern.colon = Token(TokenKind.COLON, ":")
    exceptTypePattern.pattern = WildcardPattern()
    
    // 创建第一个类型
    let ioExceptionType = RefType(quote(IOException))
    // 创建第二个类型
    let fileExceptionType = RefType(quote(FileException))
    
    // 将类型添加到 ExceptTypePattern 中
    exceptTypePattern.types.add(ioExceptionType)
    exceptTypePattern.types.add(fileExceptionType)
    
    // 转化为 Tokens 并输出
    println("exceptTypePattern.toTokens(): ${exceptTypePattern.toTokens()}")
}

运行结果:

exceptTypePattern.toTokens(): _: IOException | FileException

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ExceptTypePattern) {
        println("Visiting ExceptTypePattern")
    }
}

main(): Unit {
    // 从 Tokens 创建 ExceptTypePattern 对象
    let exceptTypePattern = ExceptTypePattern(quote(err: RuntimeException))
    
    // 使用自定义访问器遍历 ExceptTypePattern 节点
    exceptTypePattern.traverse(MyVisitor())
}

运行结果:

Visiting ExceptTypePattern

class Expr

public open class Expr <: Node {}

功能:所有表达式节点的父类,继承自 Node 节点。

表达式节点的 toTokens 方法会根据操作符优先级添加括号,例如已有一个 BinaryExpr 节点 a * b, 用户将左表达式内容 a 修改为 a + 1,修改后 toTokens 方法会为左表达式添加括号,toTokens 输出为 (a + 1) * b。

父类型:

func dump(UInt16)

protected open func dump(_: UInt16): String

功能:将当前语法树节点转化为树形结构的形态并进行打印,需要被子类重写。

参数:

  • _: UInt16 - 格式化输出的缩进空格数量。

返回值:

  • String - 格式化输出内容。

示例:

import std.ast.*

// 在子类中调用
extend BinaryExpr {
    public func myDump() {
        dump(1)
    }
}

main(): Unit {
    // 创建 Expr 的子类
    let expr = BinaryExpr(quote(1 + 1))

    println("expr.myDump(): ${expr.myDump()}")
}

运行结果:

expr.myDump(): BinaryExpr {
    -leftExpr: LitConstExpr {
      -literal: Token {
        value: "1"
        kind: INTEGER_LITERAL
        pos: 12: 33
      }
    }
    -op: Token {
      value: "+"
      kind: ADD
      pos: 12: 35
    }
    -rightExpr: LitConstExpr {
      -literal: Token {
        value: "1"
        kind: INTEGER_LITERAL
        pos: 12: 37
      }
    }
  }

func precedence()

protected open func precedence(): Int64

功能:返回当前表达式节点的优先级。

返回值:

  • Int64 - 当前表达式节点的优先级。

示例:

import std.ast.*

// 在子类中调用
extend BinaryExpr {
    public func myPrecedence(): Int64 {
        precedence()
    }
}

main(): Unit {
    // 创建 Expr 的子类
    let binaryExpr1 = BinaryExpr(quote(1 + 1))
    let binaryExpr2 = BinaryExpr()
    binaryExpr2.leftExpr = binaryExpr1
    binaryExpr2.op = Token(TokenKind.MUL, "*")
    binaryExpr2.rightExpr = LitConstExpr(quote(5))

    // 输出内外 Expr 的优先级
    println("binaryExpr1.myPrecedence(): ${binaryExpr1.myPrecedence()}")
    println("binaryExpr2.myPrecedence(): ${binaryExpr2.myPrecedence()}")

    // 由于内层 Expr 低于外层,自动添加了括号
    println("binaryExpr2.toTokens(): ${binaryExpr2.toTokens()}")
}

运行结果:

binaryExpr1.myPrecedence(): 12
binaryExpr2.myPrecedence(): 13
binaryExpr2.toTokens(): (1 + 1) * 5

func toTokens()

public open func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建 Expr 节点
    let expr = BinaryExpr(quote(1 + 1))
    
    // 转化为 Tokens 并输出
    println("expr.toTokens(): ${expr.toTokens()}")
}

运行结果:

expr.toTokens(): 1 + 1

func traverse(Visitor)

public open func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: Expr) {
        breakTraverse()
        println("Visiting Expr")
    }
}

main(): Unit {
    // 创建 Expr 节点(以 BinaryExpr 为例)
    let expr = BinaryExpr(quote(1 + 1))
    
    // 使用自定义访问器遍历 Expr 节点
    expr.traverse(MyVisitor())
}

运行结果:

Visiting Expr

class ExtendDecl

public class ExtendDecl <: Decl {
    public init(inputs: Tokens)
    public init()
}

功能:表示一个扩展定义节点。

扩展的定义使用 extend 关键字,扩展定义依次为:extend 关键字、扩展类型、是否指定父接口、可选的泛型约束、扩展体的定义。

父类型:

prop body

public mut prop body: Body

功能:获取或设置 ExtendDecl 节点的类体。

类型:Body

prop extendType

public mut prop extendType: TypeNode

功能:获取或设置被扩展的类型。

类型:TypeNode

prop identifier

public mut override prop identifier: Token

功能:ExtendDecl 节点继承 Decl 节点,但是不支持 identifier 属性,使用时会抛出异常。

类型:Token

异常:

  • ASTException - 当使用 identifier 属性时,抛出异常。

prop superTypeBitAnds

public mut prop superTypeBitAnds: Tokens

功能:获取或设置 ExtendDecl 节点的父接口声明中的 & 操作符的词法单元序列,可能为空。

类型:Tokens

异常:

prop superTypes

public mut prop superTypes: ArrayList<TypeNode>

功能:获取或设置 ExtendDecl 节点的父接口。

类型:ArrayList<TypeNode>

prop upperBound

public mut prop upperBound: Token

功能:获取或设置 <: 操作符。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 ExtendDecl 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 ExtendDecl 对象
    let extendDecl = ExtendDecl()

    // 设置 ExtendDecl 的属性
    extendDecl.extendType = RefType(quote(B))
    
    let body = Body()
    let funcDecl = FuncDecl(quote(func bar() { println("Hello from bar") }))
    body.decls.add(funcDecl)
    extendDecl.body = body
    
    // 转化为 Tokens 并输出
    println("extendDecl.toTokens(): ${extendDecl.toTokens()}")
}

运行结果:

extendDecl.toTokens(): B {
    func bar() {
        println("Hello from bar")
    }
}

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 ExtendDecl 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 ExtendDecl 对象
    let extendDecl = ExtendDecl(quote(extend A { func foo() {} }))
    
    // 转化为 Tokens 并输出
    println("extendDecl.toTokens(): ${extendDecl.toTokens()}")
}

运行结果:

extendDecl.toTokens(): extend A {
    func foo() {
    }
}

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 ExtendDecl 对象
    let extendDecl = ExtendDecl()
    
    // 设置 ExtendDecl 的属性
    extendDecl.extendType = RefType(quote(B))
    
    let body = Body()
    let funcDecl = FuncDecl(quote(func bar() { println("Hello from bar") }))
    body.decls.add(funcDecl)
    extendDecl.body = body
    
    // 转化为 Tokens 并输出
    println("extendDecl.toTokens(): ${extendDecl.toTokens()}")
}

运行结果:

extendDecl.toTokens(): B {
    func bar() {
        println("Hello from bar")
    }
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ExtendDecl) {
        println("Visiting ExtendDecl")
    }
}

main(): Unit {
    // 从 Tokens 创建 ExtendDecl 对象
    let extendDecl = ExtendDecl(quote(extend A { func foo() {} }))

    // 使用自定义访问器遍历 ExtendDecl 节点
    extendDecl.traverse(MyVisitor())
}

运行结果:

Visiting ExtendDecl

class FeatureId

public class FeatureId <: Node {
    public init()
}

功能:表示一个 feature id。

注意:

必须以关键字开头features,其次是 feature id 列表,必须出现在源文件的包名声明之前。 feature id 由标识符组成,标识符之间用点号分隔。feature id 不能用反引号转义。

父类型:

prop identifiers

public mut prop identifiers: Tokens

功能:获取或设置 FeatureId 节点的标识符。

类型:Tokens

异常:

prop dots

public mut prop dots: Tokens

功能:获取或设置 feature 的点号。例如:features { user.define.sample }

类型:Tokens

异常:

init()

public init()

功能:构造一个 FeatureId 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 FeatureId 对象
    let featureId = FeatureId()

    // 设置 FeatureId 的属性
    featureId.identifiers = quote(ftr)

    // 转化为 Tokens 并输出
    println("featureId.toTokens(): ${featureId.toTokens()}")
}

运行结果:

featureId.toTokens(): ftr

func toTokens()

public func toTokens(): Tokens

功能:转换当前的抽象语法树节点为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 FeatureId 对象
    let featureId = FeatureId()

    // 设置 FeatureId 的属性
    featureId.identifiers = quote(a b c)
    featureId.dots = quote(. .)

    // 转化为 Tokens 并输出
    println("featureId.toTokens(): ${featureId.toTokens()}")
}

运行结果:

featureId.toTokens(): a.b.c

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。要提前终止子节点遍历,请重写 visit 函数并调用 breakTraverse 函数来终止遍历行为。参见 自定义访问函数遍历 AST 对象

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: FeatureId) {
        println("Visiting FeatureId")
    }
}

main(): Unit {
    // 构造一个默认的 FeatureId 对象
    let featureId = FeatureId()

    // 设置 FeatureId 的属性
    featureId.identifiers = quote(a b c)
    featureId.dots = quote(. .)
    
    // 使用自定义访问器遍历 FeatureId 节点
    featureId.traverse(MyVisitor())
}

运行结果:

Visiting FeatureId

class FeaturesDirective

public class FeaturesDirective <: Node {
    public init()
    public init(input: Tokens)
}

功能:feature directive 节点对象。

注意:

Features 声明必须以关键字 features 开头,后跟 FeaturesSet,并且必须出现在源文件的包头之前。

父类型:

prop annotations

public mut prop annotations: ArrayList<Annotation>

功能:获取或设置在 FeaturesDirective 上的注解。

类型:ArrayList<Annotation>

prop keyword

public mut prop keyword: Token

功能:获取或设置 FeaturesDirective 节点里的 features 关键字。

类型:Token

异常:

  • ASTException - 在配置的不是关键字时抛出异常。

prop featuresSet

public mut prop featuresSet: FeaturesSet

功能:获取或设置 FeaturesDirective 节点里的 features 名称。

类型:FeaturesSet

init()

public init()

功能:构造一个默认的 FeaturesDirective 对象。

示例:

import std.ast.*
import std.collection.*

main(): Unit {
    // 构造一个默认的 FeaturesDirective 对象
    let featuresDirective = FeaturesDirective()
    
    // 设置 FeaturesDirective 的属性
    featuresDirective.keyword = Token(TokenKind.FEATURES, "features")
    let featuresSet = FeaturesSet()
    let featureId = FeatureId()
    featureId.identifiers = quote(ftr)
    featuresSet.content = ArrayList<FeatureId>([featureId])
    featuresSet.lCurl = Token(TokenKind.LCURL, "{")
    featuresSet.rCurl = Token(TokenKind.RCURL, "}")
    featuresDirective.featuresSet = featuresSet

    // 转化为 Tokens 并输出
    println("featuresDirective.toTokens(): ${featuresDirective.toTokens()}")
}

运行结果:

featuresDirective.toTokens(): features { ftr }

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 FeaturesDirective 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 用 Tokens 创建一个 FeaturesDirective 对象
    let featuresDirective = FeaturesDirective(quote(features {a, b.c}))

    // 转化为 Tokens 并输出
    println("featuresDirective.toTokens(): ${featuresDirective.toTokens()}")
}

运行结果:

featuresDirective.toTokens(): features { a, b.c }

func toTokens()

public func toTokens(): Tokens

功能:转换一个语法树节点为 Tokens

返回值:

示例:

import std.ast.*
import std.collection.*

main(): Unit {
    // 构造一个默认的 FeaturesDirective 对象
    let featuresDirective = FeaturesDirective()
    
    // 设置 FeaturesDirective 的属性
    featuresDirective.keyword = Token(TokenKind.FEATURES, "features")
    let featuresSet = FeaturesSet()
    let featureId = FeatureId()
    featureId.identifiers = quote(ftr)
    featuresSet.content = ArrayList<FeatureId>([featureId])
    featuresSet.lCurl = Token(TokenKind.LCURL, "{")
    featuresSet.rCurl = Token(TokenKind.RCURL, "}")
    featuresDirective.featuresSet = featuresSet

    // 转化为 Tokens 并输出
    println("featuresDirective.toTokens(): ${featuresDirective.toTokens()}")
}

运行结果:

featuresDirective.toTokens(): features { ftr }

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。要提前终止子节点遍历,请重写 visit 函数并调用 breakTraverse 函数来终止遍历行为。参见 自定义访问函数遍历 AST 对象

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: FeaturesDirective) {
        println("Visiting FeaturesDirective")
    }
}

main(): Unit {
    // 用 Tokens 创建一个 FeaturesDirective 对象
    let featuresDirective = FeaturesDirective(quote(features {a, b.c}))
    
    // 使用自定义访问器遍历 FeaturesDirective 节点
    featuresDirective.traverse(MyVisitor())
}

运行结果:

Visiting FeaturesDirective

class FeaturesSet

public class FeaturesSet <: Node {
    public init()
    public init(input: Tokens)
}

功能:一组 features 名称。

注意:

featuresSet 必须开被 {} 包裹。featuresSet 包含一组 FeatureId

父类型:

prop lCurl

public mut prop lCurl: Token

功能:获取或设置在 FeaturesSet 节点里的 {

类型:Token

异常:

prop content

public mut prop content: ArrayList<FeatureId> 

功能:获取或设置在 FeaturesSet 节点里的一组 feature id。

类型:ArrayList<FeatureId>

异常:

  • ASTException - 当配置的不是一组 feature id 时抛出异常。

prop commas

public mut prop commas: Tokens 

功能:获取或设置在 FeaturesSet 节点里的一组 ,

类型:Tokens

异常:

  • ASTException - 当配置的不是一组 , 时抛出异常。

prop rCurl

public mut prop rCurl: Token

功能:获取或设置在 FeaturesSet 节点里的 }

类型:Token

异常:

init()

public init()

功能:构造一个默认的 FeaturesSet 对象。

示例:

import std.ast.*
import std.collection.*

main(): Unit {
    // 构造一个默认的 FeaturesSet 对象
    let featuresSet = FeaturesSet()

    // 设置 FeaturesSet 的属性
    let featureId = FeatureId()
    featureId.identifiers = quote(ftr)
    
    featuresSet.content = ArrayList<FeatureId>([featureId])
    featuresSet.lCurl = Token(TokenKind.LCURL, "{")
    featuresSet.rCurl = Token(TokenKind.RCURL, "}")

    // 转化为 Tokens 并输出
    println("featuresSet.toTokens(): ${featuresSet.toTokens()}")
}

运行结果:

featuresSet.toTokens(): { ftr }

func toTokens()

public func toTokens(): Tokens

功能:转换一个语法树节点为 Tokens

返回值:

示例:

import std.ast.*
import std.collection.*

main(): Unit {
    // 构造一个默认的 FeaturesSet 对象
    let featuresSet = FeaturesSet()

    // 设置 FeaturesSet 的属性
    let featureId = FeatureId()
    featureId.identifiers = quote(a b c)
    featureId.dots = quote(. .)
    
    featuresSet.content = ArrayList<FeatureId>([featureId])
    featuresSet.lCurl = Token(TokenKind.LCURL, "{")
    featuresSet.rCurl = Token(TokenKind.RCURL, "}")

    // 转化为 Tokens 并输出
    println("featuresSet.toTokens(): ${featuresSet.toTokens()}")
}

运行结果:

featuresSet.toTokens(): { a.b.c }

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。要提前终止子节点遍历,请重写 visit 函数并调用 breakTraverse 函数来终止遍历行为。参见 自定义访问函数遍历 AST 对象

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: FeaturesSet) {
        println("Visiting FeaturesSet")
    }
}

main(): Unit {
    // 构造一个默认的 FeaturesSet 对象
    let featuresSet = FeaturesSet()

    // 设置 FeaturesSet 的属性
    let featureId = FeatureId()
    featureId.identifiers = quote(a b c)
    featureId.dots = quote(. .)
    featuresSet.content = ArrayList<FeatureId>([featureId])
    featuresSet.lCurl = Token(TokenKind.LCURL, "{")
    featuresSet.rCurl = Token(TokenKind.RCURL, "}")
    
    // 使用自定义访问器遍历 FeaturesSet 节点
    featuresSet.traverse(MyVisitor())
}

运行结果:

Visiting FeaturesSet

class ForInExpr

public class ForInExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示 for-in 表达式。

ForInExpr 类型中,关键字 for 之后是 Pattern, 此后是一个 in 关键字和表达式节点,最后是一个执行循环体 Block

父类型:

prop block

public mut prop block: Block

功能:获取或设置 ForInExpr 中的循环体。

类型:Block

prop expr

public mut prop expr: Expr

功能:获取或设置 ForInExpr 中的表达式。

类型:Expr

prop keywordF

public mut prop keywordF: Token

功能:获取或设置 ForInExpr 中的关键字 for

类型:Token

异常:

prop keywordI

public mut prop keywordI: Token

功能:获取或设置 ForInExpr 中的关键字 in

类型:Token

异常:

prop keywordW

public mut prop keywordW: Token

功能:获取或设置 ForInExpr 中的关键字 where

类型:Token

异常:

prop lParen

public mut prop lParen: Token

功能:获取或设置 ForInExpr 中关键字 for 后的 "("。

类型:Token

异常:

prop pattern

public mut prop pattern: Pattern

功能:获取或设置 ForInExpr 中的 Pattern 节点。

类型:Pattern

prop patternGuard

public mut prop patternGuard: Expr

功能:获取或设置 ForInExpr 中的 patternGuard 条件表达式。

类型:Expr

异常:

prop rParen

public mut prop rParen: Token

功能:获取或设置 ForInExpr 中的 ")"。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 ForInExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 ForInExpr 对象
    let forInExpr = ForInExpr()
    
    // 设置 ForInExpr 的属性
    forInExpr.keywordF = Token(TokenKind.FOR, "for")
    forInExpr.pattern = VarPattern(Token(TokenKind.IDENTIFIER, "x"))
    forInExpr.keywordI = Token(TokenKind.IN, "in")
    forInExpr.expr = RefExpr(quote(arr))
    
    // 创建块
    let block = Block()
    
    // 设置 Block 的属性
    block.lBrace = Token(TokenKind.LCURL, "{")
    block.rBrace = Token(TokenKind.RCURL, "}")
    
    // 添加一个表达式节点
    let expr = CallExpr(quote(foo()))
    block.nodes.add(expr)
    forInExpr.block = block
    
    // 转化为 Tokens 并输出
    println("forInExpr.toTokens(): ${forInExpr.toTokens()}")
}

运行结果:

forInExpr.toTokens(): for(x in arr) {
    foo()
}

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 ForInExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 ForInExpr 对象
    let forInExpr = ForInExpr(quote(for (i in 1..10) { println(i) }))
    
    // 转化为 Tokens 并输出
    println("forInExpr.toTokens(): ${forInExpr.toTokens()}")
}

运行结果:

forInExpr.toTokens(): for(i in 1 .. 10) {
    println(i)
}

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 ForInExpr 对象
    let forInExpr = ForInExpr()
    
    // 设置 ForInExpr 的属性
    forInExpr.keywordF = Token(TokenKind.FOR, "for")
    forInExpr.pattern = VarPattern(Token(TokenKind.IDENTIFIER, "x"))
    forInExpr.keywordI = Token(TokenKind.IN, "in")
    forInExpr.expr = RefExpr(quote(arr))
    
    // 创建块
    let block = Block()
    
    // 设置 Block 的属性
    block.lBrace = Token(TokenKind.LCURL, "{")
    block.rBrace = Token(TokenKind.RCURL, "}")
    
    // 添加一个表达式节点
    let expr = CallExpr(quote(foo()))
    block.nodes.add(expr)
    forInExpr.block = block
    
    // 转化为 Tokens 并输出
    println("forInExpr.toTokens(): ${forInExpr.toTokens()}")
}

运行结果:

forInExpr.toTokens(): for(x in arr) {
    foo()
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ForInExpr) {
        println("Visiting ForInExpr")
    }
}

main(): Unit {
    // 从 Tokens 创建 ForInExpr 对象
    let forInExpr = ForInExpr(quote(for (i in 1..10) { println(i) }))
    
    // 使用自定义访问器遍历 ForInExpr 节点
    forInExpr.traverse(MyVisitor())
}

运行结果:

Visiting ForInExpr

class FuncDecl

public class FuncDecl <: Decl {
    public init(inputs: Tokens)
    public init()
}

功能:表示一个函数定义节点。

由可选的函数修饰符,关键字 func ,函数名,可选的类型形参列表,函数参数,可缺省的函数返回类型来定义一个函数,函数定义时必须有函数体,函数体是一个块。

父类型:

prop block

public mut prop block: Block

功能:获取或设置 FuncDecl 节点的函数体。

类型:Block

prop colon

public mut prop colon: Token

功能:获取或设置 FuncDecl 节点的冒号。

类型:Token

异常:

prop declType

public mut prop declType: TypeNode

功能:获取或设置 FuncDecl 节点的函数返回类型。

类型:TypeNode

异常:

prop funcParams

public mut prop funcParams: ArrayList<FuncParam>

功能:获取或设置 FuncDecl 节点的函数参数。

类型:ArrayList<FuncParam>

prop lParen

public mut prop lParen: Token

功能:获取或设置 FuncDecl 节点的 "("。

类型:Token

异常:

prop overloadOp

public mut prop overloadOp: Tokens

功能:获取或设置 FuncDecl 节点的重载操作符。

类型:Tokens

prop rParen

public mut prop rParen: Token

功能:获取或设置 FuncDecl 节点的 ")"。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 FuncDecl 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 FuncDecl 对象
    let funcDecl = FuncDecl()
    
    // 设置 FuncDecl 的属性
    funcDecl.keyword = Token(TokenKind.FUNC, "func")
    funcDecl.identifier = Token(TokenKind.IDENTIFIER, "foo")
    funcDecl.lParen = Token(TokenKind.LPAREN, "(")
    funcDecl.rParen = Token(TokenKind.RPAREN, ")")
    
    // 创建函数体
    let block = Block()
    block.lBrace = Token(TokenKind.LCURL, "{")
    block.rBrace = Token(TokenKind.RCURL, "}")
    funcDecl.block = block
    
    // 转化为 Tokens 并输出
    println("funcDecl.toTokens(): ${funcDecl.toTokens()}")
}

运行结果:

funcDecl.toTokens(): func foo() {
}

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 FuncDecl 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 FuncDecl 对象
    let funcDecl = FuncDecl(quote(func add(a: Int64, b: Int64): Int64 { return a + b }))
    
    // 转化为 Tokens 并输出
    println("funcDecl.toTokens(): ${funcDecl.toTokens()}")
}

运行结果:

funcDecl.toTokens(): func add(a: Int64, b: Int64): Int64 {
    return a + b
}

func isConst()

public func isConst(): Bool

功能:判断是否是一个 Const 类型的节点。

返回值:

  • Bool - 是一个 Const 类型的节点返回 true;反之,返回 false。

示例:

import std.ast.*

main(): Unit {
    let funcDecl1 = FuncDecl(quote(func foo() { println("Hello") }))
    let funcDecl2 = FuncDecl(quote(const func bar() { println("World") }))
    
    println("funcDecl1.isConst(): ${funcDecl1.isConst()}")
    println("funcDecl2.isConst(): ${funcDecl2.isConst()}")
}

运行结果:

funcDecl1.isConst(): false
funcDecl2.isConst(): true

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*
import std.collection.*

main(): Unit {
    // 构造一个默认的 FuncDecl 对象
    let funcDecl = FuncDecl()
    
    // 设置 FuncDecl 的属性
    funcDecl.keyword = Token(TokenKind.FUNC, "func")
    funcDecl.identifier = Token(TokenKind.IDENTIFIER, "foo")
    funcDecl.lParen = Token(TokenKind.LPAREN, "(")
    funcDecl.rParen = Token(TokenKind.RPAREN, ")")
    funcDecl.colon = Token(TokenKind.COLON, ":")
    funcDecl.declType = PrimitiveType(quote(Int64))
    
    // 创建函数参数
    let param = FuncParam(quote(x: Int64))
    
    funcDecl.funcParams = ArrayList<FuncParam>([param])
    
    // 创建函数体
    let block = Block()
    block.lBrace = Token(TokenKind.LCURL, "{")
    block.rBrace = Token(TokenKind.RCURL, "}")
    let expr = BinaryExpr(quote(x + 1))
    block.nodes.add(expr)
    funcDecl.block = block
    
    // 转化为 Tokens 并输出
    println("funcDecl.toTokens(): ${funcDecl.toTokens()}")
}

运行结果:

funcDecl.toTokens(): func foo(x: Int64): Int64 {
    x + 1
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: FuncDecl) {
        println("Visiting FuncDecl")
    }
}

main(): Unit {
    // 从 Tokens 创建 FuncDecl 对象
    let funcDecl = FuncDecl(quote(func foo() { println("Hello") }))
    
    // 使用自定义访问器遍历 FuncDecl 节点
    funcDecl.traverse(MyVisitor())
}

运行结果:

Visiting FuncDecl

class FuncParam

public open class FuncParam <: Decl {
    public init(inputs: Tokens)
    public init()
}

功能:表示函数参数节点,包括非命名参数和命名参数。

一个 FuncParam 节点: func foo(a: Int64, b: Float64) {...} 中的 a: Int64b: Float64

父类型:

prop assign

public mut prop assign: Token

功能:获取或设置具有默认值的函数参数中的 =

类型:Token

异常:

prop colon

public mut prop colon: Token

功能:获取或设置置形参中的 ":"。

类型:Token

异常:

prop expr

public mut prop expr: Expr

功能:获取或设置具有默认值的函数参数的变量初始化节点。

类型:Expr

异常:

  • ASTException - 当函数参数没有进行初始化时,抛出异常。

prop not

public mut prop not: Token

功能:获取或设置命名形参中的 !

类型:Token

异常:

prop paramType

public mut prop paramType: TypeNode

功能:获取或设置函数参数的类型。

类型:TypeNode

init()

public init()

功能:构造一个默认的 FuncParam 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 FuncParam 对象
    let funcParam = FuncParam()
    
    // 设置 FuncParam 的属性
    funcParam.identifier = Token(TokenKind.IDENTIFIER, "b")
    funcParam.colon = Token(TokenKind.COLON, ":")
    funcParam.paramType = PrimitiveType(quote(Float32))
    funcParam.assign = Token(TokenKind.ASSIGN, "=")
    funcParam.expr = RefExpr(quote(defaultValue))
    
    // 转化为 Tokens 并输出
    println("funcParam.toTokens(): ${funcParam.toTokens()}")
}

运行结果:

funcParam.toTokens(): b: Float32 = defaultValue

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 FuncParam 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 FuncParam 对象
    let funcParam = FuncParam(quote(a: Int64))
    
    println("funcParam.toTokens(): ${funcParam.toTokens()}")
}

运行结果:

funcParam.toTokens(): a: Int64

func dump(UInt16)

protected open func dump(indent: UInt16): String

功能:将当前语法树节点转化为树形结构的形态并进行打印。

参数:

  • indent: UInt16 - 格式化输出的缩进空格数量。

返回值:

  • String - 格式化输出内容。

示例:

import std.ast.*

// 在子类中调用
class MyParam <: FuncParam {
    public init(input: Tokens) { super(input) }
    public func myDump(): String {
        dump(1)
    }
}

main(): Unit {
    // 创建 FuncParam 的子类
    let param = MyParam(quote(a: Int64))

    println("param.myDump(): ${param.myDump()}")
}

运行结果:

param.myDump(): FuncParam {
    -identifier: Token {
      value: "a"
      kind: IDENTIFIER
      pos: 13: 31
    }
    -colon: Token {
      value: ":"
      kind: COLON
      pos: 13: 32
    }
    -paramType: PrimitiveType {
      -keyword: Token {
        value: "Int64"
        kind: INT64
        pos: 13: 34
      }
    }
  }

func isMemberParam()

public func isMemberParam(): Bool

功能:当前的函数参数是否是主构造函数中的参数。

返回值:

  • Bool - 布尔类型,如果是主构造函数中的参数,返回 true

示例:

import std.ast.*

main(): Unit {
    // 使用 Tokens 构造主构造函数节点
    let decl = PrimaryCtorDecl(quote(MyParam(a: Int64, let v: Int64) {}))

    println("decl.funcParams[0].isMemberParam(): ${decl.funcParams[0].isMemberParam()}")
    println("decl.funcParams[1].isMemberParam(): ${decl.funcParams[1].isMemberParam()}")
}

运行结果:

decl.funcParams[0].isMemberParam(): false
decl.funcParams[1].isMemberParam(): true

func toTokens()

public open func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 FuncParam 对象
    let funcParam = FuncParam()
    
    // 设置 FuncParam 的属性
    funcParam.identifier = Token(TokenKind.IDENTIFIER, "b")
    funcParam.colon = Token(TokenKind.COLON, ":")
    funcParam.paramType = PrimitiveType(quote(Float32))
    funcParam.assign = Token(TokenKind.ASSIGN, "=")
    funcParam.expr = RefExpr(quote(defaultValue))
    
    // 转化为 Tokens 并输出
    println("funcParam.toTokens(): ${funcParam.toTokens()}")
}

运行结果:

funcParam.toTokens(): b: Float32 = defaultValue

func traverse(Visitor)

public open func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: FuncParam) {
        println("Visiting FuncParam")
    }
}

main(): Unit {
    // 从 Tokens 创建 FuncParam 对象
    let funcParam = FuncParam(quote(b!: Float64))
    
    // 使用自定义访问器遍历 FuncParam 节点
    funcParam.traverse(MyVisitor())
}

运行结果:

Visiting FuncParam

class FuncType

public class FuncType <: TypeNode {
    public init(inputs: Tokens)
    public init()
}

功能:表示函数类型节点。

由函数的参数类型和返回类型组成,参数类型与返回类型之间用 -> 分隔,如:(Int32) -> Unit

父类型:

prop arrow

public mut prop arrow: Token

功能:获取或设置 FuncType 节点参数类型与返回类型之间的 ->的词法单元。

类型:Token

异常:

prop commas

public mut prop commas: Tokens

功能:获取或设置 FuncType 节点中的 "," 词法单元序列,可能为空。

类型:Tokens

异常:

prop keyword

public mut prop keyword: Token

功能:获取或设置 FuncType 节点的中的关键字 CFunc 的词法单元,若不是一个 CFunc 类型,则获取一个 ILLEGAL 的词法单元。

类型:Token

prop lParen

public mut prop lParen: Token

功能:获取或设置 FuncType 节点的 "(" 的词法单元。

类型:Token

异常:

prop rParen

public mut prop rParen: Token

功能:获取或设置 FuncType 节点的 ")" 的词法单元。

类型:Token

异常:

prop returnType

public mut prop returnType: TypeNode

功能:获取或设置 FuncType 返回类型节点。

类型:TypeNode

prop types

public mut prop types: ArrayList<TypeNode>

功能:获取或设置 FuncType 节点中函数的参数类型列表。

类型:ArrayList<TypeNode>

init()

public init()

功能:构造一个默认的 FuncType 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 FuncType 对象
    let funcType = FuncType()
    
    // 设置 FuncType 的属性
    funcType.lParen = Token(TokenKind.LPAREN, "(")
    funcType.rParen = Token(TokenKind.RPAREN, ")")
    funcType.arrow = Token(TokenKind.ARROW, "->")
    
    // 设置参数类型
    let paramTypes = ArrayList<TypeNode>()
    funcType.types = paramTypes
    
    // 设置返回类型
    funcType.returnType = RefType(quote(String))
    
    // 转化为 Tokens 并输出
    println("funcType.toTokens(): ${funcType.toTokens()}")
}

运行结果:

funcType.toTokens(): () -> String

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 FuncType 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 FuncType 对象
    let funcType = FuncType(quote((Int32, Float64) -> String))
    
    // 转化为 Tokens 并输出
    println("funcType.toTokens(): ${funcType.toTokens()}")
}

运行结果:

funcType.toTokens(): (Int32, Float64) -> String

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*
import std.collection.*

main(): Unit {
    // 构造一个默认的 FuncType 对象
    let funcType = FuncType()
    
    // 设置 FuncType 的属性
    funcType.lParen = Token(TokenKind.LPAREN, "(")
    funcType.rParen = Token(TokenKind.RPAREN, ")")
    funcType.arrow = Token(TokenKind.ARROW, "->")
    
    // 设置参数类型
    let paramTypes = ArrayList<TypeNode>()
    paramTypes.add(PrimitiveType(quote(Int64)))
    paramTypes.add(PrimitiveType(quote(Bool)))
    funcType.types = paramTypes
    
    // 设置返回类型
    funcType.returnType = RefType(quote(String))
    
    // 转化为 Tokens 并输出
    println("funcType.toTokens(): ${funcType.toTokens()}")
}

运行结果:

funcType.toTokens(): (Int64, Bool) -> String

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: FuncType) {
        println("Visiting FuncType")
    }
}

main(): Unit {
    // 从 Tokens 创建 FuncType 对象
    let funcType = FuncType(quote((Int32) -> Unit))
    
    // 使用自定义访问器遍历 FuncType 节点
    funcType.traverse(MyVisitor())
}

运行结果:

Visiting FuncType

class GenericConstraint

public class GenericConstraint <: Node {
    public init()
}

功能:表示一个泛型约束节点。

一个 GenericConstraint 节点:interface Enumerable<U> where U <: Bounded {} 中的 where U <: Bounded

说明:

通过 where 之后的 <: 运算符来声明,由一个下界与一个上界来组成。其中 <: 左边称为约束的下界,下界只能为类型变元。<: 右边称为约束上界,约束上界可以为类型。

父类型:

prop bitAnds

public mut prop bitAnds: Tokens

功能:获取或设置 GenericConstraint 节点中的 & 操作符的词法单元序列,可能为空。

类型:Tokens

异常:

prop keyword

public mut prop keyword: Token

功能:获取或设置 GenericConstraint 节点中关键字 where 词法单元,可能为 ILLEGAL 的词法单元。

类型:Token

异常:

prop typeArgument

public mut prop typeArgument: TypeNode

功能:获取或设置 GenericConstraint 节点中的约束下界。

类型:TypeNode

prop upperBound

public mut prop upperBound: Token

功能:获取或设置 GenericConstraint 节点中的 <: 运算符。

类型:Token

异常:

prop upperBounds

public mut prop upperBounds: ArrayList<TypeNode>

功能:获取或设置 GenericConstraint 节点约束上界的 TypeNode 类型节点的集合。

类型:ArrayList<TypeNode>

init()

public init()

功能:构造一个默认的 GenericConstraint 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 GenericConstraint 对象
    let genericConstraint = GenericConstraint()
    
    // 设置 GenericConstraint 的属性
    genericConstraint.keyword = Token(TokenKind.WHERE, "where")
    genericConstraint.typeArgument = RefType(quote(U))
    genericConstraint.upperBound = Token(TokenKind.UPPERBOUND, "<:")
    
    let upperBounds = ArrayList<TypeNode>()
    upperBounds.add(RefType(quote(Bound)))
    genericConstraint.upperBounds = upperBounds
    
    // 转化为 Tokens 并输出
    println("genericConstraint.toTokens(): ${genericConstraint.toTokens()}")
}

运行结果:

genericConstraint.toTokens(): where U <: Bound

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*
import std.collection.*

main(): Unit {
    // 构造一个默认的 GenericConstraint 对象
    let genericConstraint = GenericConstraint()
    
    // 设置 GenericConstraint 的属性
    genericConstraint.keyword = Token(TokenKind.WHERE, "where")
    genericConstraint.typeArgument = RefType(quote(U))
    genericConstraint.upperBound = Token(TokenKind.UPPERBOUND, "<:")
    
    let upperBounds = ArrayList<TypeNode>()
    upperBounds.add(RefType(quote(Bound)))
    genericConstraint.upperBounds = upperBounds
    
    // 转化为 Tokens 并输出
    println("genericConstraint.toTokens(): ${genericConstraint.toTokens()}")
}

运行结果:

genericConstraint.toTokens(): where U <: Bound

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: GenericConstraint) {
        println("Visiting GenericConstraint")
    }
}

main(): Unit {
    // 构造一个默认的 GenericConstraint 对象
    let genericConstraint = GenericConstraint()
    
    // 设置 GenericConstraint 的属性
    genericConstraint.keyword = Token(TokenKind.WHERE, "where")
    genericConstraint.typeArgument = RefType(quote(U))
    genericConstraint.upperBound = Token(TokenKind.UPPERBOUND, "<:")
    
    let upperBounds = ArrayList<TypeNode>()
    upperBounds.add(RefType(quote(Bound)))
    genericConstraint.upperBounds = upperBounds
    
    // 使用自定义访问器遍历 GenericConstraint 节点
    genericConstraint.traverse(MyVisitor())
}

运行结果:

Visiting GenericConstraint

class GenericParam

public class GenericParam <: Node {
    public init(parameters: Tokens)
    public init()
}

功能:表示一个类型形参节点。

一个 GenericParam 节点:<T1, T2, T3>

说明:

类型形参用 <> 括起并用 "," 分隔多个类型形参名称。

父类型:

prop lAngle

public mut prop lAngle: Token

功能:获取或设置 GenericParam 节点中的左尖括号词法单元。

类型:Token

异常:

prop parameters

public mut prop parameters: Tokens

功能:获取或设置 GenericParam 节点中的类型形参的 Tokens 类型,可能为空,如 <T1, T2, T3> 中的 T1 T2T3

类型:Tokens

prop rAngle

public mut prop rAngle: Token

功能:获取或设置 GenericParam 节点中的右尖括号词法单元。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 GenericParam 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 GenericParam 对象
    let genericParam = GenericParam()
    
    // 设置 GenericParam 的属性
    genericParam.lAngle = Token(TokenKind.LT, "<")
    genericParam.rAngle = Token(TokenKind.GT, ">")
    genericParam.parameters = quote(A B)
    
    // 转化为 Tokens 并输出
    println("genericParam.toTokens(): ${genericParam.toTokens()}")
}

运行结果:

genericParam.toTokens(): < A, B >

init(Tokens)

public init(parameters: Tokens)

功能:构造一个 GenericParam 对象。

参数:

示例:

import std.ast.*

main(): Unit {
    // 使用 Tokens 构造 GenericParam
    let genericParam = GenericParam(quote(T U V))
    
    // 转化为 Tokens 并输出
    println("genericParam.toTokens(): ${genericParam.toTokens()}")
}

运行结果:

genericParam.toTokens(): < T, U, V >

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 GenericParam 对象
    let genericParam = GenericParam()
    
    // 设置 GenericParam 的属性
    genericParam.lAngle = Token(TokenKind.LT, "<")
    genericParam.rAngle = Token(TokenKind.GT, ">")
    genericParam.parameters = quote(A B)
    
    // 转化为 Tokens 并输出
    println("genericParam.toTokens(): ${genericParam.toTokens()}")
}

运行结果:

genericParam.toTokens(): < A, B >

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: GenericParam) {
        println("Visiting GenericParam")
    }
}

main(): Unit {
    // 使用 Tokens 构造 GenericParam
    let genericParam = GenericParam(quote(T, U))
    
    // 使用自定义访问器遍历 GenericParam 节点
    genericParam.traverse(MyVisitor())
}

运行结果:

Visiting GenericParam

class Handler

public class Handler {
}

功能:表示一个 handle 子句,其中包含一个命令模式和要执行的代码块。

一个 Handler 节点的示例: handle (e: Command<Unit>) { ... }

class IfExpr

public class IfExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示条件表达式。

可以根据判定条件是否成立来决定执行哪条代码分支。一个 IfExpr 节点中 if 是关键字,if 之后是一个小括号,小括号内可以是一个表达式或者一个 let 声明的解构匹配,接着是一个 BlockBlock 之后是可选的 else 分支。 else 分支以 else 关键字开始,后接新的 if 表达式或一个 Block

父类型:

prop condition

public mut prop condition: Expr

功能:获取或设置 IfExpr 节点中的 if 后的条件表达式。

类型:Expr

prop elseExpr

public mut prop elseExpr: Expr

功能:获取或设置 IfExpr 节点中 else 分支节点。

类型:Expr

异常:

prop ifBlock

public mut prop ifBlock: Block

功能:获取或设置 IfExpr 节点中的 if 后的 block 节点。

类型:Block

prop keywordE

public mut prop keywordE: Token

功能:获取或设置 IfExpr 节点中 else 关键字。

类型:Token

异常:

prop keywordI

public mut prop keywordI: Token

功能:获取或设置 IfExpr 节点中的 if 关键字。

类型:Token

异常:

prop lParen

public mut prop lParen: Token

功能:获取或设置 IfExpr 节点中的 if 后的 "("。

类型:Token

异常:

prop rParen

public mut prop rParen: Token

功能:获取或设置 IfExpr 节点中的 if 后的 ")"。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 IfExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 IfExpr 对象
    let ifExpr = IfExpr()
    
    // 设置 IfExpr 的属性
    ifExpr.keywordI = Token(TokenKind.IF, "if")
    ifExpr.lParen = Token(TokenKind.LPAREN, "(")
    ifExpr.rParen = Token(TokenKind.RPAREN, ")")
    ifExpr.condition = RefExpr(quote(cond))
    
    // 创建 if 块
    let ifBlock = Block()
    ifBlock.lBrace = Token(TokenKind.LCURL, "{")
    ifBlock.rBrace = Token(TokenKind.RCURL, "}")
    let expr1 = LitConstExpr(quote(1))
    ifBlock.nodes.add(expr1)
    ifExpr.ifBlock = ifBlock
    
    // 转化为 Tokens 并输出
    println("ifExpr.toTokens(): ${ifExpr.toTokens()}")
}

运行结果:

ifExpr.toTokens(): if(cond) {
    1
}

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 IfExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 使用 Tokens 构造 IfExpr
    let ifExpr = IfExpr(quote(if (x > 0) { println("Positive") } else { println("Negative") }))
    
    // 转化为 Tokens 并输出
    println("ifExpr.toTokens(): ${ifExpr.toTokens()}")
}

运行结果:

ifExpr.toTokens(): if(x > 0) {
    println("Positive")
}
else {
    println("Negative")
}

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 IfExpr 对象
    let ifExpr = IfExpr()
    
    // 设置 IfExpr 的属性
    ifExpr.keywordI = Token(TokenKind.IF, "if")
    ifExpr.lParen = Token(TokenKind.LPAREN, "(")
    ifExpr.rParen = Token(TokenKind.RPAREN, ")")
    ifExpr.condition = RefExpr(quote(condition))
    
    // 创建 if 块
    let ifBlock = Block()
    ifBlock.lBrace = Token(TokenKind.LCURL, "{")
    ifBlock.rBrace = Token(TokenKind.RCURL, "}")
    let expr1 = CallExpr(quote(println("Condition is true")))
    ifBlock.nodes.add(expr1)
    ifExpr.ifBlock = ifBlock
    
    // 转化为 Tokens 并输出
    println("ifExpr.toTokens(): ${ifExpr.toTokens()}")
}

运行结果:

ifExpr.toTokens(): if(condition) {
    println("Condition is true")
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: IfExpr) {
        println("Visiting IfExpr")
    }
}

main(): Unit {
    // 使用 Tokens 构造 IfExpr
    let ifExpr = IfExpr(quote(if (a < b) { println(a) } else { println(b) }))
    
    // 使用自定义访问器遍历 IfExpr 节点
    ifExpr.traverse(MyVisitor())
}

运行结果:

Visiting IfExpr

class ImportContent

public class ImportContent <: Node {
    public init()
}

功能:表示一个包导入声明节点的具体声明内容,如 import pkg.a.b 中的 pkg.a.b

父类型:

prop commas

public mut prop commas: Tokens

功能:获取或设置 ImportContent 节点中的 "," 词法单元序列,只有 importKindImportKind.Multi 时非空。

类型:Tokens

异常:

prop identifier

public mut prop identifier: Token

功能:获取或设置 ImportContent 节点中被导入的项,它可能是包中的顶层定义或声明,也可能是子包的名字。

类型:Token

prop importAlias

public mut prop importAlias: Tokens

功能:获取或设置 ImportContent 节点中导入的定义或声明的别名词法单元序列,只有 importKindImportKind.Alias 时非空。如:import packageName.xxx as yyy 中的 as yyy

类型:Tokens

prop importKind

public mut prop importKind: ImportKind

功能:获取或设置 ImportContent 节点中导入类型。

类型:ImportKind

prop items

public mut prop items: ArrayList<ImportContent>

功能:获取或设置 ImportContent 节点中被导入的所有项,只有 importKindImportKind.Multi 时非空。

类型:ArrayList<ImportContent>

prop lBrace

public mut prop lBrace: Token

功能:获取或设置 ImportContent 节点中的 { 操作符词法单元,只有 importKindImportKind.Multi 时非空。

类型:Token

异常:

prop orgName

public mut prop orgName: Token

功能:获取或设置 ImportContent 节点中代表组织名的词法单元,setter会检查orgSeparator是否为 "::" 词法单元,若为空则同时设置其为 "::" 词法单元。

类型:Token

异常:

prop orgSeparator

public mut prop orgSeparator: Token

功能:获取或设置 ImportContent 节点中的 "::" 词法单元,setter会检查orgName内容是否为空字符串,若有则抛异常。

类型:Token

异常:

  • ASTException - 当设置的 Token 不是 "::" 时,或orgName内容为空字符串时抛出异常。

prop prefixPaths

public mut prop prefixPaths: Tokens

功能:获取或设置 ImportContent 节点中完整包名的前缀部分的词法单元序列,可能为空。如 import a.b.c 中的 ab

类型:Tokens

prop prefixDots

public mut prop prefixDots: Tokens

功能:获取或设置 ImportContent 节点中完整包名中用于分隔每层子包的词法单元序列,可能为空。如 import a.b.c 中的两个 "."。

类型:Tokens

异常:

prop rBrace

public mut prop rBrace: Token

功能:获取或设置 ImportContent 节点中的 } 操作符词法单元,只有 importKindImportKind.Multi 时非空。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 ImportContent 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 ImportContent 对象
    let importContent = ImportContent()

    // 设置 ImportContent 的属性
    importContent.importKind = ImportKind.Single
    importContent.prefixPaths = quote(std collection)
    importContent.prefixDots = quote(. .)
    importContent.identifier = Token(TokenKind.IDENTIFIER, "ArrayList")
    
    // 转化为 Tokens 并输出
    println("importContent.toTokens(): ${importContent.toTokens()}")
}

运行结果:

importContent.toTokens(): std.collection.ArrayList

func isImportAlias()

public func isImportAlias(): Bool

功能:判断 ImportContent 节点是否对导入项取了别名。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个别名导入的 ImportContent
    let importContent = ImportContent()
    importContent.importKind = ImportKind.Alias
    importContent.importAlias = quote(as myAlias)
    
    println("importContent.isImportAlias(): ${importContent.isImportAlias()}")
}

运行结果:

importContent.isImportAlias(): true

func isImportAll()

public func isImportAll(): Bool

功能:判断 ImportContent 节点是否为全导入。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个全导入的 ImportContent
    let importContent = ImportContent()
    importContent.importKind = ImportKind.All
    
    println("importContent.isImportAll(): ${importContent.isImportAll()}")
}

运行结果:

importContent.isImportAll(): true

func isImportMulti()

public func isImportMulti(): Bool

功能:判断 ImportContent 节点是否导入了多个顶级定义或声明。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个多导入的 ImportContent
    let importContent = ImportContent()
    importContent.importKind = ImportKind.Multi
    
    println("importContent.isImportMulti(): ${importContent.isImportMulti()}")
}

运行结果:

importContent.isImportMulti(): true

func isImportSingle()

public func isImportSingle(): Bool

功能:判断 ImportContent 节点是否为单导入。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个单导入的 ImportContent
    let importContent = ImportContent()
    importContent.importKind = ImportKind.Single
    
    println("importContent.isImportSingle(): ${importContent.isImportSingle()}")
}

运行结果:

importContent.isImportSingle(): true

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 ImportContent 对象
    let importContent = ImportContent()

    // 设置 ImportContent 的属性
    importContent.importKind = ImportKind.Single
    importContent.orgName = Token(TokenKind.IDENTIFIER, "ORG")
    importContent.orgSeparator = Token(TokenKind.DOUBLE_COLON, "::")
    importContent.prefixPaths = quote(std collection)
    importContent.prefixDots = quote(.)
    importContent.identifier = Token(TokenKind.IDENTIFIER, "ArrayList")
    
    // 转化为 Tokens 并输出
    println("importContent.toTokens(): ${importContent.toTokens()}")
}

运行结果:

importContent.toTokens(): ORG :: std.collection.ArrayList

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ImportContent) {
        println("Visiting ImportContent")
    }
}

main(): Unit {
    // 构造一个默认的 ImportContent 对象
    let importContent = ImportContent()

    // 设置 ImportContent 的属性
    importContent.importKind = ImportKind.Single
    importContent.orgName = Token(TokenKind.IDENTIFIER, "ORG")
    importContent.orgSeparator = Token(TokenKind.DOUBLE_COLON, "::")
    importContent.prefixPaths = quote(std collection)
    importContent.prefixDots = quote(.)
    importContent.identifier = Token(TokenKind.IDENTIFIER, "ArrayList")
    
    // 使用自定义访问器遍历 ImportContent 节点
    importContent.traverse(MyVisitor())
}

运行结果:

Visiting ImportContent

class ImportList

public class ImportList <: Node {
    public init(inputs: Tokens)
    public init()
}

功能:表示包导入节点。

一个 ImportList 节点: import moduleName.packageName.foo as bar

说明:

导入节点以可选的访问性修饰符(public/protected/internal/private)加关键字 import 开头。以 import pkga.pkgb.item 为例,pkga.pkgb 为导入的顶级定义或声明所在的包的名字,item 为导入的顶级定义或声明。

父类型:

prop content

public mut prop content: ImportContent

功能:获取或设置 ImportList 节点中的被导入的具体项。如 import a.b.c 中的 a.b.c 部分。

类型:ImportContent

prop keywordI

public mut prop keywordI: Token

功能:获取或设置 ImportList 节点中的 import 关键字的词法单元,I 为关键字首字母。

类型:Token

prop modifier

public mut prop modifier: Token

功能:获取或设置 ImportList 节点中的修饰符,可能为 ILLEGAL 的词法单元。

类型:Token

init()

public init()

功能:构造一个默认的 ImportList 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 ImportList 对象
    let importList = ImportList()
    
    // 设置 ImportList 的属性
    importList.keywordI = Token(TokenKind.IMPORT, "import")
    
    // 创建并设置 ImportContent
    let importContent = ImportContent()
    importContent.importKind = ImportKind.Single
    importContent.prefixPaths = quote(std collection)
    importContent.prefixDots = quote(.)
    importContent.identifier = Token(TokenKind.IDENTIFIER, "ArrayList")
    
    importList.content = importContent
    
    // 转化为 Tokens 并输出
    println("importList.toTokens(): ${importList.toTokens()}")
}

运行结果:

importList.toTokens(): import std.collection.ArrayList

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 ImportList 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 使用 Tokens 构造 ImportList
    let importList = ImportList(quote(import std.collection.*))
    
    // 转化为 Tokens 并输出
    println("importList.toTokens(): ${importList.toTokens()}")
}

运行结果:

importList.toTokens(): import std.collection.*

func isImportMulti()

public func isImportMulti(): Bool

功能:判断 ImportList 节点是否导入了多个顶级定义或声明。

返回值:

  • Bool - 如果 ImportList 节点导入了多个顶级定义或声明,返回 true;反之,返回 false。

示例:

import std.ast.*

main(): Unit {
    let singleImport = ImportList(quote(import std.ast.RefType))
    let multiImport = ImportList(quote(import std.ast.{RefType, CallExpr}))
    
    println("singleImport.isImportMulti(): ${singleImport.isImportMulti()}")
    println("multiImport.isImportMulti(): ${multiImport.isImportMulti()}")
}

运行结果:

singleImport.isImportMulti(): false
multiImport.isImportMulti(): true

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 ImportList 对象
    let importList = ImportList()
    
    // 设置 ImportList 的属性
    importList.keywordI = Token(TokenKind.IMPORT, "import")
    
    // 创建并设置 ImportContent
    let importContent = ImportContent()
    importContent.importKind = ImportKind.Single
    importContent.prefixPaths = quote(std collection)
    importContent.prefixDots = quote(.)
    importContent.identifier = Token(TokenKind.IDENTIFIER, "ArrayList")
    importList.content = importContent
    
    // 转化为 Tokens 并输出
    println("importList.toTokens(): ${importList.toTokens()}")
}

运行结果:

importList.toTokens(): import std.collection.ArrayList

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ImportList) {
        println("Visiting ImportList")
    }
}

main(): Unit {
    // 用 Tokens 创建 ImportList
    let importList = ImportList(quote(import std.ast.RefType as RT))
    
    // 使用自定义访问器遍历 ImportList 节点
    importList.traverse(MyVisitor())
}

运行结果:

Visiting ImportList

class IncOrDecExpr

public class IncOrDecExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示包含自增操作符(++)或自减操作符(--)的表达式。

父类型:

prop expr

public mut prop expr: Expr

功能:获取或设置 IncOrDecExpr 中的表达式。

类型:Expr

prop op

public mut prop op: Token

功能:获取或设置 IncOrDecExpr 中的操作符。

类型:Token

init()

public init()

功能:构造一个默认的 IncOrDecExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 IncOrDecExpr 对象
    let incOrDecExpr = IncOrDecExpr()
    
    // 设置 IncOrDecExpr 的属性
    incOrDecExpr.expr = RefExpr(quote(counter))
    incOrDecExpr.op = Token(TokenKind.DECR, "--")
    
    // 转化为 Tokens 并输出
    println("incOrDecExpr.toTokens(): ${incOrDecExpr.toTokens()}")
}

运行结果:

incOrDecExpr.toTokens(): counter --

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 IncOrDecExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 使用 Tokens 构造 IncOrDecExpr
    let incExpr = IncOrDecExpr(quote(x++))

    // 转化为 Tokens 并输出
    println("incExpr.toTokens(): ${incExpr.toTokens()}")
}

运行结果:

incExpr.toTokens(): x ++

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 IncOrDecExpr 对象
    let incOrDecExpr = IncOrDecExpr()
    
    // 设置 IncOrDecExpr 的属性
    incOrDecExpr.expr = RefExpr(quote(counter))
    incOrDecExpr.op = Token(TokenKind.INCR, "++")
    
    // 转化为 Tokens 并输出
    println("incOrDecExpr.toTokens(): ${incOrDecExpr.toTokens()}")
}

运行结果:

incOrDecExpr.toTokens(): counter ++

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: IncOrDecExpr) {
        println("Visiting IncOrDecExpr")
    }
}

main(): Unit {
    // 使用 Tokens 构造 IncOrDecExpr
    let incOrDecExpr = IncOrDecExpr(quote(x--))
    
    // 使用自定义访问器遍历 IncOrDecExpr 节点
    incOrDecExpr.traverse(MyVisitor())
}

运行结果:

Visiting IncOrDecExpr

class InterfaceDecl

public class InterfaceDecl <: Decl {
    public init(inputs: Tokens)
    public init()
}

功能:表示接口定义节点。

接口的定义使用 interface 关键字,接口定义依次为:可缺省的修饰符、interface 关键字、接口名、可选的类型参数、是否指定父接口、可选的泛型约束、接口体的定义。

父类型:

prop body

public mut prop body: Body

功能:获取或设置 InterfaceDecl 节点的类体。

类型:Body

prop superTypeBitAnds

public mut prop superTypeBitAnds: Tokens

功能:获取或设置 InterfaceDecl 节点的父接口声明中的 & 操作符的词法单元序列,可能为空。

类型:Tokens

异常:

prop superTypes

public mut prop superTypes: ArrayList<TypeNode>

功能:获取或设置 InterfaceDecl 节点的父接口。

类型:ArrayList<TypeNode>

prop upperBound

public mut prop upperBound: Token

功能:获取或设置 <: 操作符。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 InterfaceDecl 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 InterfaceDecl 对象
    let interfaceDecl = InterfaceDecl()
    
    // 设置 InterfaceDecl 的属性
    interfaceDecl.identifier = Token(TokenKind.IDENTIFIER, "Shape")
    interfaceDecl.keyword = Token(TokenKind.INTERFACE, "interface")
    
    // 创建并设置 body
    let body = Body()
    let funcDecl = FuncDecl(quote(func area(): Float64))
    body.decls.add(funcDecl)
    interfaceDecl.body = body
    
    // 转化为 Tokens 并输出
    println("interfaceDecl.toTokens(): ${interfaceDecl.toTokens()}")
}

运行结果:

interfaceDecl.toTokens(): interface Shape {
    func area(): Float64
}

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 InterfaceDecl 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 使用 Tokens 构造 InterfaceDecl
    let interfaceDecl = InterfaceDecl(quote(interface MyInterface { func foo(): Int64 }))
    
    // 转化为 Tokens 并输出
    println("interfaceDecl.toTokens(): ${interfaceDecl.toTokens()}")
}

运行结果:

interfaceDecl.toTokens(): interface MyInterface {
    func foo(): Int64
}

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 InterfaceDecl 对象
    let interfaceDecl = InterfaceDecl()
    
    // 设置 InterfaceDecl 的属性
    interfaceDecl.identifier = Token(TokenKind.IDENTIFIER, "Shape")
    interfaceDecl.keyword = Token(TokenKind.INTERFACE, "interface")
    
    // 创建并设置 body
    let body = Body()
    let funcDecl = FuncDecl(quote(func area(): Float64))
    body.decls.add(funcDecl)
    interfaceDecl.body = body
    
    // 转化为 Tokens 并输出
    println("interfaceDecl.toTokens(): ${interfaceDecl.toTokens()}")
}

运行结果:

interfaceDecl.toTokens(): interface Shape {
    func area(): Float64
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: InterfaceDecl) {
        println("Visiting InterfaceDecl")
    }
}

main(): Unit {
    // 使用 Tokens 构造 InterfaceDecl
    let interfaceDecl = InterfaceDecl(quote(interface MyInterface { func foo(): Int64 }))
    
    // 使用自定义访问器遍历 InterfaceDecl 节点
    interfaceDecl.traverse(MyVisitor())
}

运行结果:

Visiting InterfaceDecl

class IsExpr

public class IsExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示一个类型检查表达式。

一个 IsExpr 表达式:e is T,类型为 Bool。其中 e 可以是任何类型的表达式,T 可以是任何类型。

父类型:

prop expr

public mut prop expr: Expr

功能:获取或设置 IsExpr 节点中的表达式节点。

类型:Expr

prop keyword

public mut prop keyword: Token

功能:获取或设置 IsExpr 节点中的 is 操作符。

类型:Token

异常:

prop shiftType

public mut prop shiftType: TypeNode

功能:获取或设置 IsExpr 节点中的目标类型。

类型:TypeNode

init()

public init()

功能:构造一个默认的 IsExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 IsExpr 对象
    let isExpr = IsExpr()
    
    // 设置 IsExpr 的属性
    isExpr.expr = RefExpr(quote(x))
    isExpr.keyword = Token(TokenKind.IS)
    isExpr.shiftType = PrimitiveType(quote(Int8))
    
    // 转化为 Tokens 并输出
    println("isExpr.toTokens(): ${isExpr.toTokens()}")
}

运行结果:

isExpr.toTokens(): x is Int8

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 IsExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 IsExpr 对象
    let isExpr = IsExpr(quote(x is String))
    
    // 转化为 Tokens 并输出
    println("isExpr.toTokens(): ${isExpr.toTokens()}")
}

运行结果:

isExpr.toTokens(): x is String

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 IsExpr 对象
    let isExpr = IsExpr(quote(x is String))
    
    // 转化为 Tokens 并输出
    println("isExpr.toTokens(): ${isExpr.toTokens()}")
}

运行结果:

isExpr.toTokens(): x is String

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: IsExpr) {
        println("Visiting IsExpr")
    }
}

main(): Unit {
    // 从 Tokens 创建 IsExpr 对象
    let isExpr = IsExpr(quote(x is String))
    
    // 使用自定义访问器遍历 IsExpr 节点
    isExpr.traverse(MyVisitor())
}

运行结果:

Visiting IsExpr

class JumpExpr

public class JumpExpr <: Expr {
    public init(kind: Tokens)
    public init()
}

功能:表示循环表达式的循环体中的 breakcontinue

父类型:

prop keyword

public mut prop keyword: Token

功能:获取或设置关键字。

类型:Token

init()

public init()

功能:构造一个默认的 JumpExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 JumpExpr 对象
    let jumpExpr = JumpExpr()
    
    // 设置 JumpExpr 的属性
    jumpExpr.keyword = Token(TokenKind.BREAK)
    
    // 转化为 Tokens 并输出
    println("jumpExpr.toTokens(): ${jumpExpr.toTokens()}")
}

运行结果:

jumpExpr.toTokens(): break

init(Tokens)

public init(kind: Tokens)

功能:构造一个 JumpExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 JumpExpr 对象
    let jumpExpr = JumpExpr(quote(break))
    
    // 转化为 Tokens 并输出
    println("jumpExpr.toTokens(): ${jumpExpr.toTokens()}")
}

运行结果:

jumpExpr.toTokens(): break

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 JumpExpr 对象
    let jumpExpr = JumpExpr(quote(break))
    
    // 转化为 Tokens 并输出
    println("jumpExpr.toTokens(): ${jumpExpr.toTokens()}")
}

运行结果:

jumpExpr.toTokens(): break

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: JumpExpr) {
        println("Visiting JumpExpr")
    }
}

main(): Unit {
    // 从 Tokens 创建 JumpExpr 对象
    let jumpExpr = JumpExpr(quote(break))
    
    // 使用自定义访问器遍历 JumpExpr 节点
    jumpExpr.traverse(MyVisitor())
}

运行结果:

Visiting JumpExpr

class LambdaExpr

public class LambdaExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示 Lambda 表达式,是一个匿名的函数。

一个 LambdaExpr 节点有两种形式,一种是有形参的,例如 {a: Int64 => e1; e2 },另一种是无形参的,例如 { => e1; e2 }

父类型:

prop doubleArrow

public mut prop doubleArrow: Token

功能:获取或设置 LambdaExpr 中的 =>

类型:Token

异常:

prop funcParams

public mut prop funcParams:  ArrayList<FuncParam>

功能:获取或设置 LambdaExpr 中的参数列表。

类型:ArrayList<FuncParam>

prop lBrace

public mut prop lBrace: Token

功能:获取或设置 LambdaExpr 中的 "{"。

类型:Token

异常:

prop nodes

public mut prop nodes: ArrayList<Node>

功能:获取或设置 LambdaExpr 中的表达式或声明节点。

类型:ArrayList<Node>

prop rBrace

public mut prop rBrace: Token

功能:获取或设置 LambdaExpr 中的 "}"。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 LambdaExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 LambdaExpr 对象
    let lambdaExpr = LambdaExpr()
    
    // 设置 LambdaExpr 的属性
    lambdaExpr.lBrace = Token(TokenKind.LCURL)
    lambdaExpr.rBrace = Token(TokenKind.RCURL)
    lambdaExpr.doubleArrow = Token(TokenKind.DOUBLE_ARROW)
    let funcParams = ArrayList<FuncParam>()
    funcParams.add(FuncParam(quote(x: Int64)))
    lambdaExpr.funcParams = funcParams
    let nodes = ArrayList<Node>()
    nodes.add(BinaryExpr(quote(x + 1)))
    lambdaExpr.nodes = nodes
    
    // 转化为 Tokens 并输出
    println("lambdaExpr.toTokens(): ${lambdaExpr.toTokens()}")
}

运行结果:

lambdaExpr.toTokens(): { x: Int64 =>
    x + 1
}

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 LambdaExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 LambdaExpr 对象
    let lambdaExpr = LambdaExpr(quote({x: Int64 => x + 1}))
    
    // 转化为 Tokens 并输出
    println("lambdaExpr.toTokens(): ${lambdaExpr.toTokens()}")
}

运行结果:

lambdaExpr.toTokens(): { x: Int64 =>
    x + 1
}

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 LambdaExpr 对象
    let lambdaExpr = LambdaExpr(quote({x: Int64 => x + 1}))
    
    // 转化为 Tokens 并输出
    println("lambdaExpr.toTokens(): ${lambdaExpr.toTokens()}")
}

运行结果:

lambdaExpr.toTokens(): { x: Int64 =>
    x + 1
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: LambdaExpr) {
        println("Visiting LambdaExpr")
    }
}

main(): Unit {
    // 从 Tokens 创建 LambdaExpr 对象
    let lambdaExpr = LambdaExpr(quote({x: Int64 => x + 1}))
    
    // 使用自定义访问器遍历 LambdaExpr 节点
    lambdaExpr.traverse(MyVisitor())
}

运行结果:

Visiting LambdaExpr

class LetPatternExpr

public class LetPatternExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示 let 声明的解构匹配节点。

一个 LetPatternExpr 节点:if (let Some(v) <- x) 中的 let Some(v) <- x

父类型:

prop backArrow

public mut prop backArrow: Token

功能:获取或设置 LetPatternExpr 节点中 <- 操作符。

类型:Token

异常:

prop expr

public mut prop expr: Expr

功能:获取或设置 LetPatternExpr 节点中 <- 操作符之后的表达式。

类型:Expr

prop keyword

public mut prop keyword: Token

功能:获取或设置 LetPatternExpr 节点中 let 关键字。

类型:Token

异常:

prop pattern

public mut prop pattern: Pattern

功能:获取或设置 LetPatternExpr 节点中 let 之后的 pattern。

类型:Pattern

init()

public init()

功能:构造一个默认的 LetPatternExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 LetPatternExpr 对象
    let letPatternExpr = LetPatternExpr()
    
    // 设置 LetPatternExpr 的属性
    letPatternExpr.keyword = Token(TokenKind.LET)
    letPatternExpr.pattern = EnumPattern(quote(Some(v)))
    letPatternExpr.backArrow = Token(TokenKind.BACKARROW)
    letPatternExpr.expr = RefExpr(quote(x))
    
    // 转化为 Tokens 并输出
    println("letPatternExpr.toTokens(): ${letPatternExpr.toTokens()}")
}

运行结果:

letPatternExpr.toTokens(): let Some(v) <- x

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 LetPatternExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 LetPatternExpr 对象
    let letPatternExpr = LetPatternExpr(quote(let Some(v) <- x))
    
    // 转化为 Tokens 并输出
    println("letPatternExpr.toTokens(): ${letPatternExpr.toTokens()}")
}

运行结果:

letPatternExpr.toTokens(): let Some(v) <- x

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 LetPatternExpr 对象
    let letPatternExpr = LetPatternExpr(quote(let Some(v) <- x))
    
    // 转化为 Tokens 并输出
    println("letPatternExpr.toTokens(): ${letPatternExpr.toTokens()}")
}

运行结果:

letPatternExpr.toTokens(): let Some(v) <- x

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: LetPatternExpr) {
        println("Visiting LetPatternExpr")
    }
}

main(): Unit {
    // 从 Tokens 创建 LetPatternExpr 对象
    let letPatternExpr = LetPatternExpr(quote(let Some(v) <- x))
    
    // 使用自定义访问器遍历 LetPatternExpr 节点
    letPatternExpr.traverse(MyVisitor())
}

运行结果:

Visiting LetPatternExpr

class LitConstExpr

public class LitConstExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示一个常量表达式节点。

一个 LitConstExpr 表达式:"abc"123 等。

父类型:

prop literal

public mut prop literal: Token

功能:获取或设置 LitConstExpr 节点中的字面量。

类型:Token

init()

public init()

功能:构造一个默认的 LitConstExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 LitConstExpr 对象
    let litConstExpr = LitConstExpr()
    
    // 设置 LitConstExpr 的属性
    litConstExpr.literal = Token(TokenKind.INTEGER_LITERAL, "123")
    
    // 转化为 Tokens 并输出
    println("litConstExpr.toTokens(): ${litConstExpr.toTokens()}")
}

运行结果:

litConstExpr.toTokens(): 123

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 LitConstExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 LitConstExpr 对象
    let litConstExpr = LitConstExpr(quote(123))
    
    // 转化为 Tokens 并输出
    println("litConstExpr.toTokens(): ${litConstExpr.toTokens()}")
}

运行结果:

litConstExpr.toTokens(): 123

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 LitConstExpr 对象
    let litConstExpr = LitConstExpr(quote(123))
    
    // 转化为 Tokens 并输出
    println("litConstExpr.toTokens(): ${litConstExpr.toTokens()}")
}

运行结果:

litConstExpr.toTokens(): 123

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: LitConstExpr) {
        println("Visiting LitConstExpr")
    }
}

main(): Unit {
    // 从 Tokens 创建 LitConstExpr 对象
    let litConstExpr = LitConstExpr(quote(123))
    
    // 使用自定义访问器遍历 LitConstExpr 节点
    litConstExpr.traverse(MyVisitor())
}

运行结果:

Visiting LitConstExpr

class MacroDecl

public class MacroDecl <: Decl {
    public init(inputs: Tokens)
    public init()
}

功能:表示一个宏定义节点。

一个 MacroDecl 节点:public macro M(input: Tokens): Tokens {...}

父类型:

prop block

public mut prop block: Block

功能:获取或设置 MacroDecl 节点的函数体。

类型:Block

prop colon

public mut prop colon: Token

功能:获取或设置 MacroDecl 节点的冒号。

类型:Token

异常:

prop declType

public mut prop declType: TypeNode

功能:获取或设置 MacroDecl 节点的函数返回类型。

类型:TypeNode

异常:

prop funcParams

public mut prop funcParams: ArrayList<FuncParam>

功能:获取或设置 MacroDecl 节点的参数。

类型:ArrayList<FuncParam>

prop lParen

public mut prop lParen: Token

功能:获取或设置 MacroDecl 节点的 "("。

类型:Token

异常:

prop rParen

public mut prop rParen: Token

功能:获取或设置 MacroDecl 节点的 ")"。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 MacroDecl 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 MacroDecl 对象
    let macroDecl = MacroDecl()
    
    // 设置 MacroDecl 的属性
    macroDecl.keyword = quote(macro)[0]
    macroDecl.identifier = quote(testMacro)[0]
    macroDecl.lParen = Token(TokenKind.LPAREN)
    let param1 = FuncParam(quote(a: Tokens))
    let param2 = FuncParam(quote(b: Tokens))
    macroDecl.funcParams = ArrayList<FuncParam>([param1, param2])
    macroDecl.rParen = Token(TokenKind.RPAREN)
    macroDecl.colon = Token(TokenKind.COLON)
    macroDecl.declType = RefType(quote(Tokens))
    macroDecl.block = Block()
    
    // 转化为 Tokens 并输出
    println("macroDecl.toTokens(): ${macroDecl.toTokens()}")
}

运行结果:

macroDecl.toTokens(): macro testMacro(a: Tokens, b: Tokens): Tokens

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 MacroDecl 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 MacroDecl 对象
    let macroDecl = MacroDecl(quote(public macro M(input: Tokens): Tokens {}))
    
    // 转化为 Tokens 并输出
    println("macroDecl.toTokens(): ${macroDecl.toTokens()}")
}

运行结果:

macroDecl.toTokens(): public macro M(input: Tokens): Tokens {
}

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 MacroDecl 对象
    let macroDecl = MacroDecl(quote(public macro M(input: Tokens): Tokens {}))
    
    // 转化为 Tokens 并输出
    println("macroDecl.toTokens(): ${macroDecl.toTokens()}")
}

运行结果:

macroDecl.toTokens(): public macro M(input: Tokens): Tokens {
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: MacroDecl) {
        println("Visiting MacroDecl")
    }
}

main(): Unit {
    // 从 Tokens 创建 MacroDecl 对象
    let macroDecl = MacroDecl(quote(public macro M(input: Tokens): Tokens {}))
    
    // 使用自定义访问器遍历 MacroDecl 节点
    macroDecl.traverse(MyVisitor())
}

运行结果:

Visiting MacroDecl

class MacroExpandDecl

public class MacroExpandDecl <: Decl {
    public init(inputs: Tokens)
    public init()
}

功能:表示宏调用节点。

一个 MacroExpandDecl 节点: @M class A {}

父类型:

prop fullIdentifier

public mut prop fullIdentifier: Token

功能:获取或设置宏调用节点的完整标识符,如 @pkg.m class a{} 中的 pkg.m

类型:Token

prop identifier

public override mut prop identifier: Token

功能:该属性继承自 Decl 节点,表示宏调用节点的标识符,如 @pkg.m class a{} 中的 m

类型:Token

prop lParen

public mut prop lParen: Token

功能:获取或设置 MacroExpandDecl 宏调用的 "("。

类型:Token

异常:

prop lSquare

public mut prop lSquare: Token

功能:获取或设置 MacroExpandDecl 属性宏调用的 "["。

类型:Token

异常:

prop macroAttrs

public mut prop macroAttrs: Tokens

功能:获取或设置 MacroExpandDecl 属性宏调用的输入。

类型:Tokens

prop macroInputDecl

public mut prop macroInputDecl: Decl

功能:获取或设置 MacroExpandDecl 中的声明节点。

类型:Decl

异常:

prop macroInputs

public mut prop macroInputs: Tokens

功能:获取或设置 MacroExpandDecl 宏调用的输入。

类型:Tokens

prop rParen

public mut prop rParen: Token

功能:获取或设置 MacroExpandDecl 宏调用的 ")"。

类型:Token

异常:

prop rSquare

public mut prop rSquare: Token

功能:获取或设置 MacroExpandDecl 属性宏调用的 "]"。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 MacroExpandDecl 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 MacroExpandDecl 对象
    let macroExpandDecl = MacroExpandDecl()
    
    // 设置 MacroExpandDecl 的属性
    macroExpandDecl.keyword = quote(@)[0]
    macroExpandDecl.fullIdentifier = quote(testMacro)[0]
    macroExpandDecl.macroAttrs = quote(123)
    macroExpandDecl.lSquare = Token(LSQUARE)
    macroExpandDecl.rSquare = Token(RSQUARE)
    macroExpandDecl.lParen = Token(LPAREN)
    macroExpandDecl.rParen = Token(RPAREN)
    macroExpandDecl.macroInputs = Tokens()
    macroExpandDecl.macroInputDecl = FuncDecl(quote(func test() {}))
    
    // 转化为 Tokens 并输出
    println("macroExpandDecl.toTokens(): ${macroExpandDecl.toTokens()}")
}

运行结果:

macroExpandDecl.toTokens(): @testMacro[123](func test() {
}
)

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 MacroExpandDecl 对象。

参数:

异常:

示例:

import std.ast.*

main() {
    // 从 Tokens 创建 MacroExpandDecl 对象
    let macroExpandDecl = MacroExpandDecl(quote(@M class A {}))
    
    // 转化为 Tokens 并输出
    println("macroExpandDecl.toTokens(): ${macroExpandDecl.toTokens()}")
}

运行结果:

macroExpandDecl.toTokens(): @M
class A {
}

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 MacroExpandDecl 对象
    let macroExpandDecl = MacroExpandDecl(quote(@M class A {}))
    
    // 转化为 Tokens 并输出
    println("macroExpandDecl.toTokens(): ${macroExpandDecl.toTokens()}")
}

运行结果:

macroExpandDecl.toTokens(): @M
class A {
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: MacroExpandDecl) {
        println("Visiting MacroExpandDecl")
    }
}

main() {
    // 从 Tokens 创建 MacroExpandDecl 对象
    let macroExpandDecl = MacroExpandDecl(quote(@M class A {}))
    
    // 使用自定义访问器遍历 MacroExpandDecl 节点
    macroExpandDecl.traverse(MyVisitor())
}

运行结果:

Visiting MacroExpandDecl

class MacroExpandExpr

public class MacroExpandExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示宏调用节点。

一个 MacroExpandExpr 节点: @M (a is Int64)

父类型:

prop at

public mut prop at: Token

功能:获取或设置 MacroExpandExpr 节点中的 @ 操作符。

类型:Token

异常:

prop identifier

public mut prop identifier: Token

功能:获取或设置宏调用节点的标识符。

类型:Token

prop lParen

public mut prop lParen: Token

功能:获取或设置 MacroExpandExpr 宏调用的 "("。

类型:Token

异常:

prop lSquare

public mut prop lSquare: Token

功能:获取或设置 MacroExpandExpr 属性宏调用的 "["。

类型:Token

异常:

prop macroAttrs

public mut prop macroAttrs: Tokens

功能:获取或设置 MacroExpandExpr 属性宏调用的输入。

类型:Tokens

prop macroInputs

public mut prop macroInputs: Tokens

功能:获取或设置 MacroExpandExpr 宏调用的输入。

类型:Tokens

prop rParen

public mut prop rParen: Token

功能:获取或设置 MacroExpandExpr 宏调用的 ")"。

类型:Token

异常:

prop rSquare

public mut prop rSquare: Token

功能:获取或设置 MacroExpandExpr 属性宏调用的 "]"。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 MacroExpandExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 MacroExpandExpr 对象
    let macroExpandExpr = MacroExpandExpr()
    
    // 设置 MacroExpandExpr 的属性
    macroExpandExpr.at = Token(TokenKind.AT)
    macroExpandExpr.identifier = Token(TokenKind.IDENTIFIER, "M")
    macroExpandExpr.lParen = Token(TokenKind.LPAREN)
    macroExpandExpr.rParen = Token(TokenKind.RPAREN)
    macroExpandExpr.lSquare = Token(TokenKind.LSQUARE)
    macroExpandExpr.rSquare = Token(TokenKind.RSQUARE)
    macroExpandExpr.macroAttrs = quote(123)
    macroExpandExpr.macroInputs = quote(a is Int64)

    // 转化为 Tokens 并输出
    println("macroExpandExpr.toTokens(): ${macroExpandExpr.toTokens()}")
}

运行结果:

macroExpandExpr.toTokens(): @M[123](a is Int64)

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 MacroExpandExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 MacroExpandExpr 对象
    let macroExpandExpr = MacroExpandExpr(quote(@M (a is Int64)))
    
    // 转化为 Tokens 并输出
    println("macroExpandExpr.toTokens(): ${macroExpandExpr.toTokens()}")
}

运行结果:

macroExpandExpr.toTokens(): @M(a is Int64)

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 MacroExpandExpr 对象
    let macroExpandExpr = MacroExpandExpr(quote(@M (a is Int64)))
    
    // 转化为 Tokens 并输出
    println("macroExpandExpr.toTokens(): ${macroExpandExpr.toTokens()}")
}

运行结果:

macroExpandExpr.toTokens(): @M(a is Int64)

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: MacroExpandExpr) {
        println("Visiting MacroExpandExpr")
    }
}

main(): Unit {
    // 从 Tokens 创建 MacroExpandExpr 对象
    let macroExpandExpr = MacroExpandExpr(quote(@M (a is Int64)))
    
    // 使用自定义访问器遍历 MacroExpandExpr 节点
    macroExpandExpr.traverse(MyVisitor())
}

运行结果:

Visiting MacroExpandExpr

class MacroExpandParam

public class MacroExpandParam <: FuncParam {
    public init()
}

功能:表示宏调用节点。

一个 MacroExpandParam 节点: func foo (@M a: Int64) 中的 @M a: Int64

父类型:

prop fullIdentifier

public mut prop fullIdentifier: Token

功能:获取或设置宏调用节点的完整标识符,如 func bar (@pkg.m a: Int64) 中的 pkg.m

类型:Token

prop identifier

public override mut prop identifier: Token

功能:该属性继承自 Decl 节点,表示宏调用节点的标识符,如 func bar (@pkg.m a: Int64) 中的 m

类型:Token

prop lParen

public mut prop lParen: Token

功能:获取或设置 MacroExpandParam 宏调用的 "("。

类型:Token

异常:

prop lSquare

public mut prop lSquare: Token

功能:获取或设置 MacroExpandParam 属性宏调用的 "["。

类型:Token

异常:

prop macroAttrs

public mut prop macroAttrs: Tokens

功能:获取或设置 MacroExpandParam 属性宏调用的输入。

类型:Tokens

prop macroInputDecl

public mut prop macroInputDecl: Decl

功能:获取或设置 MacroExpandParam 中的声明节点。

类型:Decl

异常:

prop macroInputs

public mut prop macroInputs: Tokens

功能:获取或设置 MacroExpandParam 宏调用的输入。

类型:Tokens

prop rParen

public mut prop rParen: Token

功能:获取或设置 MacroExpandParam 宏调用的 ")"。

类型:Token

异常:

prop rSquare

public mut prop rSquare: Token

功能:获取或设置 MacroExpandParam 属性宏调用的 "]"。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 MacroExpandParam 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 MacroExpandParam 对象
    let macroExpandParam = MacroExpandParam()
    
    // 设置 MacroExpandParam 的属性
    macroExpandParam.keyword = Token(TokenKind.AT, "@")
    macroExpandParam.fullIdentifier = Token(TokenKind.IDENTIFIER, "M")
    macroExpandParam.identifier = Token(TokenKind.IDENTIFIER, "M")
    macroExpandParam.lSquare = Token(TokenKind.LSQUARE)
    macroExpandParam.rSquare = Token(TokenKind.RSQUARE)
    macroExpandParam.macroAttrs = quote(123)
    macroExpandParam.macroInputs = quote(a: Int64)
    
    // 转化为 Tokens 并输出
    println("macroExpandParam.toTokens(): ${macroExpandParam.toTokens()}")
}

运行结果:

macroExpandParam.toTokens(): @M[123]
a: Int64

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 MacroExpandParam 对象
    let macroExpandParam = MacroExpandParam()
    
    // 设置 MacroExpandParam 的属性
    macroExpandParam.keyword = Token(TokenKind.AT, "@")
    macroExpandParam.fullIdentifier = Token(TokenKind.IDENTIFIER, "M")
    macroExpandParam.identifier = Token(TokenKind.IDENTIFIER, "M")
    macroExpandParam.lSquare = Token(TokenKind.LSQUARE)
    macroExpandParam.rSquare = Token(TokenKind.RSQUARE)
    macroExpandParam.macroAttrs = quote(123)
    macroExpandParam.macroInputs = quote(a: Int64)
    
    // 转化为 Tokens 并输出
    println("macroExpandParam.toTokens(): ${macroExpandParam.toTokens()}")
}

运行结果:

macroExpandParam.toTokens(): @M[123]
a: Int64

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: MacroExpandParam) {
        println("Visiting MacroExpandParam")
    }
}

main(): Unit {
    // 构造一个默认的 MacroExpandParam 对象
    let macroExpandParam = MacroExpandParam()
    
    // 设置 MacroExpandParam 的属性
    macroExpandParam.keyword = Token(TokenKind.AT, "@")
    macroExpandParam.identifier = Token(TokenKind.IDENTIFIER, "M")
    macroExpandParam.macroInputs = quote(any)
    
    // 使用自定义访问器遍历 MacroExpandParam 节点
    macroExpandParam.traverse(MyVisitor())
}

运行结果:

Visiting MacroExpandParam

class MacroMessage

public class MacroMessage {}

功能:记录内层宏发送的信息。

func getBool(String)

public func getBool(key: String): Bool

功能:获取对应 key 值的 Bool 类型信息。

参数:

  • key: String - 用于检索的关键字的名字。

返回值:

  • Bool - 返回存在 key 值对应的 Bool 类型的信息。

异常:

  • Exception - 当不存在 key 值对应的 Bool 类型的信息时,抛出异常。

示例:

// 宏定义
macro package M

import std.ast.*
import std.collection.ArrayList

public macro inner(input: Tokens) {
    // 向外层宏发送 Bool 类型消息
    setItem("TrueFromInner", true)
    setItem("FalseFromInner", false)
    return input
}

public macro outer(input: Tokens) {
    // 获取名为 inner 的内层宏所发送的全部消息
    let messages = getChildMessages("inner")

    // 获取内层宏发送的 Bool 消息
    let msg0 = messages[0].getBool("TrueFromInner")
    let msg1 = messages[0].getBool("FalseFromInner")

    // 输出两个 Bool 类型消息
    println("Message 0 from inner-macro: ${msg0}")
    println("Message 1 from inner-macro: ${msg1}")
    return input
}
// 宏调用
import M.*

@outer(@inner(var a = 1))

main() {
}

运行结果:

Message 0 from inner-macro: true
Message 1 from inner-macro: false

func getInt64(String)

public func getInt64(key: String): Int64

功能:获取对应 key 值的 Int64 类型信息。

参数:

  • key: String - 用于检索的关键字的名字。

返回值:

  • Int64 - 返回存在 key 值对应的 Int64 类型的信息。

异常:

  • Exception - 当不存在 key 值对应的 Int64 类型的信息时,抛出异常。

示例:

// 宏定义
macro package M

import std.ast.*
import std.collection.ArrayList

public macro inner(input: Tokens) {
    // 向外层宏发送 Int64 类型消息
    setItem("Int64FromInner", 100)
    return input
}

public macro outer(input: Tokens) {
    // 获取名为 inner 的内层宏所发送的全部消息
    let messages = getChildMessages("inner")

    // 获取内层宏发送的 Int64 消息
    let msg = messages[0].getInt64("Int64FromInner")

    // 输出 Int64 类型消息
    println("Message from inner-macro: ${msg}")
    return input
}
// 宏调用
import M.*

@outer(@inner(var a = 1))

main() {
}

运行结果:

Message from inner-macro: 100

func getString(String)

public func getString(key: String): String

功能:获取对应 key 值的 String 类型信息。

参数:

  • key: String - 用于检索的关键字的名字。

返回值:

  • String - 返回存在 key 值对应的 String 类型的信息。

异常:

  • Exception - 当不存在 key 值对应的 String 类型的信息时,抛出异常。

示例:

// 宏定义
macro package M

import std.ast.*
import std.collection.ArrayList

public macro inner(input: Tokens) {
    // 向外层宏发送 String 类型消息
    setItem("StringFromInner", "message")
    return input
}

public macro outer(input: Tokens) {
    // 获取名为 inner 的内层宏所发送的全部消息
    let messages = getChildMessages("inner")

    // 获取内层宏发送的 String 消息
    let msg = messages[0].getString("StringFromInner")

    // 输出 String 类型消息
    println("Message from inner-macro: ${msg}")
    return input
}
// 宏调用
import M.*

@outer(@inner(var a = 1))

main() {
}

运行结果:

Message from inner-macro: message

func getTokens(String)

public func getTokens(key: String): Tokens

功能:获取对应 key 值的 Tokens 类型信息。

参数:

  • key: String - 用于检索的关键字的名字。

返回值:

  • Tokens - 返回存在 key 值对应的 Tokens 类型的信息。

异常:

  • Exception - 当不存在 key 值对应的 Tokens 类型的信息时,抛出异常。

示例:

// 宏定义
macro package M

import std.ast.*
import std.collection.ArrayList

public macro inner(input: Tokens) {
    // 向外层宏发送 Tokens 类型消息
    setItem("TokensFromInner", quote(1 + 1))
    return input
}

public macro outer(input: Tokens) {
    // 获取名为 inner 的内层宏所发送的全部消息
    let messages = getChildMessages("inner")

    // 获取内层宏发送的 Tokens 消息
    let msg = messages[0].getTokens("TokensFromInner")

    // 输出 Tokens 类型消息
    println("Message from inner-macro: ${msg}")
    return input
}
// 宏调用
import M.*

@outer(@inner(var a = 1))

main() {
}

运行结果:

Message from inner-macro: 1 + 1

func hasItem(String)

public func hasItem(key: String): Bool

功能:检查是否有 key 值对应的相关信息。

参数:

  • key: String - 用于检索的关键字名字。

返回值:

  • Bool - 若存在 key 值对应的相关信息,返回 true;反之,返回 false。

示例:

// 宏定义
macro package M

import std.ast.*
import std.collection.ArrayList

public macro inner(input: Tokens) {
    // 向外层宏发送 Int64 类型消息
    setItem("Int64FromInner", 100)
    return input
}

public macro outer(input: Tokens) {
    // 获取名为 inner 的内层宏所发送的全部消息
    let messages = getChildMessages("inner")

    // 判断内层宏是否发送了对应的消息
    let result = messages[0].hasItem("Int64FromInner")
    println("messages[0].hasItem(\"Int64FromInner\"): ${result}")
    return input
}
// 宏调用
import M.*

@outer(@inner(var a = 1))

main() {
}

运行结果:

messages[0].hasItem("Int64FromInner"): true

class MainDecl

public class MainDecl <: Decl {
    public init(inputs: Tokens)
    public init()
}

功能:表示一个 main 函数定义节点。

一个 MainDecl 节点:main() {}

父类型:

prop block

public mut prop block: Block

功能:获取或设置 MainDecl 节点的函数体。

类型:Block

prop colon

public mut prop colon: Token

功能:获取或设置 MainDecl 节点的冒号。

类型:Token

异常:

prop declType

public mut prop declType: TypeNode

功能:获取或设置 MainDecl 节点的函数返回类型。

类型:TypeNode

异常:

prop funcParams

public mut prop funcParams: ArrayList<FuncParam>

功能:获取或设置 MainDecl 节点的函数参数。

类型:ArrayList<FuncParam>

prop lParen

public mut prop lParen: Token

功能:获取或设置 MainDecl 节点的 "("。

类型:Token

异常:

prop rParen

public mut prop rParen: Token

功能:获取或设置 MainDecl 节点的 ")"。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 MainDecl 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 MainDecl 对象
    let mainDecl = MainDecl()
    
    // 设置 MainDecl 的属性
    mainDecl.keyword = quote(main)[0]
    mainDecl.colon = Token(TokenKind.COLON)
    mainDecl.declType = PrimitiveType(quote(Unit))
    mainDecl.funcParams = ArrayList<FuncParam>()
    mainDecl.lParen = Token(TokenKind.LPAREN)
    mainDecl.rParen = Token(TokenKind.RPAREN)

    // 设置代码块
    let block = Block()
    block.lBrace = Token(TokenKind.LCURL)
    block.rBrace = Token(TokenKind.RCURL)
    mainDecl.block = block
    
    // 转化为 Tokens 并输出
    println("mainDecl.toTokens(): ${mainDecl.toTokens()}")
}

运行结果:

mainDecl.toTokens(): main(): Unit {
}

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 MainDecl 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 MainDecl 对象
    let mainDecl = MainDecl(quote(main() { println("Hello World") }))
    
    // 转化为 Tokens 并输出
    println("mainDecl.toTokens(): ${mainDecl.toTokens()}")
}

运行结果:

mainDecl.toTokens(): main() {
    println("Hello World")
}

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个 MainDecl 对象
    let mainDecl = MainDecl(quote(main() { println("Hello World") }))
    
    // 通过toTokens()将实例输出
    println("mainDecl.toTokens(): ${mainDecl.toTokens()}")
}

运行结果:

mainDecl.toTokens(): main() {
    println("Hello World")
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: MainDecl) {
        println("Visiting MainDecl")
    }
}

main(): Unit {
    // 从 Tokens 创建 MainDecl 对象
    let mainDecl = MainDecl(quote(main() { println("Hello World") }))
    
    // 使用自定义访问器遍历 MainDecl 节点
    mainDecl.traverse(MyVisitor())
}

运行结果:

Visiting MainDecl

class MatchCase

public class MatchCase <: Node {
    public init()
}

功能:表示 match 表达式中的一个 case 节点。

一个 MatchCase 节点:case failScore where score > 0 => 0

说明:

  • MatchCase 以关键字 case 开头,后跟 Expr 或者一个或多个由 | 分隔的相同种类的 pattern,一个可选的 patternguard,一个 => 和一系列声明或表达式。
  • 该节点与 MatchExpr 存在强绑定关系。

父类型:

prop arrow

public mut prop arrow: Token

功能:获取或设置 MatchCase 中的 => 操作符的词法单元。

类型:Token

异常:

prop bitOrs

public mut prop bitOrs: Tokens

功能:获取或设置 MatchCase 中的 | 操作符的词法单元序列,可能为空。

类型:Tokens

异常:

prop block

public mut prop block: Block

功能:获取或设置 MatchCase 中的一系列声明或表达式节点。

类型:Block

prop expr

public mut prop expr: Expr

功能:获取或设置 MatchCase 中位于 case 后的表达式节点。

类型:Expr

异常:

prop keywordC

public mut prop keywordC: Token

功能:获取或设置 MatchCase 内的 case 关键字的词法单元。

类型:Token

异常:

prop keywordW

public mut prop keywordW: Token

功能:获取或设置 MatchCase 中可选的关键字 where 的词法单元,可能为 ILLEGAL 的词法单元。

类型:Token

异常:

prop patternGuard

public mut prop patternGuard: Expr

功能:获取或设置 MatchCase 中可选的 pattern guard 表达式节点。

类型:Expr

异常:

prop patterns

public mut prop patterns: ArrayList<Pattern>

功能:获取或设置 MatchCase 中位于 case 后的 pattern 列表。

类型:ArrayList<Pattern>

init()

public init()

功能:构造一个默认的 MatchCase 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 MatchCase 对象
    let matchCase = MatchCase()
    
    // 设置 MatchCase 的属性
    matchCase.keywordC = Token(CASE)
    matchCase.expr = BinaryExpr(quote(a > 1))

    // 设置代码块
    let block = Block()
    block.nodes.add(LitConstExpr(quote(true)))
    matchCase.block = block

    // 转化为 Tokens 并输出
    println("matchCase.toTokens(): ${matchCase.toTokens()}")
}

运行结果:

matchCase.toTokens(): case a > 1 => true

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 MatchCase 对象
    let matchCase = MatchCase()
    
    // 设置 MatchCase 的属性
    matchCase.keywordC = Token(CASE)
    matchCase.expr = BinaryExpr(quote(a > 1))

    // 设置代码块
    let block = Block()
    block.nodes.add(LitConstExpr(quote(true)))
    matchCase.block = block
    
    // 转化为 Tokens 并输出
    println("matchCase.toTokens(): ${matchCase.toTokens()}")
}

运行结果:

matchCase.toTokens(): case a > 1 => true

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: MatchCase) {
        println("Visiting MatchCase")
    }
}

main(): Unit {
    // 构造一个默认的 MatchCase 对象
    let matchCase = MatchCase()
    
    // 设置 MatchCase 的属性
    matchCase.keywordC = Token(CASE)
    matchCase.expr = BinaryExpr(quote(a > 1))

    // 设置代码块
    let block = Block()
    block.nodes.add(LitConstExpr(quote(true)))
    matchCase.block = block
    
    // 使用自定义访问器遍历 MatchCase 节点
    matchCase.traverse(MyVisitor())
}

运行结果:

Visiting MatchCase

class MatchExpr

public class MatchExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示模式匹配表达式实现模式匹配。

模式匹配表达式分为带 selector 的 match 表达式和不带 selector 的 match 表达式。

父类型:

prop keyword

public mut prop keyword: Token

功能:获取或设置 MatchExpr 节点中 match 关键字。

类型:Token

异常:

prop lBrace

public mut prop lBrace: Token

功能:获取或设置 MatchExpr 之后的 "{"。

类型:Token

异常:

prop lParen

public mut prop lParen: Token

功能:获取或设置 MatchExpr 之后的 "("。

类型:Token

异常:

prop matchCases

public mut prop matchCases: ArrayList<MatchCase>

功能:获取或设置 MatchExpr 内的 matchCase, matchCase 以关键字 case 开头,后跟一个或者多个由 PatternExpr节点,具体见 MatchCase

类型:ArrayList<MatchCase>

prop rBrace

public mut prop rBrace: Token

功能:获取或设置 MatchExpr 之后的 "}"。

类型:Token

异常:

prop rParen

public mut prop rParen: Token

功能:获取或设置 MatchExpr 之后的 ")"。

类型:Token

异常:

prop selector

public mut prop selector: Expr

功能:获取或设置关键字 match 之后的 Expr

类型:Expr

异常:

  • ASTException - 当该表达式是一个不带 selector 的 match 表达式时,抛出异常。

init()

public init()

功能:构造一个默认的 MatchExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 MatchExpr 对象
    let matchExpr = MatchExpr()
    
    // 设置 MatchExpr 的属性
    matchExpr.keyword = Token(TokenKind.MATCH)
    matchExpr.lBrace = Token(TokenKind.LCURL)
    matchExpr.rBrace = Token(TokenKind.RCURL)
    matchExpr.lParen = Token(TokenKind.LPAREN)
    matchExpr.rParen = Token(TokenKind.RPAREN)
    matchExpr.matchCases = ArrayList<MatchCase>()
    matchExpr.selector = RefExpr(quote(x))

    let matchCase = MatchCase()
    matchCase.keywordC = Token(CASE)
    matchCase.expr = WildcardExpr()
    let block = Block()
    block.nodes.add(LitConstExpr(quote(true)))
    matchCase.block = block
    matchExpr.matchCases.add(matchCase)
    
    // 转化为 Tokens 并输出
    println("matchExpr.toTokens(): ${matchExpr.toTokens()}")
}

运行结果:

matchExpr.toTokens(): match(x) {
    case _ => true
}

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 MatchExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 MatchExpr 对象
    let matchExpr = MatchExpr(quote(match (x) { case _ => 2 }))
    
    // 转化为 Tokens 并输出
    println("matchExpr.toTokens(): ${matchExpr.toTokens()}")
}

运行结果:

matchExpr.toTokens(): match(x) {
    case _ => 2
}

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个带实际值的 MatchExpr 对象
    let matchExpr = MatchExpr(quote(match (x) { case _ => 2 }))
    
    // 调用 toTokens 方法将 MatchExpr 转化为 Tokens
    let tokens = matchExpr.toTokens()
    
    // 转化为 Tokens 并输出
    println("matchExpr.toTokens(): ${matchExpr.toTokens()}")
}

运行结果:

matchExpr.toTokens(): match(x) {
    case _ => 2
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: MatchExpr) {
        println("Visiting MatchExpr")
    }
}

main(): Unit {
    // 创建一个 MatchExpr 对象
    let matchExpr = MatchExpr(quote(match (x) { case _ => 2 }))
    
    // 使用自定义访问器遍历 MatchExpr 节点
    matchExpr.traverse(MyVisitor())
}

运行结果:

Visiting MatchExpr

class MemberAccess

public class MemberAccess <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示成员访问表达式。

可以用于访问 class、interface、struct 等类型的成员。一个 MemberAccess 节点的形式为 T.aT 为成员访问表达式的主体,a 表示成员的名字。

父类型:

prop baseExpr

public mut prop baseExpr: Expr

功能:获取或设置 MemberAccess 节点的成员访问表达式主体。

类型:Expr

prop commas

public mut prop commas: Tokens

功能:获取或设置 MemberAccess 节点中的 "," 词法单元序列,可能为空。

类型:Tokens

异常:

prop dot

public mut prop dot: Token

功能:获取或设置 MemberAccess 节点中的 "."。

类型:Token

异常:

  • ASTException - 当设置的 Token 不是 "." 词法单元类型时,抛出异常。

prop field

public mut prop field: Token

功能:获取或设置 MemberAccess 节点成员的名字。

类型:Token

prop lAngle

public mut prop lAngle: Token

功能:获取或设置 MemberAccess 节点中的左尖括号。

类型:Token

异常:

prop rAngle

public mut prop rAngle: Token

功能:获取或设置 MemberAccess 节点中的右尖括号。

类型:Token

异常:

prop typeArguments

public mut prop typeArguments: ArrayList<TypeNode>

功能:获取或设置 MemberAccess 节点中的实例化类型。

类型:ArrayList<TypeNode>

init()

public init()

功能:构造一个默认的 MemberAccess 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 MemberAccess 对象
    let memberAccess = MemberAccess()
    
    // 设置 MemberAccess 的属性
    memberAccess.baseExpr = RefExpr(quote(obj))
    memberAccess.dot = Token(TokenKind.DOT)
    memberAccess.field = Token(TokenKind.IDENTIFIER, "field")
    memberAccess.commas = quote(,)
    memberAccess.lAngle = Token(TokenKind.LT)
    memberAccess.rAngle = Token(TokenKind.GT)
    memberAccess.typeArguments = ArrayList<TypeNode>()
    
    // 转化为 Tokens 并输出
    println("memberAccess.toTokens(): ${memberAccess.toTokens()}")
}

运行结果:

memberAccess.toTokens(): obj.field

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 MemberAccess 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 MemberAccess 对象
    let memberAccess = MemberAccess(quote(obj.field))
    
    // 转化为 Tokens 并输出
    println("memberAccess.toTokens(): ${memberAccess.toTokens()}")
}

运行结果:

memberAccess.toTokens(): obj.field

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个带实际值的 MemberAccess 对象
    let memberAccess = MemberAccess(quote(obj.field))
    
    // 转化为 Tokens 并输出
    println("memberAccess.toTokens(): ${memberAccess.toTokens()}")
}

运行结果:

memberAccess.toTokens(): obj.field

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: MemberAccess) {
        println("Visiting MemberAccess")
    }
}

main(): Unit {
    // 创建一个 MemberAccess 对象
    let memberAccess = MemberAccess(quote(obj.field))
    
    // 使用自定义访问器遍历 MemberAccess 节点
    memberAccess.traverse(MyVisitor())
}

运行结果:

Visiting MemberAccess

class Modifier

public class Modifier <: Node {
    public init(keyword: Token)
    public init()
}

功能:表示该定义具备某些特性,通常放在定义处的最前端。

一个 Modifier 节点:public func foo() 中的 public

父类型:

prop keyword

public mut prop keyword: Token

功能:获取或设置 Modifier 节点中的修饰符词法单元。

类型:Token

init()

public init()

功能:构造一个默认的 Modifier 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 Modifier 对象
    let modifier = Modifier()
    
    // 设置 Modifier 的属性
    modifier.keyword = Token(TokenKind.PUBLIC, "public")
    
    // 转化为 Tokens 并输出
    println("modifier.toTokens(): ${modifier.toTokens()}")
}

运行结果:

modifier.toTokens(): public

init(Token)

public init(keyword: Token)

功能:构造一个 Modifier 对象。

参数:

  • keyword: Token - 将要构造 Modifier 类型的词法单元。

示例:

import std.ast.*

main(): Unit {
    // 使用 Token 构造 Modifier 对象
    let modifier = Modifier(Token(TokenKind.PUBLIC, "public"))
    
    // 转化为 Tokens 并输出
    println("modifier.toTokens(): ${modifier.toTokens()}")
}

运行结果:

modifier.toTokens(): public

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个带实际值的 Modifier 对象
    let token = Token(TokenKind.PUBLIC, "public")
    let modifier = Modifier(token)
    
    // 转化为 Tokens 并输出
    println("modifier.toTokens(): ${modifier.toTokens()}")
}

运行结果:

modifier.toTokens(): public

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: Modifier) {
        println("Visiting Modifier")
    }
}

main(): Unit {
    // 创建一个 Modifier 对象
    let modifier = Modifier(Token(TokenKind.PUBLIC, "public"))
    
    // 使用自定义访问器遍历 Modifier 节点
    modifier.traverse(MyVisitor())
}

运行结果:

Visiting Modifier

class Node

abstract sealed class Node <: ToTokens {}

功能:所有仓颉语法树节点的父类。

该类提供了所有数据类型通用的操作接口。

父类型:

prop beginPos

public mut prop beginPos: Position

功能:获取或设置当前节点的起始的位置信息。

类型:Position

prop endPos

public mut prop endPos: Position

功能:获取或设置当前节点的终止的位置信息。

类型:Position

func dump()

public func dump(): Unit

功能:将当前语法树节点转化为树形结构的形态并进行打印。

语法树节点的树形结构将按照以下形式进行输出:

  • - 字符串:表示当前节点的公共属性, 如 -keyword , -identifier
  • 节点属性后紧跟该节点的具体类型, 如 -declType: PrimitiveType 表示节点类型是一个 PrimitiveType 节点。
  • 每个类型使用大括号表示类型的作用区间。

语法树输出的详细格式请参见语法树节点打印

示例:

import std.ast.*

main(): Unit {
    // 创建一个 Node 子类对象 (使用 IfExpr 作为示例)
    let ifExpr = IfExpr()
    
    // 设置 IfExpr 的条件
    ifExpr.condition = LitConstExpr(quote(true))
    ifExpr.keywordI = Token(TokenKind.IF)

    // 设置代码块
    let block = Block()
    block.lBrace = Token(TokenKind.LCURL)
    block.rBrace = Token(TokenKind.RCURL)
    ifExpr.ifBlock = block
    
    // 调用 dump 方法输出节点信息
    ifExpr.dump()
}

运行结果:

IfExpr {
  -keywordI: Token {
    value: "if"
    kind: IF
    pos: 9: 23
  }
  -condition: LitConstExpr {
    -literal: Token {
      value: "true"
      kind: BOOL_LITERAL
      pos: 8: 43
    }
  }
  -ifBlock: Block {
  }
}

func toTokens()

public func toTokens(): Tokens

功能:将语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个 Node 子类对象 (使用 IfExpr 作为示例)
    let node = IfExpr(quote(if (x > 0) { x = x + 1 } else { x = x - 1 }))
    
    // 输出 Tokens 信息
    println("node.toTokens(): ${node.toTokens()}")
}

运行结果:

node.toTokens(): if(x > 0) {
    x = x + 1
}
else {
    x = x - 1
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: Node) {
        breakTraverse()
        println("Visiting Node")
    }
}

main(): Unit {
    // 创建 Node 节点(以 ClassDecl 为例)
    let node = ClassDecl(quote(class A {}))
    
    // 使用自定义访问器遍历 Node 节点
    node.traverse(MyVisitor())
}

运行结果:

Visiting Node

class OptionalExpr

public class OptionalExpr <: Expr {
    public init()
    public init(inputs: Tokens)
}

功能:表示一个带有问号操作符的表达式节点。

一个 OptionalExpr 节点:a?.b, a?(b), a?[b] 中的 a?

父类型:

prop baseExpr

public mut prop baseExpr: Expr

功能:获取或设置 OptionalExpr 的表达式节点。

类型:Expr

prop quest

public mut prop quest: Token

功能:获取或设置 OptionalExpr 中的问号操作符。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 OptionalExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 OptionalExpr 对象
    let optionalExpr = OptionalExpr()
    
    // 设置 OptionalExpr 的属性
    optionalExpr.baseExpr = RefExpr(quote(a))
    optionalExpr.quest = Token(TokenKind.QUEST)
    
    // 转化为 Tokens 并输出
    println("optionalExpr.toTokens(): ${optionalExpr.toTokens()}")
}

运行结果:

optionalExpr.toTokens(): a?

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 OptionalExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 OptionalExpr 对象
    let optionalExpr = OptionalExpr(quote(a?))
    
    // 转化为 Tokens 并输出
    println("optionalExpr.toTokens(): ${optionalExpr.toTokens()}")
}

运行结果:

optionalExpr.toTokens(): a?

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个 OptionalExpr 对象
    let optionalExpr = OptionalExpr(quote(a?))
    
    // 转化为 Tokens 并输出
    println("optionalExpr.toTokens(): ${optionalExpr.toTokens()}")
}

运行结果:

optionalExpr.toTokens(): a?

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: OptionalExpr) {
        println("Visiting OptionalExpr")
    }
}

main(): Unit {
    // 创建一个 OptionalExpr 对象
    let optionalExpr = OptionalExpr(quote(a?))
    
    // 使用自定义访问器遍历 OptionalExpr 节点
    optionalExpr.traverse(MyVisitor())
}

运行结果:

Visiting OptionalExpr

class PackageHeader

public class PackageHeader <: Node {
    public init(inputs: Tokens)
    public init()
}

功能:表示包声明节点。

一个 PackageHeader 节点: package define 或者 macro package define

说明:

包声明以关键字 packagemacro package 开头,后面紧跟包名,且包声明必须在源文件的首行。

父类型:

prop accessible

public mut prop accessible: Token

功能:获取或设置 PackageHeader 节点中的访问性修饰符的词法单元,可能为 ILLEGAL 的词法单元。

类型:Token

prop keywordM

public mut prop keywordM: Token

功能:获取或设置 PackageHeader 节点中的 macro 关键字的词法单元(M 为关键字首字母,下同),可能为 ILLEGAL 的词法单元。

类型:Token

异常:

prop keywordP

public mut prop keywordP: Token

功能:获取或设置 PackageHeader 节点中的 package 关键字的词法单元。

类型:Token

异常:

prop orgName

public mut prop orgName: Token

功能:获取或设置 PackageHeader 节点中代表组织名的词法单元,setter会检查orgSeparator是否为 "::" 词法单元,若为空则同时设置其为 "::" 词法单元。

类型:Token

异常:

prop orgSeparator

public mut prop orgSeparator: Token

功能:获取或设置 PackageHeader 节点中的 "::" 词法单元,setter会检查orgName内容是否为空字符串,若有则抛异常。

类型:Token

异常:

  • ASTException - 当设置的 Token 不是 "::" 时,或orgName内容为空字符串时抛出异常。

prop prefixPaths

public mut prop prefixPaths: Tokens

功能:获取或设置 PackageHeader 节点中完整包名的前缀部分的词法单元序列,可能为空。如 package a.b.c 中的 ab

类型:Tokens

prop prefixDots

public mut prop prefixDots: Tokens

功能:获取或设置 PackageHeader 节点中完整包名中用于分隔每层子包的词法单元序列,可能为空。如 package a.b.c 中的两个 "."。

类型:Tokens

异常:

prop packageIdentifier

public mut prop packageIdentifier: Token

功能:获取或设置 PackageHeader 节点中当前包的名字,如果当前包为 root 包,即为完整包名,若当前包为子包,则为最后一个 "." 后的名字。

类型:Token

init()

public init()

功能:构造一个默认的 PackageHeader 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 PackageHeader 对象
    let packageHeader = PackageHeader()
    
    // 设置 PackageHeader 的属性
    packageHeader.keywordP = Token(TokenKind.PACKAGE)
    packageHeader.packageIdentifier = Token(TokenKind.IDENTIFIER, "myPackage")
    packageHeader.accessible = Token(TokenKind.PUBLIC)
    
    // 转化为 Tokens 并输出
    println("packageHeader.toTokens(): ${packageHeader.toTokens()}")
}

运行结果:

packageHeader.toTokens(): package myPackage

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 PackageHeader 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 PackageHeader 对象
    let packageHeader = PackageHeader(quote(package myPackage))
    
    // 转化为 Tokens 并输出
    println("packageHeader.toTokens(): ${packageHeader.toTokens()}")
}

运行结果:

packageHeader.toTokens(): package myPackage

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个带实际值的 PackageHeader 对象
    let packageHeader = PackageHeader(quote(package myPackage))
    
    // 转化为 Tokens 并输出
    println("packageHeader.toTokens(): ${packageHeader.toTokens()}")
}

运行结果:

packageHeader.toTokens(): package myPackage

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: PackageHeader) {
        println("Visiting PackageHeader")
    }
}

main(): Unit {
    // 创建一个 PackageHeader 对象
    let packageHeader = PackageHeader(quote(package myPackage))
    
    // 使用自定义访问器遍历 PackageHeader 节点
    packageHeader.traverse(MyVisitor())
}

运行结果:

Visiting PackageHeader

class ParenExpr

public class ParenExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示一个括号表达式节点,是指使用圆括号括起来的表达式。

一个 ParenExpr 节点:(1 + 2)

父类型:

prop lParen

public mut prop lParen: Token

功能:获取或设置 ParenExpr 节点中的 "("。

类型:Token

异常:

prop parenthesizedExpr

public mut prop parenthesizedExpr: Expr

功能:获取或设置 ParenExpr 节点中由圆括号括起来的子表达式。

类型:Expr

prop rParen

public mut prop rParen: Token

功能:获取或设置 ParenExpr 节点中的 ")"。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 ParenExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 ParenExpr 对象
    let parenExpr = ParenExpr()
    
    // 设置 ParenExpr 的属性
    parenExpr.lParen = Token(TokenKind.LPAREN)
    parenExpr.parenthesizedExpr = LitConstExpr(quote(1))
    parenExpr.rParen = Token(TokenKind.RPAREN)
    
    // 转化为 Tokens 并输出
    println("parenExpr.toTokens(): ${parenExpr.toTokens()}")
}

运行结果:

parenExpr.toTokens(): (1)

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 ParenExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 ParenExpr 对象
    let parenExpr = ParenExpr(quote((1 + 2)))
    
    // 转化为 Tokens 并输出
    println("parenExpr.toTokens(): ${parenExpr.toTokens()}")
}

运行结果:

parenExpr.toTokens(): (1 + 2)

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个带实际值的 ParenExpr 对象
    let parenExpr = ParenExpr(quote((1 + 2)))
    
    // 转化为 Tokens 并输出
    println("parenExpr.toTokens(): ${parenExpr.toTokens()}")
}

运行结果:

parenExpr.toTokens(): (1 + 2)

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ParenExpr) {
        println("Visiting ParenExpr")
    }
}

main(): Unit {
    // 创建一个 ParenExpr 对象
    let parenExpr = ParenExpr(quote((1 + 2)))
    
    // 使用自定义访问器遍历 ParenExpr 节点
    parenExpr.traverse(MyVisitor())
}

运行结果:

Visiting ParenExpr

class ParenType

public class ParenType <: TypeNode {
    public init()
    public init(inputs: Tokens)
}

功能:表示括号类型节点。

例如 var a: (Int64) 中的 (Int64)

父类型:

prop lParen

public mut prop lParen: Token

功能:获取或设置 ParenType 节点中的 "(" 词法单元。

类型:Token

异常:

prop parenthesizedType

public mut prop parenthesizedType: TypeNode

功能:获取或设置 ParenType 节点中括起来的类型,如 (Int64) 中的 Int64

类型:TypeNode

prop rParen

public mut prop rParen: Token

功能:获取或设置 ParenType 节点中的 ")" 词法单元。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 ParenType 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 ParenType 对象
    let parenType = ParenType()
    
    // 设置 ParenType 的属性
    parenType.lParen = Token(TokenKind.LPAREN)
    parenType.parenthesizedType = PrimitiveType(quote(Int8))
    parenType.rParen = Token(TokenKind.RPAREN)
    
    // 转化为 Tokens 并输出
    println("parenType.toTokens(): ${parenType.toTokens()}")
}

运行结果:

parenType.toTokens(): (Int8)

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 ParenType 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 ParenType 对象
    let parenType = ParenType(quote((Int32)))
    
    // 转化为 Tokens 并输出
    println("parenType.toTokens(): ${parenType.toTokens()}")
}

运行结果:

parenType.toTokens(): (Int32)

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个 ParenType 对象
    let parenType = ParenType(quote((Int32)))
    
    // 转化为 Tokens 并输出
    println("parenType.toTokens(): ${parenType.toTokens()}")
}

运行结果:

parenType.toTokens(): (Int32)

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ParenType) {
        println("Visiting ParenType")
    }
}

main(): Unit {
    // 创建一个 ParenType 对象
    let parenType = ParenType(quote((Int32)))
    
    // 使用自定义访问器遍历 ParenType 节点
    parenType.traverse(MyVisitor())
}

运行结果:

Visiting ParenType

class Pattern

public open class Pattern <: Node {}

功能:所有模式匹配节点的父类,继承自 Node 节点。

父类型:

func dump(UInt16)

protected open func dump(_: UInt16): String

功能:将当前语法树节点转化为树形结构的形态并进行打印,需要被子类重写。

参数:

  • _: UInt16 - 格式化输出的缩进空格数量。

返回值:

  • String - 格式化输出内容。

示例:

import std.ast.*

extend VarPattern {
    public func myDump() {
        dump(4)
    }
}

main(): Unit {
    // 创建一个 Pattern 子类对象 (使用 VarPattern 作为示例)
    let pattern = VarPattern(quote(e)[0])
    
    // 调用 dump 方法输出节点信息
    let result = pattern.myDump()
    println("Pattern dump result: ${result}")
}

运行结果:

Pattern dump result: VarPattern {
          -identifier: Token {
            value: "e"
            kind: IDENTIFIER
            pos: 11: 36
          }
        }

func toTokens()

public open func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个 Pattern 子类对象 (使用 VarPattern 作为示例)
    let pattern = VarPattern(quote(e)[0])
    
    // 输出 Pattern 节点转化成的 Tokens
    println("pattern.toTokens(): ${pattern.toTokens()}")
}

运行结果:

pattern.toTokens(): e

func traverse(Visitor)

public open func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: Pattern) {
        breakTraverse()
        println("Visiting Pattern")
    }
}

main(): Unit {
    // 创建 Pattern 节点(以 VarPattern 为例)
    let pattern = VarPattern(quote(e)[0])
    
    // 使用自定义访问器遍历 Pattern 节点
    pattern.traverse(MyVisitor())
}

运行结果:

Visiting Pattern

class PerformExpr

public class PerformExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示一个 perform 表达式节点。

一个 PerformExpr 节点示例:perform Eff()

父类型:

prop expr

public mut prop expr: Expr

功能:获取或设置 PerformExpr 节点中的表达式部分。

类型:Expr

prop keyword

public mut prop keyword: Token

功能:获取或设置 PerformExpr 节点中的 perform 关键字。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 PerformExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 PerformExpr 对象
    let performExpr = PerformExpr()
    
    // 设置 PerformExpr 的属性
    performExpr.keyword = Token(TokenKind.PERFORM)
    performExpr.expr = CallExpr(quote(Effect()))
    
    // 转化为 Tokens 并输出
    println("performExpr.toTokens(): ${performExpr.toTokens()}")
}

运行结果:

performExpr.toTokens(): perform Effect()

init(Tokens)

public init(inputs: Tokens)

功能:从提供的词法单元构造一个 PerformExpr 对象。

注意:

编译时需要添加 --experimental--enable-eh 编译选项以支持 Effect Handlers 特性。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 PerformExpr 对象
    let performExpr = PerformExpr(quote(perform Effect()))
    
    // 转化为 Tokens 并输出
    println("performExpr.toTokens(): ${performExpr.toTokens()}")
}

运行结果:

performExpr.toTokens(): perform Effect()

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 PerformExpr 对象
    let performExpr = PerformExpr()
    
    // 设置 PerformExpr 的属性
    performExpr.keyword = Token(TokenKind.PERFORM)
    performExpr.expr = CallExpr(quote(Eff()))
    
    // 转化为 Tokens 并输出
    println("performExpr.toTokens(): ${performExpr.toTokens()}")
}

运行结果:

performExpr.toTokens(): perform Eff()

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: PerformExpr) {
        println("Visiting PerformExpr")
    }
}

main(): Unit {
    // 构造一个默认的 PerformExpr 对象
    let performExpr = PerformExpr()
    
    // 设置 PerformExpr 的属性
    performExpr.keyword = Token(TokenKind.PERFORM)
    performExpr.expr = CallExpr(quote(Effect()))
    
    // 使用自定义访问器遍历 PerformExpr 节点
    performExpr.traverse(MyVisitor())
}

运行结果:

Visiting PerformExpr

class PrefixType

public class PrefixType <: TypeNode {
    public init(inputs: Tokens)
    public init()
}

功能:表示带问号的前缀类型节点。

例如 var a : ?A 中的 ?A

父类型:

prop baseType

public mut prop baseType: TypeNode

功能:获取或设置 PrefixType 节点中的类型节点,如 var a: ?A 中的 A

类型:TypeNode

prop prefixOps

public mut prop prefixOps: Tokens

功能:获取或设置 PrefixType 节点中前缀操作符集合。

类型:Tokens

init()

public init()

功能:构造一个默认的 PrefixType 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 PrefixType 对象
    let prefixType = PrefixType()
    
    // 设置 PrefixType 的属性
    prefixType.prefixOps = quote(?)
    prefixType.baseType = PrimitiveType(quote(Int8))
    
    // 转化为 Tokens 并输出
    println("prefixType.toTokens(): ${prefixType.toTokens()}")
}

运行结果:

prefixType.toTokens(): ?Int8

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 PrefixType 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 PrefixType 对象
    let prefixType = PrefixType(quote(?Int32))
    
    // 转化为 Tokens 并输出
    println("prefixType.toTokens(): ${prefixType.toTokens()}")
}

运行结果:

prefixType.toTokens(): ?Int32

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个 PrefixType 对象
    let prefixType = PrefixType(quote(?Int32))
    
    // 转化为 Tokens 并输出
    println("prefixType.toTokens(): ${prefixType.toTokens()}")
}

运行结果:

prefixType.toTokens(): ?Int32

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: PrefixType) {
        println("Visiting PrefixType")
    }
}

main(): Unit {
    // 创建一个 PrefixType 对象
    let prefixType = PrefixType(quote(?Int32))
    
    // 使用自定义访问器遍历 PrefixType 节点
    prefixType.traverse(MyVisitor())
}

运行结果:

Visiting PrefixType

class PrimaryCtorDecl

public class PrimaryCtorDecl <: Decl {
    public init(inputs: Tokens)
    public init()
}

功能:表示一个主构造函数节点。

主构造函数节点由修饰符,主构造函数名,形参列表和主构造函数体构成。

父类型:

prop block

public mut prop block: Block

功能:获取或设置 PrimaryCtorDecl 节点的主构造函数体。

类型:Block

prop funcParams

public mut prop funcParams: ArrayList<FuncParam>

功能:获取或设置 PrimaryCtorDecl 节点的参数。

类型:ArrayList<FuncParam>

prop lParen

public mut prop lParen: Token

功能:获取或设置 PrimaryCtorDecl 节点的 "("。

类型:Token

异常:

prop rParen

public mut prop rParen: Token

功能:获取或设置 PrimaryCtorDecl 节点的 ")"。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 PrimaryCtorDecl 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 PrimaryCtorDecl 对象
    let primaryCtorDecl = PrimaryCtorDecl()
    
    // 设置 PrimaryCtorDecl 的属性
    primaryCtorDecl.identifier = quote(Ctor)[0]
    primaryCtorDecl.lParen = Token(TokenKind.LPAREN)
    primaryCtorDecl.rParen = Token(TokenKind.RPAREN)

    // 设置参数
    let param1 = FuncParam(quote(x: Int8))
    primaryCtorDecl.funcParams = ArrayList<FuncParam>([param1])
    
    // 设置代码块
    let block = Block()
    block.lBrace = Token(TokenKind.LCURL)
    block.rBrace = Token(TokenKind.RCURL)
    primaryCtorDecl.block = block
    
    // 转化为 Tokens 并输出
    println("primaryCtorDecl.toTokens(): ${primaryCtorDecl.toTokens()}")
}

运行结果:

primaryCtorDecl.toTokens(): Ctor(x: Int8) {
}

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 PrimaryCtorDecl 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 PrimaryCtorDecl 对象
    let primaryCtorDecl = PrimaryCtorDecl(quote(Ctor(x: Int8) { super(x) }))
    
    // 转化为 Tokens 并输出
    println("primaryCtorDecl.toTokens(): ${primaryCtorDecl.toTokens()}")
}

运行结果:

primaryCtorDecl.toTokens(): Ctor(x: Int8) {
    super(x)
}

func isConst()

public func isConst(): Bool

功能:判断是否是一个 Const 类型的节点。

返回值:

  • Bool - 当前节点为 Const 类型的节点时,返回 true;反之,返回 false。

示例:

import std.ast.*

main(): Unit {
    // 创建一个 PrimaryCtorDecl 对象
    let primaryCtorDecl = PrimaryCtorDecl()
    
    println("primaryCtorDecl.isConst(): ${primaryCtorDecl.isConst()}")
}

运行结果:

primaryCtorDecl.isConst(): false

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个 PrimaryCtorDecl 对象
    let primaryCtorDecl = PrimaryCtorDecl(quote(Ctor(x: Int8) { super(x) }))
    
    // 转化为 Tokens 并输出
    println("primaryCtorDecl.toTokens(): ${primaryCtorDecl.toTokens()}")
}

运行结果:

primaryCtorDecl.toTokens(): Ctor(x: Int8) {
    super(x)
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: PrimaryCtorDecl) {
        println("Visiting PrimaryCtorDecl")
    }
}

main(): Unit {
    // 创建一个 PrimaryCtorDecl 对象
    let primaryCtorDecl = PrimaryCtorDecl(quote(Ctor(x: Int8) { super(x) }))
    
    // 使用自定义访问器遍历 PrimaryCtorDecl 节点
    primaryCtorDecl.traverse(MyVisitor())
}

运行结果:

Visiting PrimaryCtorDecl

class PrimitiveType

public class PrimitiveType <: TypeNode {
    public init(inputs: Tokens)
    public init()
}

功能:表示一个基本类型节点。

例如数值类型,Rune 类型,布尔类型等。

父类型:

prop keyword

public mut prop keyword: Token

功能:获取或设置构造 PrimitiveType 类型的关键字,如 Int8

类型:Token

init()

public init()

功能:构造一个默认的 PrimitiveType 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 PrimitiveType 对象
    let primitiveType = PrimitiveType()
    
    // 设置 PrimitiveType 的属性
    primitiveType.keyword = Token(TokenKind.INT8, "Int8")
    
    // 输出 PrimitiveType 节点转化成的 Tokens
    println("primitiveType.toTokens(): ${primitiveType.toTokens()}")
}

运行结果:

primitiveType.toTokens(): Int8

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 PrimitiveType 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 使用 quote 宏创建 Tokens
    let tokens = quote(Int8)
    
    // 使用 Tokens 构造 PrimitiveType 对象
    let primitiveType = PrimitiveType(tokens)
    
    // 输出 PrimitiveType 节点转化成的 Tokens
    println("primitiveType.toTokens(): ${primitiveType.toTokens()}")
}

运行结果:

primitiveType.toTokens(): Int8

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个 PrimitiveType 对象
    let primitiveType = PrimitiveType(quote(Int8))
    
    // 输出 PrimitiveType 节点转化成的 Tokens
    println("primitiveType.toTokens(): ${primitiveType.toTokens()}")
}

运行结果:

primitiveType.toTokens(): Int8

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: PrimitiveType) {
        println("Visiting PrimitiveType")
    }
}

main(): Unit {
    // 创建一个 PrimitiveType 对象
    let primitiveType = PrimitiveType(quote(Int8))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 PrimitiveType 节点
    primitiveType.traverse(visitor)
}

运行结果:

Visiting PrimitiveType

class PrimitiveTypeExpr

public class PrimitiveTypeExpr <: Expr {
    public init(kind: Tokens)
    public init()
}

功能:表示基本类型表达式节点。

PrimitiveTypeExpr 节点:编译器内置的基本类型作为表达式出现在节点中。如 Int64.toSting() 中的 Int64

父类型:

prop keyword

public mut prop keyword: Token

功能:获取或设置 PrimitiveTypeExpr 中的基本类型关键字。

类型:Token

init()

public init()

功能:构造一个默认的 PrimitiveTypeExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 PrimitiveTypeExpr 对象
    let primitiveTypeExpr = PrimitiveTypeExpr()
    
    // 设置 PrimitiveTypeExpr 的属性
    primitiveTypeExpr.keyword = Token(TokenKind.INT8, "Int8")
    
    // 输出 PrimitiveTypeExpr 节点转化成的 Tokens
    println("primitiveTypeExpr.toTokens(): ${primitiveTypeExpr.toTokens()}")
}

运行结果:

primitiveTypeExpr.toTokens(): Int8

init(Tokens)

public init(kind: Tokens)

功能:构造一个 PrimitiveTypeExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 使用 quote 宏创建 Tokens
    let tokens = quote(Int8)
    
    // 使用 Tokens 构造 PrimitiveTypeExpr 对象
    let primitiveTypeExpr = PrimitiveTypeExpr(tokens)
    
    // 输出 PrimitiveTypeExpr 节点转化成的 Tokens
    println("primitiveTypeExpr.toTokens(): ${primitiveTypeExpr.toTokens()}")
}

运行结果:

primitiveTypeExpr.toTokens(): Int8

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个 PrimitiveTypeExpr 对象
    let primitiveTypeExpr = PrimitiveTypeExpr(quote(Int8))
    
    // 输出 PrimitiveTypeExpr 节点转化成的 Tokens
    println("primitiveTypeExpr.toTokens(): ${primitiveTypeExpr.toTokens()}")
}

运行结果:

primitiveTypeExpr.toTokens(): Int8

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: PrimitiveTypeExpr) {
        println("Visiting PrimitiveTypeExpr")
    }
}

main(): Unit {
    // 创建一个 PrimitiveTypeExpr 对象
    let primitiveTypeExpr = PrimitiveTypeExpr(quote(Int8))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 PrimitiveTypeExpr 节点
    primitiveTypeExpr.traverse(visitor)
}

运行结果:

Visiting PrimitiveTypeExpr

class Program

public class Program <: Node {
    public init(inputs: Tokens)
    public init()
}

功能:表示一个仓颉源码文件节点。

一个仓颉源码文件节点主要包括包定义节点,包导入节点和 TopLevel 作用域内的所有声明节点。

说明:

任何一个仓颉源码文件都可以被解析为一个 Program 类型。

父类型:

prop decls

public mut prop decls: ArrayList<Decl>

功能:获取或设置仓颉源码文件中 TopLevel 作用域内定义的声明节点列表。

类型:ArrayList<Decl>

prop featuresDirective

public mut prop featuresDirective: Option<FeaturesDirective> 

功能:获取或设置仓颉源码文件中 TopLevel 作用域内定义的 features 声明节点。

类型:Option<FeaturesDirective>

prop importLists

public mut prop importLists: ArrayList<ImportList>

功能:获取或设置仓颉源码文件中包导入节点 ImportList 的列表。

类型:ArrayList<ImportList>

prop packageHeader

public mut prop packageHeader: PackageHeader

功能:获取或设置仓颉源码文件中包的声明节点 PackageHeader

类型:PackageHeader

init()

public init()

功能:构造一个默认的 Program 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 Program 对象
    let program = Program()
    
    // 设置 Program 的属性
    program.packageHeader = PackageHeader(quote(package test))
    program.importLists = ArrayList<ImportList>()
    program.decls = ArrayList<Decl>()
    
    // 转化为 Tokens 并输出
    println("program.toTokens(): ${program.toTokens()}")
}

运行结果:

program.toTokens(): package test

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 Program 对象。

参数:

异常:

  • ASTException - 当输入的 Tokens 类型无法构造为一个文件节点时,抛出异常。

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 Program 对象
    let program = Program(quote(let a = 1))
    
    // 转化为 Tokens 并输出
    println("program.toTokens(): ${program.toTokens()}")
}

运行结果:

program.toTokens(): let a = 1

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个 Program 对象
    let program = Program(quote(let a = 1))
    
    // 转化为 Tokens 并输出
    println("program.toTokens(): ${program.toTokens()}")
}

运行结果:

program.toTokens(): let a = 1

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: Program) {
        println("Visiting Program")
    }
}

main(): Unit {
    // 创建一个 Program 对象
    let program = Program(quote(let a = 1))
    
    // 使用自定义访问器遍历 Program 节点
    program.traverse(MyVisitor())
}

运行结果:

Visiting Program

class PropDecl

public class PropDecl <: Decl {
    public init(inputs: Tokens)
    public init()
}

功能:表示一个属性定义节点。

一个 PropDecl 节点:prop X: Int64 { get() { 0 } }

父类型:

prop colon

public mut prop colon: Token

功能:获取或设置 PropDecl 节点的冒号。

类型:Token

异常:

prop declType

public mut prop declType : TypeNode

功能:获取或设置 PropDecl 节点的返回类型。

类型:TypeNode

prop getter

public mut prop getter: FuncDecl

功能:获取或设置 PropDecl 节点的 getter 函数。

类型:FuncDecl

异常:

prop lBrace

public mut prop lBrace: Token

功能:获取或设置 PropDecl 节点的 "{"。

类型:Token

异常:

prop rBrace

public mut prop rBrace: Token

功能:获取或设置 PropDecl 节点的 "}"。

类型:Token

异常:

prop setter

public mut prop setter: FuncDecl

功能:获取或设置 PropDecl 节点的 setter 函数。

类型:FuncDecl

异常:

init()

public init()

功能:构造一个默认的 PropDecl 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 PropDecl 对象
    let propDecl = PropDecl()
    
    // 设置 PropDecl 的属性
    propDecl.keyword = quote(prop)[0]
    propDecl.identifier = quote(testProp)[0]
    propDecl.colon = Token(TokenKind.COLON)
    propDecl.declType = PrimitiveType(quote(Int8))

    propDecl.lBrace = Token(TokenKind.LCURL)
    propDecl.rBrace = Token(TokenKind.RCURL)
    
    // 转化为 Tokens 并输出
    println("propDecl.toTokens(): ${propDecl.toTokens()}")
}

运行结果:

propDecl.toTokens(): prop testProp: Int8 {
}

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 PropDecl 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 PropDecl 对象
    let propDecl = PropDecl(quote(prop x: Int32 { get() { 0 } }))
    
    // 转化为 Tokens 并输出
    println("propDecl.toTokens(): ${propDecl.toTokens()}")
}

运行结果:

propDecl.toTokens(): prop x: Int32 {
    get() {
        0
    }
}

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个带实际值的 PropDecl 对象
    let propDecl = PropDecl(quote(prop x: Int32 { get() { 0 } }))
    
    // 转化为 Tokens 并输出
    println("propDecl.toTokens(): ${propDecl.toTokens()}")
}

运行结果:

propDecl.toTokens(): prop x: Int32 {
    get() {
        0
    }
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: PropDecl) {
        println("Visiting PropDecl")
    }
}

main(): Unit {
    // 创建一个 PropDecl 对象
    let propDecl = PropDecl(quote(prop x: Int32 { get() { 0 } }))
    
    // 使用自定义访问器遍历 PropDecl 节点
    propDecl.traverse(MyVisitor())
}

运行结果:

Visiting PropDecl

class QualifiedType

public class QualifiedType <: TypeNode {
    public init(inputs: Tokens)
    public init()
}

功能:表示一个用户自定义成员类型。

例如 var a : T.a 中的 T.a, 其中 T 是包名,a 是从 T 包中导入的类型。

父类型:

prop baseType

public mut prop baseType: TypeNode

功能:获取或设置 QualifiedType 节点的成员访问类型主体,如 var a : T.a 中的 T

类型:TypeNode

prop commas

public mut prop commas: Tokens

功能:获取或设置 QualifiedType 节点中的 "," 词法单元序列,可能为空。

类型:Tokens

异常:

prop dot

public mut prop dot: Token

功能:获取或设置 QualifiedType 节点中的 "." 。

类型:Token

异常:

prop identifier

public mut prop identifier: Token

功能:获取或设置 QualifiedType 节点成员的标识符,如 var a : T.a 中的 a

类型:Token

prop lAngle

public mut prop lAngle: Token

功能:获取或设置 QualifiedType 节点中的左尖括号词法单元,可能为 ILLEGAL 的词法单元。

类型:Token

异常:

prop rAngle

public mut prop rAngle: Token

功能:获取或设置 QualifiedType 节点中的右尖括号词法单元,可能为 ILLEGAL 的词法单元。

类型:Token

异常:

prop typeArguments

public mut prop typeArguments: ArrayList<TypeNode>

功能:获取或设置 QualifiedType 节点中的实例化类型的列表,如 T.a<Int32> 中的 Int32,列表可能为空。

类型:ArrayList<TypeNode>

init()

public init()

功能:构造一个默认的 QualifiedType 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 QualifiedType 对象
    let qualifiedType = QualifiedType()
    
    // 设置 QualifiedType 的属性
    qualifiedType.baseType = RefType(quote(Package))
    qualifiedType.identifier = Token(TokenKind.IDENTIFIER, "Type")
    qualifiedType.dot = Token(TokenKind.DOT)
    qualifiedType.commas = quote(,)
    qualifiedType.lAngle = Token(TokenKind.LT)
    qualifiedType.rAngle = Token(TokenKind.GT)
    qualifiedType.typeArguments = ArrayList<TypeNode>()
    
    // 转化为 Tokens 并输出
    println("qualifiedType.toTokens(): ${qualifiedType.toTokens()}")
}

运行结果:

qualifiedType.toTokens(): Package.Type

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 QualifiedType 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 QualifiedType 对象
    let qualifiedType = QualifiedType(quote(Package.Type))
    
    // 转化为 Tokens 并输出
    println("qualifiedType.toTokens(): ${qualifiedType.toTokens()}")
}

运行结果:

qualifiedType.toTokens(): Package.Type

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 QualifiedType 对象
    let qualifiedType = QualifiedType(quote(Package.Type))
    
    // 转化为 Tokens 并输出
    println("qualifiedType.toTokens(): ${qualifiedType.toTokens()}")
}

运行结果:

qualifiedType.toTokens(): Package.Type

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: QualifiedType) {
        println("Visiting QualifiedType")
    }
}

main(): Unit {
    // 创建一个 QualifiedType 对象
    let qualifiedType = QualifiedType(quote(Package.Type))
    
    // 使用自定义访问器遍历 QualifiedType 节点
    qualifiedType.traverse(MyVisitor())
}

运行结果:

Visiting QualifiedType

class QuoteExpr

public class QuoteExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示 quote 表达式节点。

一个 QuoteExpr 节点: quote(var ident = 0)

父类型:

prop exprs

public mut prop exprs: ArrayList<Expr>

功能:获取或设置 QuoteExpr 中由 () 括起的内部引用表达式节点。

类型:ArrayList<Expr>

prop keyword

public mut prop keyword: Token

功能:获取或设置 QuoteExprquote 关键字。

类型:Token

异常:

prop lParen

public mut prop lParen: Token

功能:获取或设置 QuoteExpr 中的 "("。

类型:Token

异常:

prop rParen

public mut prop rParen: Token

功能:获取或设置 QuoteExpr 中的 ")"。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 QuoteExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 QuoteExpr 对象
    let quoteExpr = QuoteExpr()
    
    // 设置 QuoteExpr 的属性
    quoteExpr.keyword = Token(TokenKind.QUOTE)
    quoteExpr.lParen = Token(TokenKind.LPAREN)
    quoteExpr.rParen = Token(TokenKind.RPAREN)
    quoteExpr.exprs = ArrayList<Expr>()
    
    // 转化为 Tokens 并输出
    println("quoteExpr.toTokens(): ${quoteExpr.toTokens()}")
}

运行结果:

quoteExpr.toTokens(): quote()

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 QuoteExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 QuoteExpr 对象
    let quoteExpr = QuoteExpr(quote(quote(x + 1)))
    
    // 转化为 Tokens 并输出
    println("quoteExpr.toTokens(): ${quoteExpr.toTokens()}")
}

运行结果:

quoteExpr.toTokens(): quote(x + 1)

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个带实际值的 QuoteExpr 对象
    let quoteExpr = QuoteExpr(quote(quote(x + 1)))
    
    // 转化为 Tokens 并输出
    println("quoteExpr.toTokens(): ${quoteExpr.toTokens()}")
}

运行结果:

quoteExpr.toTokens(): quote(x + 1)

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: QuoteExpr) {
        println("Visiting QuoteExpr")
    }
}

main(): Unit {
    // 创建一个 QuoteExpr 对象
    let quoteExpr = QuoteExpr(quote(quote(x + 1)))
    
    // 使用自定义访问器遍历 QuoteExpr 节点
    quoteExpr.traverse(MyVisitor())
}

运行结果:

Visiting QuoteExpr

class QuoteToken

public class QuoteToken <: Expr {}

功能:表示 quote 表达式节点内任意合法的 token

父类型:

prop tokens

public mut prop tokens: Tokens

功能:获取 QuoteToken 内的 Tokens

类型:Tokens

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 使用 quote 宏创建 Tokens
    let tokens = quote(quote(x + 1))
    
    // 使用 Tokens 构造 QuoteExpr 对象
    let quoteExpr = QuoteExpr(tokens)

    // 获取一个 QuoteToken 对象
    let quoteToken = quoteExpr.exprs[0]
    
    // 转化为 Tokens 并输出
    println("quoteToken.toTokens(): ${quoteToken.toTokens()}")
}

运行结果:

quoteToken.toTokens(): x + 1

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: QuoteToken) {
        println("Visiting QuoteToken")
    }
}

main(): Unit {
    // 创建一个 QuoteToken 对象
    let tokens = quote(quote(x + 1))
    let quoteExpr = QuoteExpr(tokens)
    let quoteToken = quoteExpr.exprs[0]

    // 使用自定义访问器遍历 QuoteToken 节点
    quoteToken.traverse(MyVisitor())
}

运行结果:

Visiting QuoteToken

class RangeExpr

public class RangeExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示包含区间操作符的表达式。

RangeExpr 节点:存在两种 Range 操作符:....=,分别用于创建左闭右开和左闭右闭的 Range 实例。它们的使用方式分别为 start..end:stepstart..=end:step

父类型:

prop colon

public mut prop colon: Token

功能:获取或设置 RangeExpr 中的 ":" 操作符。

类型:Token

异常:

prop end

public mut prop end: Expr

功能:获取或设置 RangeExpr 中的终止值。

类型:Expr

异常:

  • ASTException - 终止表达式省略。只有在 Range<Int64> 类型的实例用在下标操作符 [] 为空的场景。

prop op

public mut prop op: Token

功能:获取或设置 RangeExpr 中的 Range 的操作符。

类型:Token

prop start

public mut prop start: Expr

功能:获取或设置 RangeExpr 中的起始值。

类型:Expr

异常:

  • ASTException - 起始表达式省略。只有在 Range<Int64> 类型的实例用在下标操作符 [] 为空的场景。

prop step

public mut prop step: Expr

功能:获取或设置 RangeExpr 中序列中前后两个元素之间的差值。

类型:Expr

异常:

init()

public init()

功能:构造一个默认的 RangeExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 RangeExpr 对象
    let rangeExpr = RangeExpr()

    // 设置 RangeExpr 的属性
    rangeExpr.start = LitConstExpr(quote(1))
    rangeExpr.end = LitConstExpr(quote(5))
    rangeExpr.op = Token(TokenKind.RANGEOP)

    // 转化为 Tokens 并输出
    println("rangeExpr.toTokens(): ${rangeExpr.toTokens()}")
}

运行结果:

rangeExpr.toTokens(): 1 .. 5

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 RangeExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 RangeExpr 对象
    let rangeExpr = RangeExpr(quote(1..5))

    // 转化为 Tokens 并输出
    println("rangeExpr.toTokens(): ${rangeExpr.toTokens()}")
}

运行结果:

rangeExpr.toTokens(): 1 .. 5

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let rangeExpr = RangeExpr(quote(2..=10:2))

    // 转化为 Tokens 并输出
    println("rangeExpr.toTokens(): ${rangeExpr.toTokens()}")
}

运行结果:

rangeExpr.toTokens(): 2 ..= 10: 2

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: RangeExpr) {
        println("Visiting RangeExpr")
    }
}

main(): Unit {
    let rangeExpr = RangeExpr(quote(1..10))

    // 使用自定义访问器遍历 RangeExpr 节点
    rangeExpr.traverse(MyVisitor())
}

运行结果:

Visiting RangeExpr

class RefExpr

public class RefExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示引用一个声明的表达式节点。

一个 RefExpr 节点:var b = a + 1 中的 a 是一个 RefExpr

父类型:

prop commas

public mut prop commas: Tokens

功能:获取或设置 RefExpr 节点中的 "," 词法单元序列,可能为空。

类型:Tokens

异常:

prop identifier

public mut prop identifier: Token

功能:获取或设置 RefExpr 节点中的自定义类型的标识符。

类型:Token

prop lAngle

public mut prop lAngle: Token

功能:获取或设置 RefExpr 节点中的左尖括号。

类型:Token

异常:

prop rAngle

public mut prop rAngle: Token

功能:获取或设置 RefExpr 节点中的右尖括号。

类型:Token

异常:

prop typeArguments

public mut prop typeArguments: ArrayList<TypeNode>

功能:获取或设置 RefExpr 节点中的实例化类型。

类型:ArrayList<TypeNode>

init()

public init()

功能:构造一个默认的 RefExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 RefExpr 对象
    let refExpr = RefExpr()
    
    // 设置 RefExpr 的属性
    refExpr.identifier = Token(TokenKind.IDENTIFIER, "myRef")
    
    // 转化为 Tokens 并输出
    println("refExpr.toTokens(): ${refExpr.toTokens()}")
}

运行结果:

refExpr.toTokens(): myRef

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 RefExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 RefExpr 对象
    let refExpr = RefExpr(quote(myRef))
    
    // 转化为 Tokens 并输出
    println("refExpr.toTokens(): ${refExpr.toTokens()}")
}

运行结果:

refExpr.toTokens(): myRef

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let refExpr = RefExpr(quote(testRef))
    
    // 转化为 Tokens 并输出
    println("refExpr.toTokens(): ${refExpr.toTokens()}")
}

运行结果:

refExpr.toTokens(): testRef

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: RefExpr) {
        println("Visiting RefExpr")
    }
}

main(): Unit {
    let refExpr = RefExpr(quote(myRef))
    
    // 使用自定义访问器遍历 RefExpr 节点
    refExpr.traverse(MyVisitor())
}

运行结果:

Visiting RefExpr

class RefType

public class RefType <: TypeNode {
    public init(inputs: Tokens)
    public init()
}

功能:表示一个非基础类型节点。

例如用户通过 classstructenum 等定义的自定义类型,以及 ArrayString 等内置类型都可以使用 RefType 表示。例如 var a : A 中的 A

父类型:

prop commas

public mut prop commas: Tokens

功能:获取或设置 RefType 节点中的 "," 词法单元序列,可能为空。

类型:Tokens

异常:

prop identifier

public mut prop identifier: Token

功能:获取或设置构造 RefType 类型的关键字,如 var a : A = A() 中的 A

类型:Token

prop lAngle

public mut prop lAngle: Token

功能:获取或设置 RefType 节点中的左尖括号词法单元,可能为 ILLEGAL 的词法单元。

类型:Token

异常:

prop rAngle

public mut prop rAngle: Token

功能:获取或设置 RefType 节点中的右尖括号词法单元,可能为 ILLEGAL 的词法单元。

类型:Token

异常:

prop typeArguments

public mut prop typeArguments: ArrayList<TypeNode>

功能:获取或设置 RefType 节点中的实例化类型的列表,可能为空,如 var a : Array<Int32> 中的 Int32

类型:ArrayList<TypeNode>

init()

public init()

功能:构造一个默认的 RefType 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 RefType 对象
    let refType = RefType()
    
    // 设置 RefType 的属性
    refType.identifier = Token(TokenKind.IDENTIFIER, "MyType")
    
    // 转化为 Tokens 并输出
    println("refType.toTokens(): ${refType.toTokens()}")
}

运行结果:

refType.toTokens(): MyType

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 RefType 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 RefType 对象
    let refType = RefType(quote(MyType))
    
    // 转化为 Tokens 并输出
    println("refType.toTokens(): ${refType.toTokens()}")
}

运行结果:

refType.toTokens(): MyType

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let refType = RefType(quote(TestType))
    
    // 转化为 Tokens 并输出
    println("refType.toTokens(): ${refType.toTokens()}")
}

运行结果:

refType.toTokens(): TestType

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: RefType) {
        println("Visiting RefType")
    }
}

main(): Unit {
    let refType = RefType(quote(MyType))
    
    // 使用自定义访问器遍历 RefType 节点
    refType.traverse(MyVisitor())
}

运行结果:

Visiting RefType

class ResumeExpr

public class ResumeExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示一个 resume 表达式节点,可选包含 withthrowing 子句。

一个 ResumeExpr 节点示例: resume r with 42

父类型:

prop keywordR

public mut prop keywordR: Token

功能:获取或设置 resume 关键字的词法单元。

类型:Token

异常:

prop keywordW

public mut prop keywordW: Option<Token>

功能:获取或设置 with 关键字的词法单元(如果存在)。

类型:Option<Token>

异常:

prop withExpr

public mut prop withExpr: Option<Expr>

功能:获取或设置 with 关键字之后的表达式。

类型:Option<Expr>

prop keywordT

public mut prop keywordT: Option<Token>

功能:获取或设置 throwing 关键字的词法单元(如果存在)。

类型:Option<Token>

异常:

prop throwingExpr

public mut prop throwingExpr: Option<Expr>

功能:获取或设置 throwing 关键字之后的表达式。

类型:Option<Expr>

init()

public init()

功能:构造一个默认的 ResumeExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 ResumeExpr 对象
    let resumeExpr = ResumeExpr()
    
    // 设置 ResumeExpr 的属性
    resumeExpr.throwingExpr = Some(CallExpr(quote(Exception("Error from effect"))))
    resumeExpr.keywordT = Token(TokenKind.THROWING, "throwing")
    
    // 转化为 Tokens 并输出
    println("resumeExpr.toTokens(): ${resumeExpr.toTokens()}")
}

运行结果:

resumeExpr.toTokens(): resume throwing Exception("Error from effect")

init(Tokens)

public init(inputs: Tokens)

功能:从词法单元流构造一个 ResumeExpr 对象。

注意:

编译时需要添加 --experimental--enable-eh 编译选项以支持 Effect Handlers 特性。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 ResumeExpr 对象
    let resumeExpr = ResumeExpr(quote(resume throwing Exception("Error from effect")))
    
    // 转化为 Tokens 并输出
    println("resumeExpr.toTokens(): ${resumeExpr.toTokens()}")
}

运行结果:

resumeExpr.toTokens(): resume throwing Exception("Error from effect")

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 ResumeExpr 对象
    let resumeExpr = ResumeExpr()
    
    // 设置 ResumeExpr 的属性
    resumeExpr.throwingExpr = Some(CallExpr(quote(Exception())))
    resumeExpr.keywordT = Token(TokenKind.THROWING, "throwing")
    
    // 转化为 Tokens 并输出
    println("resumeExpr.toTokens(): ${resumeExpr.toTokens()}")
}

运行结果:

resumeExpr.toTokens(): resume throwing Exception()

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ResumeExpr) {
        println("Visiting ResumeExpr")
    }
}

main(): Unit {
    // 构造一个默认的 ResumeExpr 对象
    let resumeExpr = ResumeExpr()
    
    // 设置 ResumeExpr 的属性
    resumeExpr.throwingExpr = Some(CallExpr(quote(Exception())))
    resumeExpr.keywordT = Token(TokenKind.THROWING, "throwing")
    
    // 使用自定义访问器遍历 ResumeExpr 节点
    resumeExpr.traverse(MyVisitor())
}

运行结果:

Visiting ResumeExpr

class ReturnExpr

public class ReturnExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示 return 表达式节点。

一个 ReturnExpr 节点:return 1

父类型:

prop expr

public mut prop expr: Expr

功能:获取或设置 ReturnExpr 节点中的表达式节点。

类型:Expr

异常:

prop keyword

public mut prop keyword: Token

功能:获取或设置 ReturnExpr 节点中的关键字。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 ReturnExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 ReturnExpr 对象
    let returnExpr = ReturnExpr()
    
    // 设置 ReturnExpr 的属性
    returnExpr.expr = LitConstExpr(quote(42))
    
    // 转化为 Tokens 并输出
    println("returnExpr.toTokens(): ${returnExpr.toTokens()}")
}

运行结果:

returnExpr.toTokens(): return 42

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 ReturnExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 ReturnExpr 对象
    let returnExpr = ReturnExpr(quote(return 100))
    
    // 转化为 Tokens 并输出
    println("returnExpr.toTokens(): ${returnExpr.toTokens()}")
}

运行结果:

returnExpr.toTokens(): return 100

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let returnExpr = ReturnExpr(quote(return "hello"))
    
    // 转化为 Tokens 并输出
    println("returnExpr.toTokens(): ${returnExpr.toTokens()}")
}

运行结果:

returnExpr.toTokens(): return "hello"

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ReturnExpr) {
        println("Visiting ReturnExpr")
    }
}

main(): Unit {
    let returnExpr = ReturnExpr(quote(return))
    
    // 使用自定义访问器遍历 ReturnExpr 节点
    returnExpr.traverse(MyVisitor())
}

运行结果:

Visiting ReturnExpr

class SpawnExpr

public class SpawnExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示 Spawn 表达式。

一个 SpawnExpr 节点由 spawn 关键字和一个不包含形参的闭包组成,例如:spawn { add(1, 2) }

父类型:

prop keyword

public mut prop keyword: Token

功能:获取或设置 SpawnExpr 中的 spawn 关键字。

类型:Token

异常:

prop lParen

public mut prop lParen: Token

功能:获取或设置 SpawnExpr 中的 "("。

类型:Token

异常:

prop lambdaExpr

public mut prop lambdaExpr: LambdaExpr

功能:获取或设置 SpawnExpr 中的不含形参的闭包。

类型:LambdaExpr

prop rParen

public mut prop rParen: Token

功能:获取或设置 SpawnExpr 中的 ")"。

类型:Token

异常:

prop threadContext

public mut prop threadContext: Expr

功能:获取或设置 SpawnExpr 中的线程上下文环境表达式。

类型:Expr

异常:

init()

public init()

功能:构造一个默认的 SpawnExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 SpawnExpr 对象
    let spawnExpr = SpawnExpr()
    
    // 设置 SpawnExpr 的属性
    spawnExpr.lambdaExpr = LambdaExpr(quote({ => println("New thread") }))

    // 转化为 Tokens 并输出
    println("spawnExpr.toTokens(): ${spawnExpr.toTokens()}")
}

运行结果:

spawnExpr.toTokens(): spawn { =>
    println("New thread")
}

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 SpawnExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 SpawnExpr 对象
    let spawnExpr = SpawnExpr(quote(spawn { add(1, 2) }))
    
    // 转化为 Tokens 并输出
    println("spawnExpr.toTokens(): ${spawnExpr.toTokens()}")
}

运行结果:

spawnExpr.toTokens(): spawn { add(1, 2)
}

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let spawnExpr = SpawnExpr(quote(spawn { add(1, 2) }))
    
    // 转化为 Tokens 并输出
    println("spawnExpr.toTokens(): ${spawnExpr.toTokens()}")
}

运行结果:

spawnExpr.toTokens(): spawn { add(1, 2)
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: SpawnExpr) {
        println("Visiting SpawnExpr")
    }
}

main(): Unit {
    let spawnExpr = SpawnExpr(quote(spawn { add(1, 2) }))
    
    // 使用自定义访问器遍历 SpawnExpr 节点
    spawnExpr.traverse(MyVisitor())
}

运行结果:

Visiting SpawnExpr

class StructDecl

public class StructDecl <: Decl {
    public init(inputs: Tokens)
    public init()
}

功能:表示一个 Struct 节点。

Struct 的定义使用 struct 关键字,定义依次为:可缺省的修饰符、struct 关键字、struct 名、可选的类型参数、是否指定父接口、可选的泛型约束、struct 体的定义。

父类型:

prop body

public mut prop body: Body

功能:获取或设置 StructDecl 节点的类体。

类型:Body

prop superTypeBitAnds

public mut prop superTypeBitAnds: Tokens

功能:获取或设置 StructDecl 节点的父接口声明中的 & 操作符的词法单元序列,可能为空。

类型:Tokens

异常:

prop superTypes

public mut prop superTypes: ArrayList<TypeNode>

功能:获取或设置 StructDecl 节点的父接口。

类型:ArrayList<TypeNode>

prop upperBound

public mut prop upperBound: Token

功能:获取或设置 <: 操作符。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 StructDecl 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 StructDecl 对象
    let structDecl = StructDecl()
    
    // 设置 StructDecl 的属性
    structDecl.identifier = Token(TokenKind.IDENTIFIER, "Point")
    structDecl.keyword = Token(TokenKind.STRUCT)
    structDecl.body = Body()

    // 转化为 Tokens 并输出
    println("structDecl.toTokens(): ${structDecl.toTokens()}")
}

运行结果:

structDecl.toTokens(): struct Point {
}

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 StructDecl 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 StructDecl 对象
    let structDecl = StructDecl(quote(struct Person { let name: String }))
    
    // 转化为 Tokens 并输出
    println("structDecl.toTokens(): ${structDecl.toTokens()}")
}

运行结果:

structDecl.toTokens(): struct Person {
    let name: String
}

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let structDecl = StructDecl(quote(struct Data { let value: Int64 }))
    
    // 转化为 Tokens 并输出
    println("structDecl.toTokens(): ${structDecl.toTokens()}")
}

运行结果:

structDecl.toTokens(): struct Data {
    let value: Int64
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: StructDecl) {
        println("Visiting StructDecl")
    }
}

main(): Unit {
    let structDecl = StructDecl(quote(struct Test {}))
    
    // 使用自定义访问器遍历 StructDecl 节点
    structDecl.traverse(MyVisitor())
}

运行结果:

Visiting StructDecl

class SubscriptExpr

public class SubscriptExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示索引访问表达式。

SubscriptExpr 节点:用于那些支持索引访问的类型(包括 Array 类型和 Tuple 类型)通过下标来访问其具体位置的元素,如 arr[0]

父类型:

prop baseExpr

public mut prop baseExpr: Expr

功能:获取或设置 SubscriptExpr 中的表达式。

类型:Expr

prop indexList

public mut prop indexList: ArrayList<Expr>

功能:获取或设置 SubscriptExpr 中的索引表达式序列。

类型:ArrayList<Expr>

prop lSquare

public mut prop lSquare: Token

功能:获取或设置 SubscriptExpr 中的 "["。

类型:Token

异常:

prop rSquare

public mut prop rSquare: Token

功能:获取或设置 SubscriptExpr 中的 "]"。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 SubscriptExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 SubscriptExpr 对象
    let subscriptExpr = SubscriptExpr()
    
    // 设置 SubscriptExpr 的属性
    subscriptExpr.baseExpr = RefExpr(quote(arr))
    subscriptExpr.indexList = ArrayList<Expr>([LitConstExpr(quote(0))])
    
    // 转化为 Tokens 并输出
    println("subscriptExpr.toTokens(): ${subscriptExpr.toTokens()}")
}

运行结果:

subscriptExpr.toTokens(): arr[0]

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 SubscriptExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 SubscriptExpr 对象
    let subscriptExpr = SubscriptExpr(quote(arr[1]))
    
    // 转化为 Tokens 并输出
    println("subscriptExpr.toTokens(): ${subscriptExpr.toTokens()}")
}

运行结果:

subscriptExpr.toTokens(): arr[1]

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let subscriptExpr = SubscriptExpr(quote(data[2]))
    
    // 转化为 Tokens 并输出
    println("subscriptExpr.toTokens(): ${subscriptExpr.toTokens()}")
}

运行结果:

subscriptExpr.toTokens(): data[2]

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: SubscriptExpr) {
        println("Visiting SubscriptExpr")
    }
}

main(): Unit {
    let subscriptExpr = SubscriptExpr(quote(arr[0]))
    
    // 使用自定义访问器遍历 SubscriptExpr 节点
    subscriptExpr.traverse(MyVisitor())
}

运行结果:

Visiting SubscriptExpr

class SynchronizedExpr

public class SynchronizedExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示 synchronized 表达式。

一个 SynchronizedExpr 节点由 synchronized 关键字和 StructuredMutex 对以及后面的代码块组成, 例如 synchronized(m) { foo() }

父类型:

prop block

public mut prop block: Block

功能:获取或设置 SynchronizedExpr 修饰的代码块。

类型:Block

prop keyword

public mut prop keyword: Token

功能:获取或设置 SynchronizedExpr 中的 synchronized 关键字。

类型:Token

异常:

  • ASTException - 当设置的 Token 不是 synchronized 关键字时,抛出异常。

prop lParen

public mut prop lParen: Token

功能:获取或设置 SynchronizedExpr 中的 "("。

类型:Token

异常:

prop rParen

public mut prop rParen: Token

功能:获取或设置 SynchronizedExpr 中的 ")"。

类型:Token

异常:

prop structuredMutex

public mut prop structuredMutex: Expr

功能:获取或设置 SynchronizedExpr 中的 StructuredMutex 的对象。

类型:Expr

init()

public init()

功能:构造一个默认的 SynchronizedExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 SynchronizedExpr 对象
    let synchronizedExpr = SynchronizedExpr()
    
    // 设置 SynchronizedExpr 的属性
    synchronizedExpr.structuredMutex = RefExpr(quote(lock))

    let block = Block()
    block.lBrace = Token(TokenKind.LCURL)
    block.rBrace = Token(TokenKind.RCURL)
    synchronizedExpr.block = block

    // 转化为 Tokens 并输出
    println("synchronizedExpr.toTokens(): ${synchronizedExpr.toTokens()}")
}

运行结果:

synchronizedExpr.toTokens(): synchronized(lock) {
}

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 SynchronizedExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 SynchronizedExpr 对象
    let synchronizedExpr = SynchronizedExpr(quote(synchronized(mutex) { }))
    
    // 转化为 Tokens 并输出
    println("synchronizedExpr.toTokens(): ${synchronizedExpr.toTokens()}")
}

运行结果:

synchronizedExpr.toTokens(): synchronized(mutex) {
}

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let synchronizedExpr = SynchronizedExpr(quote(synchronized(obj) { }))
    
    // 转化为 Tokens 并输出
    println("synchronizedExpr.toTokens(): ${synchronizedExpr.toTokens()}")
}

运行结果:

synchronizedExpr.toTokens(): synchronized(obj) {
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: SynchronizedExpr) {
        println("Visiting SynchronizedExpr")
    }
}

main(): Unit {
    let synchronizedExpr = SynchronizedExpr(quote(synchronized(lock) { }))
    
    // 使用自定义访问器遍历 SynchronizedExpr 节点
    synchronizedExpr.traverse(MyVisitor())
}

运行结果:

Visiting SynchronizedExpr

class ThisType

public class ThisType <: TypeNode {
    public init(inputs: Tokens)
    public init()
}

功能:表示 This 类型节点。

父类型:

prop keyword

public mut prop keyword: Token

功能:获取或设置 ThisType 节点关键字 This 的词法单元。

类型:Token

init()

public init()

功能:构造一个默认的 ThisType 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 ThisType 对象
    let thisType = ThisType()
    
    // 转化为 Tokens 并输出
    println("thisType.toTokens(): ${thisType.toTokens()}")
}

运行结果:

thisType.toTokens(): This

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 ThisType 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 ThisType 对象
    let thisType = ThisType(quote(This))
    
    // 转化为 Tokens 并输出
    println("thisType.toTokens(): ${thisType.toTokens()}")
}

运行结果:

thisType.toTokens(): This

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let thisType = ThisType(quote(This))
    
    // 转化为 Tokens 并输出
    println("thisType.toTokens(): ${thisType.toTokens()}")
}

运行结果:

thisType.toTokens(): This

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ThisType) {
        println("Visiting ThisType")
    }
}

main(): Unit {
    let thisType = ThisType(quote(This))
    
    // 使用自定义访问器遍历 ThisType 节点
    thisType.traverse(MyVisitor())
}

运行结果:

Visiting ThisType

class ThrowExpr

public class ThrowExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示 throw 表达式节点。

一个 ThrowExpr 节点:throw Exception()

父类型:

prop expr

public mut prop expr: Expr

功能:获取或设置 ThrowExpr 节点中的表达式节点。

类型:Expr

prop keyword

public mut prop keyword: Token

功能:获取或设置 ThrowExpr 节点中的关键字。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 ThrowExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 ThrowExpr 对象
    let throwExpr = ThrowExpr()
    
    // 设置 ThrowExpr 的属性
    throwExpr.expr = CallExpr(quote(Exception("Error message")))
    
    // 转化为 Tokens 并输出
    println("throwExpr.toTokens(): ${throwExpr.toTokens()}")
}

运行结果:

throwExpr.toTokens(): throw Exception("Error message")

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 ThrowExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 ThrowExpr 对象
    let throwExpr = ThrowExpr(quote(throw Exception("Error message")))
    
    // 转化为 Tokens 并输出
    println("throwExpr.toTokens(): ${throwExpr.toTokens()}")
}

运行结果:

throwExpr.toTokens(): throw Exception("Error message")

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let throwExpr = ThrowExpr(quote(throw Exception("Error message")))
    
    // 转化为 Tokens 并输出
    println("throwExpr.toTokens(): ${throwExpr.toTokens()}")
}

运行结果:

throwExpr.toTokens(): throw Exception("Error message")

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ThrowExpr) {
        println("Visiting ThrowExpr")
    }
}

main(): Unit {
    let throwExpr = ThrowExpr(quote(throw Exception("Error message")))
    
    // 使用自定义访问器遍历 ThrowExpr 节点
    throwExpr.traverse(MyVisitor())
}

运行结果:

Visiting ThrowExpr

class Tokens

public open class Tokens <: ToString & Iterable<Token> & ToBytes {
    protected var tokens: ArrayList<Token> = ArrayList<Token>(0)
    public init()
    public init(tokArray: Array<Token>)
    public init(tokArrayList: ArrayList<Token>)
}

功能:对 Token 序列进行封装的类型。

父类型:

var tokens

protected var tokens: ArrayList<Token> = ArrayList<Token>(0)

功能:获取或设置内部以ArrayList<Token>格式存储的全部Token

类型:ArrayList<Token>

prop size

public open prop size: Int64

功能:获取 Tokens 对象中 Token 类型的数量。

类型:Int64

init()

public init()

功能:构造一个默认的 Tokens 对象。

示例:

import std.ast.*

main(): Unit {
    let tokens = Tokens()
    
    // 添加 token
    tokens.append(Token(TokenKind.IDENTIFIER, "hello"))
    tokens.append(Token(TokenKind.IDENTIFIER, "world"))
    
    // 输出 tokens
    println("tokens.toString(): ${tokens.toString()}")
}

运行结果:

tokens.toString(): hello world

init(Array<Token>)

public init(tokArray: Array<Token>)

功能:构造一个 Tokens 对象。

参数:

示例:

import std.ast.*

main(): Unit {
    // 创建 Array<Token>
    let arr = [Token(TokenKind.AT, "@"), Token(TokenKind.IDENTIFIER, "test")]

    // 使用 Array<Token> 构造 Tokens
    let tokens = Tokens(arr)

    // 输出 tokens
    println("tokens.toString(): ${tokens.toString()}")
}

运行结果:

tokens.toString(): @test

init(ArrayList<Token>)

public init(tokArrayList: ArrayList<Token>)

功能:构造一个 Tokens 对象。

参数:

示例:

import std.ast.*
import std.collection.*

main(): Unit {
    // 创建 ArrayList<Token>
    let arr = ArrayList<Token>([Token(TokenKind.AT, "@"), Token(TokenKind.IDENTIFIER, "test")])

    // 使用 ArrayList<Token> 构造 Tokens
    let tokens = Tokens(arr)

    // 输出 tokens
    println("tokens.toString(): ${tokens.toString()}")
}

运行结果:

tokens.toString(): @test

func append(Node)

public func append(node: Node): Tokens

功能:将当前的 Tokens 与传入节点所转换得到的 Tokens 进行拼接。

参数:

  • node: Node - 待拼接的 Node 对象。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建 Tokens
    let tokens = quote(@M)
    tokens.append(ClassDecl(quote(class A {})))

    // 输出 tokens
    println("tokens.toString(): ${tokens.toString()}")
}

运行结果:

tokens.toString(): @M class A {
}

func append(Token)

public open func append(token: Token): Tokens

功能:将当前的 Tokens 与传入的 Token 进行拼接。

参数:

返回值:

示例:

import std.ast.*

main(): Unit {
    let tokens = Tokens()
    let token = Token(TokenKind.IDENTIFIER, "test")
    
    // 追加 token
    let result = tokens.append(token)
    println("result.toString(): ${result.toString()}")
}

运行结果:

result.toString(): test

func append(Tokens)

public open func append(tokens: Tokens): Tokens

功能:在当前的 Tokens 后追加传入的 Tokens 进行拼接(该接口性能较其他拼接函数表现更好)。

参数:

返回值:

示例:

import std.ast.*

main(): Unit {
    let tokens = Tokens()
    
    // 追加 tokens
    let toks = quote(123)
    let result = tokens.append(toks)
    println("result.toString(): ${result.toString()}")
}

运行结果:

result.toString(): 123

func concat(Tokens)

public func concat(tokens: Tokens): Tokens

功能:将当前的 Tokens 与传入的 Tokens 进行拼接,返回新的 Tokens 实例。

参数:

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建 Tokens
    let tokens1 = quote(@M)
    let tokens2 = quote(class A {})
    let tokens = tokens1.concat(tokens2)

    // 输出 tokens
    println("tokens.toString(): ${tokens.toString()}")
}

运行结果:

tokens.toString(): @M class A { }

func dump()

public func dump(): Unit

功能:将 Tokens 内所有 Token 的信息打印出来。

示例:

import std.ast.*

main(): Unit {
    // 创建 Tokens
    let tokens = quote(@M)

    // 输出 tokens
    println("tokens.dump():")
    tokens.dump()
}

运行结果:

tokens.dump():
description: at, token_id: 51, token_literal_value: @, fileID: 1, line: 5, column: 24
description: identifier, token_id: 137, token_literal_value: M, fileID: 1, line: 5, column: 25

func get(Int64)

public open func get(index: Int64): Token

功能:通过索引值获取 Token 元素。

参数:

  • index: Int64 - 待索引的数值。

返回值:

异常:

示例:

import std.ast.*

main(): Unit {
    // 创建 Tokens
    let tokens = quote(@M)

    println("tokens.get(1).dump():")
    tokens.get(1).dump()
}

运行结果:

tokens.get(1).dump():
description: identifier, token_id: 137, token_literal_value: M, fileID: 1, line: 5, column: 25

func iterator()

public func iterator(): TokensIterator

功能:获取 Tokens 对象中的一个迭代器对象。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建 Tokens
    let tokens = quote(hello world)

    // 获取迭代器
    let iter = tokens.iterator()

    // 获取下一个 token
    let nextToken = iter.next()
    match (nextToken) {
        case Some(token) => println("Next token: ${token.value}")
        case None => println("No more tokens")
    }
}

运行结果:

Next token: hello

func remove(Int64)

public func remove(index: Int64): Tokens

功能:删除指定位置的 Token 对象。

参数:

返回值:

示例:

import std.ast.*

main(): Unit {
    let tokens = Tokens()
    tokens.append(Token(TokenKind.IDENTIFIER, "hello"))
    tokens.append(Token(TokenKind.IDENTIFIER, "world"))

    println("tokens.toString() before remove: ${tokens.toString()}")

    // 删除位置为 1 的 tokens
    tokens.remove(1)

    println("tokens.toString() after remove: ${tokens.toString()}")
}

运行结果:

tokens.toString() before remove: hello world
tokens.toString() after remove: hello

func toBytes()

public func toBytes(): Array<UInt8>

功能:Tokens 类型的序列化。

返回值:

示例:

import std.ast.*

main(): Unit {
    let tokens = quote(&)

    // 序列化为 Array<UInt8> 后输出
    println("tokens.toBytes(): ${tokens.toBytes()}")
}

运行结果:

tokens.toBytes(): [1, 0, 0, 0, 22, 0, 1, 0, 0, 0, 38, 1, 0, 0, 0, 4, 0, 0, 0, 24, 0, 0, 0, 0, 0]

func toString()

public func toString(): String

功能:将 Tokens 转化为 String 类型。

返回值:

  • String - 转化后的字符串。

示例:

import std.ast.*

main(): Unit {
    // 创建 Tokens
    let tokens = quote(@M)

    println("tokens.toString(): ${tokens.toString()}")
}

运行结果:

tokens.toString(): @M

operator func +(Token)

public operator func +(r: Token): Tokens

功能:使用当前 Tokens 与另一个 Token 相加以获取新的 Tokens 实例。

参数:

  • r: Token - 待操作的另一个 Token 对象。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建 Tokens
    let tokens1 = quote(@)
    let token = Token(TokenKind.IDENTIFIER, "M")
    let tokens = tokens1 + token

    // 输出 tokens
    println("tokens.toString(): ${tokens.toString()}")
}

运行结果:

tokens.toString(): @M

operator func +(Tokens)

public operator func +(r: Tokens): Tokens

功能:使用当前 TokensTokens 相加以获取新的 Tokens 实例。

参数:

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建 Tokens
    let tokens1 = quote(@M)
    let tokens2 = quote(class A {})
    let tokens = tokens1 + tokens2

    // 输出 tokens
    println("tokens.toString(): ${tokens.toString()}")
}

运行结果:

tokens.toString(): @M class A { }

operator func [](Int64)

public operator func [](index: Int64): Token

功能:操作符重载,通过索引值获取对应 Token

参数:

  • index: Int64 - 待索引的数值。

返回值:

异常:

示例:

import std.ast.*

main(): Unit {
    // 创建 Tokens
    let tokens = quote(@M)

    println("tokens[1].dump():")
    tokens[1].dump()
}

运行结果:

tokens[1].dump():
description: identifier, token_id: 137, token_literal_value: M, fileID: 1, line: 5, column: 25

operator func [](Range<Int64>)

public open operator func [](range: Range<Int64>): Tokens

功能:操作符重载,通过 range 获取对应 Tokens 切片。

参数:

  • range: Range<Int64> - 待索引的切片范围。

返回值:

异常:

示例:

import std.ast.*

main(): Unit {
    // 创建 Tokens
    let tokens = Tokens()
    tokens.append(Token(TokenKind.CLASS, "class"))
    tokens.append(Token(TokenKind.IDENTIFIER, "A"))
    tokens.append(Token(TokenKind.LCURL, "{"))
    tokens.append(Token(TokenKind.RCURL, "}"))

    // 输出 Tokens 切片
    println("tokens[2..].toString(): ${tokens[2..].toString()}")
}

运行结果:

tokens[2..].toString(): { }

class TokensIterator

public class TokensIterator <: Iterator<Token> {
    public init(tokens: Tokens)
}

功能:实现 Tokens 的迭代器功能。

父类型:

init(Tokens)

public init(tokens: Tokens)

功能:构造一个 TokensIterator 对象。

参数:

示例:

import std.ast.*

main(): Unit {
    // 创建 Tokens
    let tokens = quote(hello world)

    // 获取迭代器
    let iter = TokensIterator(tokens)

    // 获取下一个 token
    let nextToken = iter.next()
    match (nextToken) {
        case Some(token) => println("Next token: ${token.value}")
        case None => println("No more tokens")
    }
}

运行结果:

Next token: hello

func next()

public func next(): Option<Token>

功能:获取迭代器中的下一个值。

返回值:

示例:

import std.ast.*

main(): Unit {
    let tokens = quote(hello world)
    let iter = TokensIterator(tokens)
    
    // 获取下一个 token
    let nextToken = iter.next()
    match (nextToken) {
        case Some(token) => println("Next token: ${token.value}")
        case None => println("No more tokens")
    }
}

运行结果:

Next token: hello

func peek()

public func peek(): Option<Token>

功能:获取迭代器中的当前值。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建 Tokens
    let tokens = quote(hello world)

    // 获取迭代器
    let iter = TokensIterator(tokens)

    iter.next()
    let curToken = iter.peek()
    match (curToken) {
        case Some(token) => println("Current token: ${token.value}")
        case None => println("No more tokens")
    }
}

运行结果:

Current token: hello

func seeing(TokenKind)

public func seeing(kind: TokenKind): Bool

功能:判断当前节点的 Token 类型是否是传入的类型。

参数:

返回值:

  • Bool - 如果当前节点的 TokenKind 与传入类型相同,返回 true,否则返回 false。

示例:

import std.ast.*

main(): Unit {
    // 创建 Tokens
    let tokens = quote(hello world)

    // 获取迭代器
    let iter = TokensIterator(tokens)

    iter.next()
    println("iter.seeing(TokenKind.IDENTIFIER): ${iter.seeing(TokenKind.IDENTIFIER)}")
}

运行结果:

iter.seeing(TokenKind.IDENTIFIER): true

class TrailingClosureExpr

public class TrailingClosureExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示尾随 Lambda 节点。

一个 TrailingClosureExpr 节点将 lambda 表达式放在函数调用的尾部,括号外面,如 f(a){ i => i * i }

父类型:

prop expr

public mut prop expr: Expr

功能:获取或设置 TrailingClosureExpr 中的表达式。

类型:Expr

prop lambdaExpr

public mut prop lambdaExpr: LambdaExpr

功能:获取或设置 TrailingClosureExpr 中的尾随 lambda。

类型:LambdaExpr

init()

public init()

功能:构造一个默认的 TrailingClosureExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 TrailingClosureExpr 对象
    let trailingClosureExpr = TrailingClosureExpr()
    
    // 设置 TrailingClosureExpr 的属性
    trailingClosureExpr.expr = CallExpr(quote(f(a)))
    trailingClosureExpr.lambdaExpr = LambdaExpr(quote({x => x + 1}))
    
    // 转化为 Tokens 并输出
    println("trailingClosureExpr.toTokens(): ${trailingClosureExpr.toTokens()}")
}

运行结果:

trailingClosureExpr.toTokens(): f(a) { x =>
    x + 1
}

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 TrailingClosureExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 TrailingClosureExpr 对象
    let trailingClosureExpr = TrailingClosureExpr(quote(f(a){ i => i * i }))
    
    // 转化为 Tokens 并输出
    println("trailingClosureExpr.toTokens(): ${trailingClosureExpr.toTokens()}")
}

运行结果:

trailingClosureExpr.toTokens(): f(a) { i =>
    i * i
}

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let trailingClosureExpr = TrailingClosureExpr(quote(f(a){ i }))
    
    // 转化为 Tokens 并输出
    println("trailingClosureExpr.toTokens(): ${trailingClosureExpr.toTokens()}")
}

运行结果:

trailingClosureExpr.toTokens(): f(a) { i
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: TrailingClosureExpr) {
        println("Visiting TrailingClosureExpr")
    }
}

main(): Unit {
    let trailingClosureExpr = TrailingClosureExpr(quote(f(a){ i => i * i }))
    
    // 使用自定义访问器遍历 TrailingClosureExpr 节点
    trailingClosureExpr.traverse(MyVisitor())
}

运行结果:

Visiting TrailingClosureExpr

class TryExpr

public class TryExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示 try 表达式节点。

try 表达式包括三个部分:try 块,catch 块和 finally 块。

父类型:

prop catchBlocks

public mut prop catchBlocks: ArrayList<Block>

功能:获取或设置 TryExpr 中的 Catch 块。

类型:ArrayList<Block>

prop catchPatterns

public mut prop catchPatterns: ArrayList<Pattern>

功能:获取或设置 TryExpr 中通过模式匹配的方式匹配待捕获的异常序列。

类型:ArrayList<Pattern>

prop finallyBlock

public mut prop finallyBlock: Block

功能:获取或设置 TryExpr 中的关键字 Finally 块。

类型:Block

异常:

prop handlers

public mut prop handlers: ArrayList<Handler>

功能:获取或设置 Handler 节点列表。

类型: ArrayList<Handler>

prop keywordF

public mut prop keywordF: Token

功能:获取或设置 TryExpr 中的 finally 关键字。

类型:Token

异常:

prop keywordT

public mut prop keywordT: Token

功能:获取或设置 TryExpr 中的 try 关键字。

类型:Token

异常:

prop keywordsC

public mut prop keywordsC: Tokens

功能:获取或设置 TryExpr 中的关键字 catch

类型:Tokens

异常:

prop resourceSpec

public mut prop resourceSpec: ArrayList<VarDecl>

功能:获取或设置 TryExpr 中 Try-with-resources 类型表达式的实例化对象序列。

类型:ArrayList<VarDecl>

prop tryBlock

public mut prop tryBlock: Block

功能:获取或设置 TryExpr 中由表达式与声明组成的块。

类型:Block

init()

public init()

功能:构造一个默认的 TryExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 TryExpr 对象
    let tryExpr = TryExpr()
    
    // 设置 TryExpr 的属性
    tryExpr.keywordT = Token(TokenKind.TRY, "try")

    // 设置 try Block
    let blockT = Block()
    blockT.lBrace = Token(TokenKind.LCURL)
    blockT.rBrace = Token(TokenKind.RCURL)
    blockT.nodes = ArrayList<Node>([parseExpr(quote(throw Exception("I am an Exception!")))])
    tryExpr.tryBlock = blockT

    // 设置关键字
    tryExpr.keywordF = Token(TokenKind.FINALLY, "finally")

    // 设置 finally Block
    let blockF = Block()
    blockF.lBrace = Token(TokenKind.LCURL)
    blockF.rBrace = Token(TokenKind.RCURL)
    blockF.nodes = ArrayList<Node>([parseExpr(quote(println("I am an Exception!")))])
    tryExpr.finallyBlock = blockF

    // 转化为 Tokens 并输出
    println("tryExpr.toTokens(): ${tryExpr.toTokens()}")
}

运行结果:

tryExpr.toTokens(): try {
    throw Exception("I am an Exception!")
} finally {
    println("I am an Exception!")
}

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 TryExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 TryExpr 对象
    let inputs = quote(try {
        throw Exception("I am an Exception!")
    } catch (e: Exception) {
        println(e)
    })
    let tryExpr = TryExpr(inputs)
    
    // 转化为 Tokens 并输出
    println("tryExpr.toTokens(): ${tryExpr.toTokens()}")
}

运行结果:

tryExpr.toTokens(): try {
    throw Exception("I am an Exception!")
} catch(e: Exception) {
    println(e)
}

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let tryExpr = TryExpr(quote(try {
        throw Exception("I am an Exception!")
    } catch (e: Exception) {
        println(e)
    }))
    
    // 转化为 Tokens 并输出
    println("tryExpr.toTokens(): ${tryExpr.toTokens()}")
}

运行结果:

tryExpr.toTokens(): try {
    throw Exception("I am an Exception!")
} catch(e: Exception) {
    println(e)
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: TryExpr) {
        println("Visiting TryExpr")
    }
}

main(): Unit {
    let tryExpr = TryExpr(quote(try {
        throw Exception("I am an Exception!")
    } catch (e: Exception) {
        println(e)
    }))
    
    // 使用自定义访问器遍历 TryExpr 节点
    tryExpr.traverse(MyVisitor())
}

运行结果:

Visiting TryExpr

class TupleLiteral

public class TupleLiteral <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示元组字面量节点。

TupleLiteral 节点:使用格式 (expr1, expr2, ... , exprN) 表示,每个 expr 是一个表达式。

父类型:

prop elements

public mut prop elements: ArrayList<Expr>

功能:获取或设置 TupleLiteral 中的表达式列表。

类型:ArrayList<Expr>

prop lParen

public mut prop lParen: Token

功能:获取或设置 TupleLiteral 中的 "("。

类型:Token

异常:

prop rParen

public mut prop rParen: Token

功能:获取或设置 TupleLiteral 中的 ")"。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 TupleLiteral 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 TupleLiteral 对象
    let tupleLiteral = TupleLiteral()
    
    // 设置 TupleLiteral 的属性
    tupleLiteral.elements = ArrayList<Expr>([LitConstExpr(quote(1))])
    
    // 转化为 Tokens 并输出
    println("tupleLiteral.toTokens(): ${tupleLiteral.toTokens()}")
}

运行结果:

tupleLiteral.toTokens(): (1)

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 TupleLiteral 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 TupleLiteral 对象
    let tupleLiteral = TupleLiteral(quote((1, 2)))
    
    // 转化为 Tokens 并输出
    println("tupleLiteral.toTokens(): ${tupleLiteral.toTokens()}")
}

运行结果:

tupleLiteral.toTokens(): (1, 2)

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let tupleLiteral = TupleLiteral(quote(("a", "b")))
    
    // 转化为 Tokens 并输出
    println("tupleLiteral.toTokens(): ${tupleLiteral.toTokens()}")
}

运行结果:

tupleLiteral.toTokens(): ("a", "b")

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: TupleLiteral) {
        println("Visiting TupleLiteral")
    }
}

main(): Unit {
    let tupleLiteral = TupleLiteral(quote((1, 2)))
    
    // 使用自定义访问器遍历 TupleLiteral 节点
    tupleLiteral.traverse(MyVisitor())
}

运行结果:

Visiting TupleLiteral

class TuplePattern

public class TuplePattern <: Pattern {
    public init()
    public init(inputs: Tokens)
}

功能:表示 Tuple 模式节点。

用于 tuple 值的匹配,如 case ("Bob", age) => 1 中的 ("Bob", age)

父类型:

prop commas

public mut prop commas: Tokens

功能:获取或设置 TuplePattern 节点中的 "," 词法单元序列,可能为空。

类型:Tokens

异常:

prop lParen

public mut prop lParen: Token

功能:获取或设置 TuplePattern 节点中的 "(" 的词法单元。

类型:Token

异常:

prop patterns

public mut prop patterns: ArrayList<Pattern>

功能:获取或设置 TuplePattern 节点中的一组 Pattern 节点。

类型:ArrayList<Pattern>

prop rParen

public mut prop rParen: Token

功能:获取或设置 TuplePattern 节点中的 ")" 的词法单元。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 TuplePattern 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 TuplePattern 对象
    let tuplePattern = TuplePattern()
    
    // 设置 TuplePattern 的属性
    tuplePattern.patterns = ArrayList<Pattern>([VarPattern(Token(TokenKind.IDENTIFIER, "a"))])
    
    // 转化为 Tokens 并输出
    println("tuplePattern.toTokens(): ${tuplePattern.toTokens()}")
}

运行结果:

tuplePattern.toTokens(): (a)

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 TuplePattern 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 TuplePattern 对象
    let tuplePattern = TuplePattern(quote((a, b)))
    
    // 转化为 Tokens 并输出
    println("tuplePattern.toTokens(): ${tuplePattern.toTokens()}")
}

运行结果:

tuplePattern.toTokens(): (a, b)

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let tuplePattern = TuplePattern(quote((x, y)))
    
    // 转化为 Tokens 并输出
    println("tuplePattern.toTokens(): ${tuplePattern.toTokens()}")
}

运行结果:

tuplePattern.toTokens(): (x, y)

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: TuplePattern) {
        println("Visiting TuplePattern")
    }
}

main(): Unit {
    let tuplePattern = TuplePattern(quote((a, b)))
    
    // 使用自定义访问器遍历 TuplePattern 节点
    tuplePattern.traverse(MyVisitor())
}

运行结果:

Visiting TuplePattern

class TupleType

public class TupleType <: TypeNode {
    public init(inputs: Tokens)
    public init()
}

功能:表示元组类型节点。

例如 var a : (Int64, Int32) 中的 (Int64, Int32)

父类型:

prop lParen

public mut prop lParen: Token

功能:获取或设置 TupleType 节点中的 "(" 词法单元。

类型:Token

异常:

prop rParen

public mut prop rParen: Token

功能:获取或设置 TupleType 节点中的 ")" 词法单元。

类型:Token

异常:

prop types

public mut prop types: ArrayList<TypeNode>

功能:获取或设置 TupleType 节点中的类型节点列表。

类型:ArrayList<TypeNode>

init()

public init()

功能:构造一个默认的 TupleType 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 TupleType 对象
    let tupleType = TupleType()
    
    // 设置 TupleType 的属性
    tupleType.types = ArrayList<TypeNode>([PrimitiveType(quote(Int64))])
    
    // 转化为 Tokens 并输出
    println("tupleType.toTokens(): ${tupleType.toTokens()}")
}

运行结果:

tupleType.toTokens(): (Int64)

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 TupleType 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 TupleType 对象
    let tupleType = TupleType(quote((Int64, String)))
    
    // 转化为 Tokens 并输出
    println("tupleType.toTokens(): ${tupleType.toTokens()}")
}

运行结果:

tupleType.toTokens(): (Int64, String)

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let tupleType = TupleType(quote((Bool, Float64)))
    
    // 转化为 Tokens 并输出
    println("tupleType.toTokens(): ${tupleType.toTokens()}")
}

运行结果:

tupleType.toTokens(): (Bool, Float64)

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: TupleType) {
        println("Visiting TupleType")
    }
}

main(): Unit {
    let tupleType = TupleType(quote((Int64, String)))
    
    // 使用自定义访问器遍历 TupleType 节点
    tupleType.traverse(MyVisitor())
}

运行结果:

Visiting TupleType

class TypeAliasDecl

public class TypeAliasDecl <: Decl {
    public init(inputs: Tokens)
    public init()
}

功能:表示类型别名节点。

一个 TypeAliasDecl 节点: type Point2D = Float64

说明:

该节点中 type 作为关键字,紧跟任意的合法标识符,其后的 type 是任意的 top-level 可见的类型,标识符和 type 之间使用 = 进行连接。

父类型:

prop aliasType

public mut prop aliasType: TypeNode

功能:获取或设置将要别名的类型。

类型:TypeNode

prop assign

public mut prop assign: Token

功能:获取或设置标识符和 type 之间的 =

类型:Token

异常:

init()

public init()

功能:构造一个默认的 TypeAliasDecl 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 TypeAliasDecl 对象
    let typeAliasDecl = TypeAliasDecl()

    // 设置 TypeAliasDecl 的属性
    typeAliasDecl.keyword = Token(TokenKind.TYPE, "type")
    typeAliasDecl.identifier = Token(TokenKind.IDENTIFIER, "MyType")
    typeAliasDecl.assign = Token(TokenKind.ASSIGN, "=")
    typeAliasDecl.aliasType = PrimitiveType(quote(Float64))

    // 转化为 Tokens 并输出
    println("typeAliasDecl.toTokens(): ${typeAliasDecl.toTokens()}")
}

运行结果:

typeAliasDecl.toTokens(): type MyType = Float64

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 TypeAliasDecl 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 TypeAliasDecl 对象
    let typeAliasDecl = TypeAliasDecl(quote(type Alias = Int64))
    
    // 转化为 Tokens 并输出
    println("typeAliasDecl.toTokens(): ${typeAliasDecl.toTokens()}")
}

运行结果:

typeAliasDecl.toTokens(): type Alias = Int64

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let typeAliasDecl = TypeAliasDecl(quote(type MyString = String))
    
    // 转化为 Tokens 并输出
    println("typeAliasDecl.toTokens(): ${typeAliasDecl.toTokens()}")
}

运行结果:

typeAliasDecl.toTokens(): type MyString = String

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: TypeAliasDecl) {
        println("Visiting TypeAliasDecl")
    }
}

main(): Unit {
    let typeAliasDecl = TypeAliasDecl(quote(type Test = Int64))
    
    // 使用自定义访问器遍历 TypeAliasDecl 节点
    typeAliasDecl.traverse(MyVisitor())
}

运行结果:

Visiting TypeAliasDecl

class TypeConvExpr

public class TypeConvExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示类型转换表达式。

用于实现若干数值类型间的转换。一个 TypeConvExpr 节点:Int8(32)

父类型:

prop expr

public mut prop expr: Expr

功能:获取或设置 TypeConvExpr 中进行类型转化的原始表达式。

类型:Expr

prop lParen

public mut prop lParen: Token

功能:获取或设置 TypeConvExpr 中的 "("。

类型:Token

异常:

prop rParen

public mut prop rParen: Token

功能:获取或设置 TypeConvExpr 中的 ")"。

类型:Token

异常:

prop targetType

public mut prop targetType: PrimitiveType

功能:获取或设置 TypeConvExpr 中将要转换到的目标类型。

类型:PrimitiveType

init()

public init()

功能:构造一个默认的 TypeConvExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 TypeConvExpr 对象
    let typeConvExpr = TypeConvExpr()
    
    // 设置 TypeConvExpr 的属性
    typeConvExpr.targetType = PrimitiveType(quote(Int8))
    typeConvExpr.expr = LitConstExpr(quote(42))
    
    // 转化为 Tokens 并输出
    println("typeConvExpr.toTokens(): ${typeConvExpr.toTokens()}")
}

运行结果:

typeConvExpr.toTokens(): Int8(42)

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 TypeConvExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 TypeConvExpr 对象
    let typeConvExpr = TypeConvExpr(quote(Int8(42)))
    
    // 转化为 Tokens 并输出
    println("typeConvExpr.toTokens(): ${typeConvExpr.toTokens()}")
}

运行结果:

typeConvExpr.toTokens(): Int8(42)

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let typeConvExpr = TypeConvExpr(quote(Int8(42)))
    
    // 转化为 Tokens 并输出
    println("typeConvExpr.toTokens(): ${typeConvExpr.toTokens()}")
}

运行结果:

typeConvExpr.toTokens(): Int8(42)

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: TypeConvExpr) {
        println("Visiting TypeConvExpr")
    }
}

main(): Unit {
    let typeConvExpr = TypeConvExpr(quote(Int8(42)))
    
    // 使用自定义访问器遍历 TypeConvExpr 节点
    typeConvExpr.traverse(MyVisitor())
}

运行结果:

Visiting TypeConvExpr

class TypeNode

public open class TypeNode <: Node {}

功能:所有类型节点的父类,继承自 Node

父类型:

prop colon

public mut prop colon: Token

功能:获取或设置 TypeNode 节点中的操作符 ":",可能为 ILLEGAL 的词法单元。

类型:Token

异常:

prop typeParameterName

public mut prop typeParameterName: Token

功能:获取或设置类型节点的参数,如:(p1:Int64, p2:Int64) 中的 p1p2,可能为 ILLEGAL 的词法单元。

类型:Token

func dump(UInt16)

protected open func dump(indent: UInt16): String

功能:将当前语法树节点转化为树形结构的形态并进行打印。

参数:

  • indent: UInt16 - 格式化输出的缩进空格数量。

返回值:

  • String - 格式化输出内容。

示例:

import std.ast.*

// 在子类中调用
extend FuncType {
    public func myDump() {
        dump(1)
    }
}

main(): Unit {
    // 创建 TypeNode 的子类
    let typeNode = FuncType(quote(() -> Unit))

    println("typeNode.myDump(): ${typeNode.myDump()}")
}

运行结果:

typeNode.myDump(): FuncType {
    -ARROW: Token {
      value: "->"
      kind: ARROW
      pos: 12: 38
    }
    -returnType: PrimitiveType {
      -keyword: Token {
        value: "Unit"
        kind: UNIT
        pos: 12: 41
      }
    }
  }

func toTokens()

public open func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    // 创建一个 TypeNode 子类对象 (使用 FuncType 作为示例)
    let typeNode = FuncType(quote((Int64) -> Float64))
    
    // 输出 Tokens 信息
    println("typeNode.toTokens(): ${typeNode.toTokens()}")
}

运行结果:

typeNode.toTokens(): (Int64) -> Float64

func traverse(Visitor)

public open func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: TypeNode) {
        breakTraverse()
        println("Visiting TypeNode")
    }
}

main(): Unit {
    // 创建 TypeNode 节点(以 FuncType 为例)
    let typeNode = FuncType(quote((Int64) -> Float64))
    
    // 使用自定义访问器遍历 TypeNode 节点
    typeNode.traverse(MyVisitor())
}

运行结果:

Visiting TypeNode

class TypePattern

public class TypePattern <: Pattern {
    public init()
    public init(inputs: Tokens)
}

功能:表示类型模式节点。

用于判断一个值的运行时类型是否是某个类型的子类型,如 case b: Base => 0 中的 b: Base

父类型:

prop colon

public mut prop colon: Token

功能:获取或设置 TypePattern 节点中的 ":" 操作符的词法单元节点。

类型:Token

异常:

prop pattern

public mut prop pattern: Pattern

功能:获取或设置 TypePattern 节点中的模式节点。

类型:Pattern

prop patternType

public mut prop patternType: TypeNode

功能:获取或设置 TypePattern 节点中的待匹配的模式类型节点。

类型:TypeNode

init()

public init()

功能:构造一个默认的 TypePattern 对象。

示例:

import std.ast.*

main(): Unit {
    let typePattern = TypePattern()
    
    // 设置待匹配的模式类型节点
    typePattern.patternType = PrimitiveType(quote(Int64))
    
    // 设置类型节点的参数
    typePattern.pattern = VarPattern(Token(TokenKind.IDENTIFIER, "a"))

    // 输出 TypePattern 节点转化成的 Tokens
    println("typePattern.toTokens(): ${typePattern.toTokens()}")
}

运行结果:

typePattern.toTokens(): a: Int64

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 TypePattern 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    let inputs = quote(b: Base)
    let typePattern = TypePattern(inputs)

    // 输出 TypePattern 节点转化成的 Tokens
    println("typePattern.toTokens(): ${typePattern.toTokens()}")
}

运行结果:

typePattern.toTokens(): b: Base

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let typePattern = TypePattern(quote(i: Int64))

    // 输出 TypePattern 节点转化成的 Tokens
    println("typePattern.toTokens(): ${typePattern.toTokens()}")
}

运行结果:

typePattern.toTokens(): i: Int64

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: TypePattern) {
        println("Visiting TypePattern")
    }
}

main(): Unit {
    let typePattern = TypePattern(quote(i: Int64))

    // 对 TypePattern 节点进行遍历
    typePattern.traverse(MyVisitor())
}

运行结果:

Visiting TypePattern

class UnaryExpr

public class UnaryExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示一个一元操作表达式节点。

父类型:

prop expr

public mut prop expr: Expr

功能:获取或设置 UnaryExpr 节点中的操作数。

类型:Expr

prop op

public mut prop op: Token

功能:获取或设置 UnaryExpr 节点中的一元操作符。

类型:Token

init()

public init()

功能:构造一个默认的 UnaryExpr 对象。

示例:

import std.ast.*

main(): Unit {
    let unaryExpr = UnaryExpr()
    
    // 设置一元表达式操作符
    unaryExpr.op = Token(TokenKind.NOT, "!")

    // 设置操作数
    unaryExpr.expr = parseExpr(quote(true))
    
    // 输出 UnaryExpr 节点转化成的 Tokens
    println("unaryExpr.toTokens(): ${unaryExpr.toTokens()}")
}

运行结果:

unaryExpr.toTokens(): ! true

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 UnaryExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    let inputs = quote(!false)
    let unaryExpr = UnaryExpr(inputs)

    // 输出 UnaryExpr 节点转化成的 Tokens
    println("unaryExpr.toTokens(): ${unaryExpr.toTokens()}")
}

运行结果:

unaryExpr.toTokens(): ! false

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let inputs = quote(!false)
    let unaryExpr = UnaryExpr(inputs)

    // 输出 UnaryExpr 节点转化成的 Tokens
    println("unaryExpr.toTokens(): ${unaryExpr.toTokens()}")
}

运行结果:

unaryExpr.toTokens(): ! false

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: UnaryExpr) {
        println("Visiting UnaryExpr")
    }
}

main(): Unit {
    let unaryExpr = UnaryExpr(quote(!true))

    // 对 UnaryExpr 节点进行遍历
    unaryExpr.traverse(MyVisitor())
}

运行结果:

Visiting UnaryExpr

class VarDecl

public class VarDecl <: Decl {
    public init(inputs: Tokens)
    public init()
}

功能:表示变量定义节点。

一个 VarDecl 节点: var a: Stringvar b: Int64 = 1

说明:

变量的定义主要包括如下几个部分:修饰符、关键字、patternsMaybeIrrefutable、变量类型和变量初始值。

父类型:

prop assign

public mut prop assign: Token

功能:获取或设置 VarDecl 节点中的赋值操作符的位置信息。

类型:Token

异常:

prop colon

public mut prop colon: Token

功能:获取或设置 VarDecl 节点中的冒号位置信息。

类型:Token

异常:

prop declType

public mut prop declType: TypeNode

功能:获取或设置 VarDecl 节点的变量类型。

类型:TypeNode

异常:

prop expr

public mut prop expr: Expr

功能:获取或设置 VarDecl 节点的变量初始化节点。

类型:Expr

异常:

prop pattern

public mut prop pattern: Pattern

功能:获取或设置 VarDecl 节点的 pattern 节点。

类型:Pattern

异常:

init()

public init()

功能:构造一个默认的 VarDecl 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 VarDecl 对象
    let varDecl = VarDecl()
    
    // 设置 VarDecl 的属性
    varDecl.keyword = Token(TokenKind.VAR, "var")
    varDecl.identifier = Token(TokenKind.IDENTIFIER, "counter")
    varDecl.assign = Token(TokenKind.ASSIGN, "=")
    varDecl.expr = parseExpr(quote(0))
    
    // 转化为 Tokens 并输出
    println("varDecl.toTokens(): ${varDecl.toTokens()}")
}

运行结果:

varDecl.toTokens(): var counter = 0

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 VarDecl 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 VarDecl 对象
    let varDecl = VarDecl(quote(var name = "test"))

    // 转化为 Tokens 并输出
    println("varDecl.toTokens(): ${varDecl.toTokens()}")
}

运行结果:

varDecl.toTokens(): var name = "test"

func isConst()

public func isConst(): Bool

功能:判断是否是一个 Const 类型的节点。

返回值:

  • Bool - 是一个 Const 类型的节点返回 true;反之,返回 false。

示例:

import std.ast.*

main(): Unit {
    let varDecl = VarDecl(quote(const pi = 3.14))

    println("varDecl.isConst(): ${varDecl.isConst()}")
}

运行结果:

varDecl.isConst(): true

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let varDecl = VarDecl(quote(var age = 25))

    // 转化为 Tokens 并输出
    println("varDecl.toTokens(): ${varDecl.toTokens()}")
}

运行结果:

varDecl.toTokens(): var age = 25

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: VarDecl) {
        println("Visiting VarDecl")
    }
}

main(): Unit {
    let varDecl = VarDecl(quote(var a = 0))

    // 使用自定义访问器遍历 VarDecl 节点
    varDecl.traverse(MyVisitor())
}

运行结果:

Visiting VarDecl

class VarOrEnumPattern

public class VarOrEnumPattern <: Pattern {
    public init(identifier: Token)
    public init()
}

功能:表示当模式的标识符为 Enum 构造器时的节点。

例如 case RED 中的 REDEnum 构造器。

父类型:

prop identifier

public mut prop identifier: Token

功能:获取或设置 VarOrEnumPattern 节点中的标识符的词法单元。

类型:Token

init()

public init()

功能:构造一个默认的 VarOrEnumPattern 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 VarOrEnumPattern 对象
    let varOrEnumPattern = VarOrEnumPattern()
    
    // 设置 VarOrEnumPattern 的属性
    varOrEnumPattern.identifier = Token(TokenKind.IDENTIFIER, "GREEN")
    
    // 转化为 Tokens 并输出
    println("varOrEnumPattern.toTokens(): ${varOrEnumPattern.toTokens()}")
}

运行结果:

varOrEnumPattern.toTokens(): GREEN

init(Token)

public init(identifier: Token)

功能:构造一个 VarOrEnumPattern 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Token 创建 VarOrEnumPattern 对象
    let varOrEnumPattern = VarOrEnumPattern(Token(TokenKind.IDENTIFIER, "BLUE"))

    // 转化为 Tokens 并输出
    println("varOrEnumPattern.toTokens(): ${varOrEnumPattern.toTokens()}")
}

运行结果:

varOrEnumPattern.toTokens(): BLUE

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let varOrEnumPattern = VarOrEnumPattern(Token(TokenKind.IDENTIFIER, "YELLOW"))

    // 转化为 Tokens 并输出
    println("varOrEnumPattern.toTokens(): ${varOrEnumPattern.toTokens()}")
}

运行结果:

varOrEnumPattern.toTokens(): YELLOW

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: VarOrEnumPattern) {
        println("Visiting VarOrEnumPattern")
    }
}

main(): Unit {
    let varOrEnumPattern = VarOrEnumPattern(Token(TokenKind.IDENTIFIER, "PURPLE"))

    // 使用自定义访问器遍历 VarOrEnumPattern 节点
    varOrEnumPattern.traverse(MyVisitor())
}

运行结果:

Visiting VarOrEnumPattern

class VarPattern

public class VarPattern <: Pattern {
    public init(identifier: Token)
    public init()
}

功能:表示绑定模式节点。

使用一个合法的标识符表示,如 for (i in 1..10) 中的 i

父类型:

prop identifier

public mut prop identifier: Token

功能:获取或设置 VarPattern 节点中的标识符符的词法单元。

类型:Token

init()

public init()

功能:构造一个默认的 VarPattern 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 VarPattern 对象
    let varPattern = VarPattern()
    
    // 设置 VarPattern 的属性
    varPattern.identifier = Token(TokenKind.IDENTIFIER, "index")
    
    // 转化为 Tokens 并输出
    println("varPattern.toTokens(): ${varPattern.toTokens()}")
}

运行结果:

varPattern.toTokens(): index

init(Token)

public init(identifier: Token)

功能:构造一个 VarPattern 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Token 创建 VarPattern 对象
    let varPattern = VarPattern(Token(TokenKind.IDENTIFIER, "item"))

    // 转化为 Tokens 并输出
    println("varPattern.toTokens(): ${varPattern.toTokens()}")
}

运行结果:

varPattern.toTokens(): item

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let varPattern = VarPattern(Token(TokenKind.IDENTIFIER, "value"))

    // 转化为 Tokens 并输出
    println("varPattern.toTokens(): ${varPattern.toTokens()}")
}

运行结果:

varPattern.toTokens(): value

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若提前终止遍历子节点的行为,可重写 visit 函数并调用 breakTraverse 函数提前终止遍历行为,请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: VarPattern) {
        println("Visiting VarPattern")
    }
}

main(): Unit {
    let varPattern = VarPattern(Token(TokenKind.IDENTIFIER, "name"))

    // 使用自定义访问器遍历 VarPattern 节点
    varPattern.traverse(MyVisitor())
}

运行结果:

Visiting VarPattern

class VArrayExpr

public class VArrayExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示 VArray 的实例节点。

一个 VArrayExpr 节点:let arr: VArray<Int64, $5> = VArray<Int64, $5>({ i => i }) 中的 VArray<Int64, $5>({ i => i })

父类型:

prop arguments

public mut prop arguments: ArrayList<Argument>

功能:获取或设置 VArrayExpr 中的中的初始化参数序列。

类型:ArrayList<Argument>

prop lParen

public mut prop lParen: Token

功能:获取或设置 VArrayExpr 中的 "("。

类型:Token

异常:

prop rParen

public mut prop rParen: Token

功能:获取或设置 VArrayExpr 中的 ")"。

类型:Token

异常:

prop vArrayType

public mut prop vArrayType: VArrayType

功能:获取或设置 VArrayExpr 的 VArray 类型节点。

类型:VArrayType

init()

public init()

功能:构造一个默认的 VArrayExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 VArrayExpr 对象
    let varrayExpr = VArrayExpr()
    
    // 设置 VArrayExpr 的属性
    varrayExpr.lParen = Token(TokenKind.LPAREN, "(")
    varrayExpr.rParen = Token(TokenKind.RPAREN, ")")
    
    let argument = Argument()
    argument.expr = parseExpr(quote({ i => i }))
    varrayExpr.arguments.add(argument)
    varrayExpr.vArrayType = VArrayType(quote(VArray<Int32, \$5>))

    // 转化为 Tokens 并输出
    println("varrayExpr.toTokens(): ${varrayExpr.toTokens()}")
}

运行结果:

varrayExpr.toTokens(): VArray < Int32, $5 >({ i =>
    i
})

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 VArrayExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 VArrayExpr 对象
    let varrayExpr = VArrayExpr(quote(VArray<Int64, \$5>({ i => i })))

    // 转化为 Tokens 并输出
    println("varrayExpr.toTokens(): ${varrayExpr.toTokens()}")
}

运行结果:

varrayExpr.toTokens(): VArray < Int64, $5 >({ i =>
    i
})

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let varrayExpr = VArrayExpr(quote(VArray<Int64, \$5>(repeat: 0)))

    // 转化为 Tokens 并输出
    println("varrayExpr.toTokens(): ${varrayExpr.toTokens()}")
}

运行结果:

varrayExpr.toTokens(): VArray < Int64, $5 >(repeat: 0)

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若提前终止遍历子节点的行为,可重写 visit 函数并调用 breakTraverse 函数提前终止遍历行为,请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: VArrayExpr) {
        println("Visiting VArrayExpr")
    }
}

main(): Unit {
    let varrayExpr = VArrayExpr(quote(VArray<Int64, \$5>({ i => i })))

    // 使用自定义访问器遍历 VArrayExpr 节点
    varrayExpr.traverse(MyVisitor())
}

运行结果:

Visiting VArrayExpr

class VArrayType

public class VArrayType <: TypeNode {
    public init(inputs: Tokens)
    public init()
}

功能:表示 VArray 类型节点。

使用泛型 VArray<T, size: Int64> 表示 VArray 类型。

父类型:

prop dollar

public mut prop dollar: Token

功能:获取或设置 VArrayType 节点中的操作符 $ 的词法单元。

类型:Token

异常:

prop elementTy

public mut prop elementTy: TypeNode

功能:获取或设置 VArrayType 节点中的类型变元节点,如 VArray<Int16, $0> 中的 Int16

类型:TypeNode

prop keyword

public mut prop keyword: Token

功能:获取或设置 VArrayType 节点的关键字 VArray 的词法单元。

类型:Token

prop lAngle

public mut prop lAngle: Token

功能:获取或设置 VArrayType 节点左尖括号的词法单元。

类型:Token

异常:

prop rAngle

public mut prop rAngle: Token

功能:获取或设置 VArrayType 节点右尖括号的词法单元。

类型:Token

异常:

prop size

public mut prop size: Token

功能:获取或设置 VArrayType 节点中类型长度的词法单元。

类型:Token

init()

public init()

功能:构造一个默认的 VArrayType 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 VArrayType 对象
    let varrayType = VArrayType()
    
    // 设置 VArrayType 的属性
    varrayType.dollar = Token(TokenKind.DOLLAR, "$")
    varrayType.keyword = Token(TokenKind.VARRAY, "VArray")
    varrayType.elementTy = PrimitiveType(quote(Int32))
    varrayType.size = Token(TokenKind.INTEGER_LITERAL, "10")
    
    // 转化为 Tokens 并输出
    println("varrayType.toTokens(): ${varrayType.toTokens()}")
}

运行结果:

varrayType.toTokens(): VArray < Int32, $10 >

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 VArrayType 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 VArrayType 对象
    let varrayType = VArrayType(quote(VArray<Int64, \$5>))

    // 转化为 Tokens 并输出
    println("varrayType.toTokens(): ${varrayType.toTokens()}")
}

运行结果:

varrayType.toTokens(): VArray < Int64, $5 >

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let varrayType = VArrayType(quote(VArray<Int64, \$5>))

    // 转化为 Tokens 并输出
    println("varrayType.toTokens(): ${varrayType.toTokens()}")
}

运行结果:

varrayType.toTokens(): VArray < Int64, $5 >

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若提前终止遍历子节点的行为,可重写 visit 函数并调用 breakTraverse 函数提前终止遍历行为,请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: VArrayType) {
        println("Visiting VArrayType")
    }
}

main(): Unit {
    let varrayType = VArrayType(quote(VArray<Int64, \$5>))

    // 使用自定义访问器遍历 VArrayType 节点
    varrayType.traverse(MyVisitor())
}

运行结果:

Visiting VArrayType

class VarOrEnumPattern

public class VarOrEnumPattern <: Pattern {
    public init(identifier: Token)
    public init()
}

功能:表示当模式的标识符为 Enum 构造器时的节点。

例如 case RED 中的 REDEnum 构造器。

父类型:

prop identifier

public mut prop identifier: Token

功能:获取或设置 VarOrEnumPattern 节点中的标识符的词法单元。

类型:Token

init()

public init()

功能:构造一个默认的 VarOrEnumPattern 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 VarOrEnumPattern 对象
    let varOrEnumPattern = VarOrEnumPattern()
    
    // 设置 VarOrEnumPattern 的属性
    varOrEnumPattern.identifier = Token(TokenKind.IDENTIFIER, "GREEN")
    
    // 转化为 Tokens 并输出
    println("varOrEnumPattern.toTokens(): ${varOrEnumPattern.toTokens()}")
}

运行结果:

varOrEnumPattern.toTokens(): GREEN

init(Token)

public init(identifier: Token)

功能:构造一个 VarOrEnumPattern 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Token 创建 VarOrEnumPattern 对象
    let varOrEnumPattern = VarOrEnumPattern(Token(TokenKind.IDENTIFIER, "BLUE"))

    // 转化为 Tokens 并输出
    println("varOrEnumPattern.toTokens(): ${varOrEnumPattern.toTokens()}")
}

运行结果:

varOrEnumPattern.toTokens(): BLUE

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let varOrEnumPattern = VarOrEnumPattern(Token(TokenKind.IDENTIFIER, "YELLOW"))

    // 转化为 Tokens 并输出
    println("varOrEnumPattern.toTokens(): ${varOrEnumPattern.toTokens()}")
}

运行结果:

varOrEnumPattern.toTokens(): YELLOW

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若提前终止遍历子节点的行为,可重写 visit 函数并调用 breakTraverse 函数提前终止遍历行为,请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: VarOrEnumPattern) {
        println("Visiting VarOrEnumPattern")
    }
}

main(): Unit {
    let varOrEnumPattern = VarOrEnumPattern(Token(TokenKind.IDENTIFIER, "PURPLE"))

    // 使用自定义访问器遍历 VarOrEnumPattern 节点
    varOrEnumPattern.traverse(MyVisitor())
}

运行结果:

Visiting VarOrEnumPattern

class VarPattern

public class VarPattern <: Pattern {
    public init(identifier: Token)
    public init()
}

功能:表示绑定模式节点。

使用一个合法的标识符表示,如 for (i in 1..10) 中的 i

父类型:

prop identifier

public mut prop identifier: Token

功能:获取或设置 VarPattern 节点中的标识符符的词法单元。

类型:Token

init()

public init()

功能:构造一个默认的 VarPattern 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 VarPattern 对象
    let varPattern = VarPattern()
    
    // 设置 VarPattern 的属性
    varPattern.identifier = Token(TokenKind.IDENTIFIER, "index")
    
    // 转化为 Tokens 并输出
    println("varPattern.toTokens(): ${varPattern.toTokens()}")
}

运行结果:

varPattern.toTokens(): index

init(Token)

public init(identifier: Token)

功能:构造一个 VarPattern 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Token 创建 VarPattern 对象
    let varPattern = VarPattern(Token(TokenKind.IDENTIFIER, "item"))

    // 转化为 Tokens 并输出
    println("varPattern.toTokens(): ${varPattern.toTokens()}")
}

运行结果:

varPattern.toTokens(): item

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let varPattern = VarPattern(Token(TokenKind.IDENTIFIER, "value"))

    // 转化为 Tokens 并输出
    println("varPattern.toTokens(): ${varPattern.toTokens()}")
}

运行结果:

varPattern.toTokens(): value

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若提前终止遍历子节点的行为,可重写 visit 函数并调用 breakTraverse 函数提前终止遍历行为,请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: VarPattern) {
        println("Visiting VarPattern")
    }
}

main(): Unit {
    let varPattern = VarPattern(Token(TokenKind.IDENTIFIER, "name"))

    // 使用自定义访问器遍历 VarPattern 节点
    varPattern.traverse(MyVisitor())
}

运行结果:

Visiting VarPattern

class Visitor

public abstract class Visitor {}

功能:一个抽象类,其内部默认定义了访问不同类型 AST 节点访问(visit)函数。

说明:

  • visit 函数搭配 traverse 一起使用,可实现对节点的访问和修改, 所有 visit 函数都有默认为空的实现,可以按需实现需要的 visit 方法。
  • 该类需要被继承使用,并允许子类重新定义访问函数。
  • 对于有父类的节点类型,traverse 函数的遍历顺序为先遍历当前节点,再遍历父类节点,最后遍历子节点。对于无父类的节点类型,traverse 函数先遍历当前节点,再遍历子节点。

func breakTraverse()

public func breakTraverse(): Unit

功能:用于重写 visit 函数中,通过调用该函数来终止继续遍历子节点的行为。

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ClassDecl) {
        println("Visiting ClassDecl")
    }

    public override func visit(_: FuncDecl) {
        println("Visiting FuncDecl")

        // 在 FuncDecl 层级停止遍历
        breakTraverse()
    }

    public override func visit(_: FuncParam) {
        // 不会遍历到
        println("Visiting FuncParam")
    }
}

main(): Unit {
    // 创建一个内含 FuncDecl 和 FuncParam 的 ClassDecl 实例
    let classDecl = ClassDecl(quote(
        class A {
            func foo(a: Int64) {}
        }
    ))
    
    // 使用自定义访问器遍历 ClassDecl 节点
    classDecl.traverse(MyVisitor())
}

运行结果:

Visiting ClassDecl
Visiting FuncDecl

func needBreakTraverse()

protected func needBreakTraverse(): Bool

功能:用于判断是否需要停止遍历。

注意:

该函数会在判断需要停止遍历后将用于判断的标记位重置,因此若在先调用 breakTraverse() 的情况下调用该函数,可能导致上一次 breakTraverse() 失效,影响遍历的停止。

返回值:

  • Bool - 需要停止遍历返回 true;反之,返回 false

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ClassDecl) {
        println("Visiting ClassDecl")
        // 由于 needBreakTraverse() 函数有副作用
        // 这里仅作演示,不建议这样使用
        breakTraverse()
        if (needBreakTraverse()) {
            println("Need to break")
            breakTraverse()
        }
    }
}

main(): Unit {
    // 创建一个内含 FuncDecl 和 FuncParam 的 ClassDecl 实例
    let classDecl = ClassDecl(quote(
        class A {
            func foo(a: Int64) {}
        }
    ))

    // 使用自定义访问器遍历 ClassDecl 节点
    classDecl.traverse(MyVisitor())
}

运行结果:

Visiting ClassDecl
Need to break

func visit(Annotation)

protected open func visit(_: Annotation): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: Annotation) {
        println("Visiting Annotation")
    }
}

main(): Unit {
    let annotation = Annotation(quote(@!Anno))

    // 对 Annotation 节点进行遍历
    annotation.traverse(MyVisitor())
}

运行结果:

Visiting Annotation

func visit(Argument)

protected open func visit(_: Argument): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: Argument) {
        println("Visiting Argument")
    }
}

main(): Unit {
    let argument = Argument()
    argument.expr = RefExpr(quote(value))
    
    // 使用自定义访问器遍历 Argument 节点
    argument.traverse(MyVisitor())
}

运行结果:

Visiting Argument

func visit(ArrayLiteral)

protected open func visit(_: ArrayLiteral): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ArrayLiteral) {
        println("Visiting ArrayLiteral")
    }
}

main(): Unit {
    let arrayLiteral = ArrayLiteral(quote([1, 2]))
    
    // 使用自定义访问器遍历 ArrayLiteral 节点
    arrayLiteral.traverse(MyVisitor())
}

运行结果:

Visiting ArrayLiteral

func visit(AsExpr)

protected open func visit(_: AsExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: AsExpr) {
        println("Visiting AsExpr")
    }
}

main(): Unit {
    let asExpr = AsExpr(quote(a as Int32))
    
    // 使用自定义访问器遍历 AsExpr 节点
    asExpr.traverse(MyVisitor())
}

运行结果:

Visiting AsExpr

func visit(AssignExpr)

protected open func visit(_: AssignExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: AssignExpr) {
        println("Visiting AssignExpr")
    }
}

main(): Unit {
    let assignExpr = AssignExpr(quote(x = 10))
    
    // 使用自定义访问器遍历 AssignExpr 节点
    assignExpr.traverse(MyVisitor())
}

运行结果:

Visiting AssignExpr

func visit(BinaryExpr)

protected open func visit(_: BinaryExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: BinaryExpr) {
        println("Visiting BinaryExpr")
    }
}

main(): Unit {
    let binaryExpr = BinaryExpr(quote(1 + 1))
    
    // 使用自定义访问器遍历 BinaryExpr 节点
    binaryExpr.traverse(MyVisitor())
}

运行结果:

Visiting BinaryExpr

func visit(Block)

protected open func visit(_: Block): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: Block) {
        println("Visiting Block")
    }
}

main(): Unit {
    let block = Block()

    // 设置 Block 的属性
    block.lBrace = Token(TokenKind.LCURL, "{")
    block.rBrace = Token(TokenKind.RCURL, "}")
    
    // 使用自定义访问器遍历 Block 节点
    block.traverse(MyVisitor())
}

运行结果:

Visiting Block

func visit(Body)

protected open func visit(_: Body): Unit

功能:定义访问节点时的操作,需要重写。

参数:

  • _: Body - Body 类型的被遍历节点。

示例:

import std.ast.*
import std.collection.*

class MyVisitor <: Visitor {
    public override func visit(_: Body) {
        println("Visiting Body")
    }
}

main(): Unit {
    // 创建 Body 对象
    let body = Body()

    // 设置 Body 的属性
    body.lBrace = Token(TokenKind.LCURL, "{")
    body.rBrace = Token(TokenKind.RCURL, "}")
    
    // 使用自定义访问器遍历 Body 节点
    body.traverse(MyVisitor())
}

运行结果:

Visiting Body

func visit(CallExpr)

protected open func visit(_: CallExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: CallExpr) {
        println("Visiting CallExpr")
    }
}

main(): Unit {
    let callExpr = CallExpr(quote(foo(42)))
    
    // 使用自定义访问器遍历CallExpr节点
    callExpr.traverse(MyVisitor())
}

运行结果:

Visiting CallExpr

func visit(ClassDecl)

protected open func visit(_: ClassDecl): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ClassDecl) {
        println("Visiting ClassDecl")
    }
}

main(): Unit {
    let classDecl = ClassDecl(quote(class Test {}))
    
    // 使用自定义访问器遍历 ClassDecl 节点
    classDecl.traverse(MyVisitor())
}

运行结果:

Visiting ClassDecl

func visit(CommandTypePattern)

protected open func visit(_: CommandTypePattern): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: CommandTypePattern) {
        println("Visiting CommandTypePattern")
    }
}

main(): Unit {
    let commandTypePattern = CommandTypePattern(quote(e: MyEffect))
    
    // 使用自定义访问器遍历 CommandTypePattern 节点
    commandTypePattern.traverse(MyVisitor())
}

运行结果:

Visiting CommandTypePattern

func visit(ConstPattern)

protected open func visit(_: ConstPattern): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ConstPattern) {
        println("Visiting ConstPattern")
    }
}

main(): Unit {
    let constPattern = ConstPattern(quote(100))
    
    // 使用自定义访问器遍历ConstPattern节点
    constPattern.traverse(MyVisitor())
}

运行结果:

Visiting ConstPattern

func visit(Constructor)

protected open func visit(_: Constructor): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: Constructor) {
        println("Visiting Constructor")
    }
}

main(): Unit {
    // 创建 Constructor 对象
    let constructor = Constructor()
    // 设置标识符为 Month
    constructor.identifier = Token(TokenKind.IDENTIFIER, "Month")
    
    // 使用自定义访问器遍历 Constructor 节点
    constructor.traverse(MyVisitor())
}

运行结果:

Visiting Constructor

func visit(Decl)

protected open func visit(_: Decl): Unit

功能:定义访问节点时的操作,需要重写。

参数:

  • _: Decl - Decl 类型的被遍历节点。

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: Decl) {
        breakTraverse()
        println("Visiting Decl")
    }
}

main(): Unit {
    // 创建 Decl 节点(以 ClassDecl 为例)
    let decl = ClassDecl(quote(class A {}))
    
    // 使用自定义访问器遍历 Decl 节点
    decl.traverse(MyVisitor())
}

运行结果:

Visiting Decl

func visit(DoWhileExpr)

protected open func visit(_: DoWhileExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: DoWhileExpr) {
        println("Visiting DoWhileExpr")
    }
}

main(): Unit {
    let doWhileExpr = DoWhileExpr(quote(do {} while (false)))
    
    // 使用自定义访问器遍历 DoWhileExpr 节点
    doWhileExpr.traverse(MyVisitor())
}

运行结果:

Visiting DoWhileExpr

func visit(EnumDecl)

protected open func visit(_: EnumDecl): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: EnumDecl) {
        println("Visiting EnumDecl")
    }
}

main(): Unit {
    let enumDecl = EnumDecl(quote(enum Status { Pending | Completed }))
    
    // 使用自定义访问器遍历 EnumDecl 节点
    enumDecl.traverse(MyVisitor())
}

运行结果:

Visiting EnumDecl

func visit(EnumPattern)

protected open func visit(_: EnumPattern): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: EnumPattern) {
        println("Visiting EnumPattern")
    }
}

main(): Unit {
    let enumPattern = EnumPattern(quote(Error(code)))
    
    // 使用自定义访问器遍历 EnumPattern 节点
    enumPattern.traverse(MyVisitor())
}

运行结果:

Visiting EnumPattern

func visit(ExceptTypePattern)

protected open func visit(_: ExceptTypePattern): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ExceptTypePattern) {
        println("Visiting ExceptTypePattern")
    }
}

main(): Unit {
    let exceptTypePattern = ExceptTypePattern(quote(err: RuntimeException))
    
    // 使用自定义访问器遍历 ExceptTypePattern 节点
    exceptTypePattern.traverse(MyVisitor())
}

运行结果:

Visiting ExceptTypePattern

func visit(Expr)

protected open func visit(_: Expr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

  • _: Expr - Expr 类型的被遍历节点。

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: Expr) {
        breakTraverse()
        println("Visiting Expr")
    }
}

main(): Unit {
    // 创建 Expr 节点(以 BinaryExpr 为例)
    let expr = BinaryExpr(quote(1 + 1))
    
    // 使用自定义访问器遍历 Expr 节点
    expr.traverse(MyVisitor())
}

运行结果:

Visiting Expr

func visit(ExtendDecl)

protected open func visit(_: ExtendDecl): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ExtendDecl) {
        println("Visiting ExtendDecl")
    }
}

main(): Unit {
    let extendDecl = ExtendDecl(quote(extend A { func foo() {} }))

    // 对 ExtendDecl 节点进行遍历
    extendDecl.traverse(MyVisitor())
}

运行结果:

Visiting ExtendDecl

func visit(FeatureId)

protected open func visit(_: FeatureId): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: FeatureId) {
        println("Visiting FeatureId")
    }
}

main(): Unit {
    // 构造一个默认的 FeatureId 对象
    let featureId = FeatureId()

    // 设置 FeatureId 的属性
    featureId.identifiers = quote(a b c)
    featureId.dots = quote(. .)
    
    // 使用自定义访问器遍历 FeatureId 节点
    featureId.traverse(MyVisitor())
}

运行结果:

Visiting FeatureId

func visit(FeaturesDirective)

protected open func visit(_: FeaturesDirective): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: FeaturesDirective) {
        println("Visiting FeaturesDirective")
    }
}

main(): Unit {
    // 用 Tokens 创建一个 FeaturesDirective 对象
    let featuresDirective = FeaturesDirective(quote(features {a, b.c}))
    
    // 使用自定义访问器遍历 FeaturesDirective 节点
    featuresDirective.traverse(MyVisitor())
}

运行结果:

Visiting FeaturesDirective

func visit(FeaturesSet)

protected open func visit(_: FeaturesSet): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: FeaturesSet) {
        println("Visiting FeaturesSet")
    }
}

main(): Unit {
    // 构造一个默认的 FeaturesSet 对象
    let featuresSet = FeaturesSet()

    // 设置 FeaturesSet 的属性
    let featureId = FeatureId()
    featureId.identifiers = quote(a b c)
    featureId.dots = quote(. .)
    featuresSet.content = ArrayList<FeatureId>([featureId])
    featuresSet.lCurl = Token(TokenKind.LCURL, "{")
    featuresSet.rCurl = Token(TokenKind.RCURL, "}")
    
    // 使用自定义访问器遍历 FeaturesSet 节点
    featuresSet.traverse(MyVisitor())
}

运行结果:

Visiting FeaturesSet

func visit(ForInExpr)

protected open func visit(_: ForInExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ForInExpr) {
        println("Visiting ForInExpr")
    }
}

main(): Unit {
    let forInExpr = ForInExpr(quote(for (i in 1..10) { println(i) }))
    
    // 使用自定义访问器遍历 ForInExpr 节点
    forInExpr.traverse(MyVisitor())
}

运行结果:

Visiting ForInExpr

func visit(FuncDecl)

protected open func visit(_: FuncDecl): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: FuncDecl) {
        println("Visiting FuncDecl")
    }
}

main(): Unit {
    let funcDecl = FuncDecl(quote(func foo() { println("Hello") }))
    
    // 使用自定义访问器遍历 FuncDecl 节点
    funcDecl.traverse(MyVisitor())
}

运行结果:

Visiting FuncDecl

func visit(FuncParam)

protected open func visit(_: FuncParam): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: FuncParam) {
        println("Visiting FuncParam")
    }
}

main(): Unit {
    let funcParam = FuncParam(quote(b!: Float64))
    
    // 使用自定义访问器遍历 FuncParam 节点
    funcParam.traverse(MyVisitor())
}

运行结果:

Visiting FuncParam

func visit(FuncType)

protected open func visit(_: FuncType): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: FuncType) {
        println("Visiting FuncType")
    }
}

main(): Unit {
    let funcType = FuncType(quote((Int32) -> Unit))
    
    // 使用自定义访问器遍历 FuncType 节点
    funcType.traverse(MyVisitor())
}

运行结果:

Visiting FuncType

func visit(GenericConstraint)

protected open func visit(_: GenericConstraint): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: GenericConstraint) {
        println("Visiting GenericConstraint")
    }
}

main(): Unit {
    let genericConstraint = GenericConstraint()
    
    // 使用自定义访问器遍历 GenericConstraint 节点
    genericConstraint.traverse(MyVisitor())
}

运行结果:

Visiting GenericConstraint

func visit(GenericParam)

protected open func visit(_: GenericParam): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: GenericParam) {
        println("Visiting GenericParam")
    }
}

main(): Unit {
    let genericParam = GenericParam(quote(T, U))
    
    // 使用自定义访问器遍历 GenericParam 节点
    genericParam.traverse(MyVisitor())
}

运行结果:

Visiting GenericParam

func visit(IfExpr)

protected open func visit(_: IfExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: IfExpr) {
        println("Visiting IfExpr")
    }
}

main(): Unit {
    let ifExpr = IfExpr(quote(if (a < b) { println(a) } else { println(b) }))
    
    // 使用自定义访问器遍历 IfExpr 节点
    ifExpr.traverse(MyVisitor())
}

运行结果:

Visiting IfExpr

func visit(ImportContent)

protected open func visit(_: ImportContent): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ImportContent) {
        println("Visiting ImportContent")
    }
}

main(): Unit {
    let importContent = ImportContent()
    
    // 使用自定义访问器遍历 ImportContent 节点
    importContent.traverse(MyVisitor())
}

运行结果:

Visiting ImportContent

func visit(ImportList)

protected open func visit(_: ImportList): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ImportList) {
        println("Visiting ImportList")
    }
}

main(): Unit {
    let importList = ImportList(quote(import std.ast.RefType as RT))
    
    // 使用自定义访问器遍历 ImportList 节点
    importList.traverse(MyVisitor())
}

运行结果:

Visiting ImportList

func visit(IncOrDecExpr)

protected open func visit(_: IncOrDecExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: IncOrDecExpr) {
        println("Visiting IncOrDecExpr")
    }
}

main(): Unit {
    let incOrDecExpr = IncOrDecExpr(quote(x--))
    
    // 使用自定义访问器遍历 IncOrDecExpr 节点
    incOrDecExpr.traverse(MyVisitor())
}

运行结果:

Visiting IncOrDecExpr

func visit(InterfaceDecl)

protected open func visit(_: InterfaceDecl): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: InterfaceDecl) {
        println("Visiting InterfaceDecl")
    }
}

main(): Unit {
    let interfaceDecl = InterfaceDecl(quote(interface MyInterface { func foo(): Int64 }))
    
    // 使用自定义访问器遍历 InterfaceDecl 节点
    interfaceDecl.traverse(MyVisitor())
}

运行结果:

Visiting InterfaceDecl

func visit(IsExpr)

protected open func visit(_: IsExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: IsExpr) {
        println("Visiting IsExpr")
    }
}

main(): Unit {
    // 创建一个 IsExpr 对象
    let isExpr = IsExpr(quote(x is String))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 IsExpr 节点
    isExpr.traverse(visitor)
}

运行结果:

Visiting IsExpr

func visit(JumpExpr)

protected open func visit(_: JumpExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: JumpExpr) {
        println("Visiting JumpExpr")
    }
}

main(): Unit {
    // 创建一个 JumpExpr 对象
    let jumpExpr = JumpExpr(quote(break))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 JumpExpr 节点
    jumpExpr.traverse(visitor)
}

运行结果:

Visiting JumpExpr

func visit(LambdaExpr)

protected open func visit(_: LambdaExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: LambdaExpr) {
        println("Visiting LambdaExpr")
    }
}

main(): Unit {
    // 创建一个 LambdaExpr 对象
    let lambdaExpr = LambdaExpr(quote({x: Int => x + 1}))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 LambdaExpr 节点
    lambdaExpr.traverse(visitor)
}

运行结果:

Visiting LambdaExpr

func visit(LetPatternExpr)

protected open func visit(_: LetPatternExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: LetPatternExpr) {
        println("Visiting LetPatternExpr")
    }
}

main(): Unit {
    // 创建一个 LetPatternExpr 对象
    let letPatternExpr = LetPatternExpr(quote(let Some(v) <- x))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 LetPatternExpr 节点
    letPatternExpr.traverse(visitor)
}

运行结果:

Visiting LetPatternExpr

func visit(LitConstExpr)

protected open func visit(_: LitConstExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: LitConstExpr) {
        println("Visiting LitConstExpr")
    }
}

main(): Unit {
    // 创建一个 LitConstExpr 对象
    let litConstExpr = LitConstExpr(quote(123))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 LitConstExpr 节点
    litConstExpr.traverse(visitor)
}

运行结果:

Visiting LitConstExpr

func visit(MacroDecl)

protected open func visit(_: MacroDecl): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: MacroDecl) {
        println("Visiting MacroDecl")
    }
}

main(): Unit {
    // 创建一个 MacroDecl 对象
    let macroDecl = MacroDecl(quote(public macro M(input: Tokens): Tokens {}))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 MacroDecl 节点
    macroDecl.traverse(visitor)
}

运行结果:

Visiting MacroDecl

func visit(MacroExpandDecl)

protected open func visit(_: MacroExpandDecl): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

// 自定义访问者实现
class MyVisitor <: Visitor {
    public override func visit(_: MacroExpandDecl) {
        println("Visiting MacroExpandDecl")
    }
}

main() {
    // 创建一个宏展开声明节点
    let macroExpandDecl = MacroExpandDecl(quote(@M class A {}))
    // 创建自定义访问者
    let visitor = MyVisitor()
    // 遍历节点
    macroExpandDecl.traverse(visitor)
}

运行结果:

Visiting MacroExpandDecl

func visit(MacroExpandExpr)

protected open func visit(_: MacroExpandExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: MacroExpandExpr) {
        println("Visiting MacroExpandExpr")
    }
}

main(): Unit {
    // 创建一个 MacroExpandExpr 对象
    let macroExpandExpr = MacroExpandExpr(quote(@M (a is Int64)))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 MacroExpandExpr 节点
    macroExpandExpr.traverse(visitor)
}

运行结果:

Visiting MacroExpandExpr

func visit(MacroExpandParam)

protected open func visit(_: MacroExpandParam): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: MacroExpandParam) {
        println("Visiting MacroExpandParam")
    }
}

main(): Unit {
    // 构造一个默认的 MacroExpandParam 对象
    let macroExpandParam = MacroExpandParam()
    
    // 设置 MacroExpandParam 的属性
    macroExpandParam.keyword = Token(TokenKind.AT, "@")
    macroExpandParam.identifier = Token(TokenKind.IDENTIFIER, "M")
    macroExpandParam.macroInputs = quote(any)
    
    // 使用自定义访问器遍历 MacroExpandParam 节点
    macroExpandParam.traverse(MyVisitor())
}

运行结果:

Visiting MacroExpandParam

func visit(MainDecl)

protected open func visit(_: MainDecl): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: MainDecl) {
        println("Visiting MainDecl")
    }
}

main(): Unit {
    // 创建一个 MainDecl 对象
    let mainDecl = MainDecl(quote(main() { println("Hello World") }))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 MainDecl 节点
    mainDecl.traverse(visitor)
}

运行结果:

Visiting MainDecl

func visit(MatchCase)

protected open func visit(_: MatchCase): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: MatchCase) {
        println("Visiting MatchCase")
    }
}

main(): Unit {
    // 通过init()创建一个空的 MatchCase 实例
    let matchCase = MatchCase()
    
    // 为实例的各个属性赋值
    matchCase.keywordC = Token(CASE)
    matchCase.expr = BinaryExpr(quote(a > 1))

    // 设置代码块
    let block = Block()
    block.nodes.add(LitConstExpr(quote(true)))
    matchCase.block = block
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 MatchCase 节点
    matchCase.traverse(visitor)
}

运行结果:

Visiting MatchCase

func visit(MatchExpr)

protected open func visit(_: MatchExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: MatchExpr) {
        println("Visiting MatchExpr")
    }
}

main(): Unit {
    // 创建一个 MatchExpr 对象
    let matchExpr = MatchExpr(quote(match (x) { case _ => 2 }))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 MatchExpr 节点
    matchExpr.traverse(visitor)
}

运行结果:

Visiting MatchExpr

func visit(MemberAccess)

protected open func visit(_: MemberAccess): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: MemberAccess) {
        println("Visiting MemberAccess")
    }
}

main(): Unit {
    // 创建一个 MemberAccess 对象
    let memberAccess = MemberAccess(quote(obj.field))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 MemberAccess 节点
    memberAccess.traverse(visitor)
}

运行结果:

Visiting MemberAccess

func visit(Modifier)

protected open func visit(_: Modifier): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: Modifier) {
        println("Visiting Modifier")
    }
}

main(): Unit {
    // 创建一个 Modifier 对象
    let modifier = Modifier(Token(TokenKind.PUBLIC, "public"))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 Modifier 节点
    modifier.traverse(visitor)
}

运行结果:

Visiting Modifier

func visit(Node)

protected open func visit(_: Node): Unit

功能:定义访问节点时的操作,需要重写。

参数:

  • _: Node - Node 类型的被遍历节点。

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: Node) {
        breakTraverse()
        println("Visiting Node")
    }
}

main(): Unit {
    // 创建 Node 节点(以 ClassDecl 为例)
    let node = ClassDecl(quote(class A {}))
    
    // 使用自定义访问器遍历 Node 节点
    node.traverse(MyVisitor())
}

运行结果:

Visiting Node

func visit(OptionalExpr)

protected open func visit(_: OptionalExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: OptionalExpr) {
        println("Visiting OptionalExpr")
    }
}

main(): Unit {
    // 创建一个 OptionalExpr 对象
    let optionalExpr = OptionalExpr(quote(a?))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 OptionalExpr 节点
    optionalExpr.traverse(visitor)
}

运行结果:

Visiting OptionalExpr

func visit(PackageHeader)

protected open func visit(_: PackageHeader): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: PackageHeader) {
        println("Visiting PackageHeader")
    }
}

main(): Unit {
    // 创建一个 PackageHeader 对象
    let packageHeader = PackageHeader(quote(package myPackage))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 PackageHeader 节点
    packageHeader.traverse(visitor)
}

运行结果:

Visiting PackageHeader

func visit(ParenExpr)

protected open func visit(_: ParenExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ParenExpr) {
        println("Visiting ParenExpr")
    }
}

main(): Unit {
    // 创建一个 ParenExpr 对象
    let parenExpr = ParenExpr(quote((1 + 2)))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 ParenExpr 节点
    parenExpr.traverse(visitor)
}

运行结果:

Visiting ParenExpr

func visit(ParenType)

protected open func visit(_: ParenType): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ParenType) {
        println("Visiting ParenType")
    }
}

main(): Unit {
    // 创建一个 ParenType 对象
    let parenType = ParenType(quote((Int32)))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 ParenType 节点
    parenType.traverse(visitor)
}

运行结果:

Visiting ParenType

func visit(Pattern)

protected open func visit(_: Pattern): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: Pattern) {
        breakTraverse()
        println("Visiting Pattern")
    }
}

main(): Unit {
    // 创建 Pattern 节点(以 VarPattern 为例)
    let pattern = VarPattern(quote(e)[0])
    
    // 使用自定义访问器遍历 Pattern 节点
    pattern.traverse(MyVisitor())
}

运行结果:

Visiting Pattern

func visit(PerformExpr)

protected open func visit(_: PerformExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: PerformExpr) {
        println("Visiting PerformExpr")
    }
}

main(): Unit {
    // 构造一个默认的 PerformExpr 对象
    let performExpr = PerformExpr()
    
    // 设置 PerformExpr 的属性
    performExpr.keyword = Token(TokenKind.PERFORM)
    performExpr.expr = CallExpr(quote(Effect()))
    
    // 使用自定义访问器遍历 PerformExpr 节点
    performExpr.traverse(MyVisitor())
}

运行结果:

Visiting PerformExpr

func visit(PrefixType)

protected open func visit(_: PrefixType): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: PrefixType) {
        println("Visiting PrefixType")
    }
}

main(): Unit {
    // 创建一个 PrefixType 对象
    let prefixType = PrefixType(quote(?Int32))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 PrefixType 节点
    prefixType.traverse(visitor)
}

运行结果:

Visiting PrefixType

func visit(PrimaryCtorDecl)

protected open func visit(_: PrimaryCtorDecl): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: PrimaryCtorDecl) {
        println("Visiting PrimaryCtorDecl")
    }
}

main(): Unit {
    // 创建一个 PrimaryCtorDecl 对象
    let primaryCtorDecl = PrimaryCtorDecl(quote(Ctor(x: Int8) { super(x) }))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 PrimaryCtorDecl 节点
    primaryCtorDecl.traverse(visitor)
}

运行结果:

Visiting PrimaryCtorDecl

func visit(PrimitiveType)

protected open func visit(_: PrimitiveType): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: PrimitiveType) {
        println("Visiting PrimitiveType")
    }
}

main(): Unit {
    // 创建一个 PrimitiveType 对象
    let primitiveType = PrimitiveType(quote(Int8))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 PrimitiveType 节点
    primitiveType.traverse(visitor)
}

运行结果:

Visiting PrimitiveType

func visit(PrimitiveTypeExpr)

protected open func visit(_: PrimitiveTypeExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: PrimitiveTypeExpr) {
        println("Visiting PrimitiveTypeExpr")
    }
}

main(): Unit {
    // 创建一个 PrimitiveTypeExpr 对象
    let primitiveTypeExpr = PrimitiveTypeExpr(quote(Int8))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 PrimitiveTypeExpr 节点
    primitiveTypeExpr.traverse(visitor)
}

运行结果:

Visiting PrimitiveTypeExpr

func visit(Program)

protected open func visit(_: Program): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: Program) {
        println("Visiting Program")
    }
}

main(): Unit {
    // 创建一个 Program 对象
    let program = Program(quote(let a = 1))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 Program 节点
    program.traverse(visitor)
}

运行结果:

Visiting Program

func visit(PropDecl)

protected open func visit(_: PropDecl): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: PropDecl) {
        println("Visiting PropDecl")
    }
}

main(): Unit {
    // 创建一个 PropDecl 对象
    let propDecl = PropDecl(quote(prop x: Int32 { get() { 0 } }))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 PropDecl 节点
    propDecl.traverse(visitor)
}

运行结果:

Visiting PropDecl

func visit(QualifiedType)

protected open func visit(_: QualifiedType): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: QualifiedType) {
        println("Visiting QualifiedType")
    }
}

main(): Unit {
    // 创建一个 QualifiedType 对象
    let qualifiedType = QualifiedType(quote(Package.Type))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 QualifiedType 节点
    qualifiedType.traverse(visitor)
}

运行结果:

Visiting QualifiedType

func visit(QuoteExpr)

protected open func visit(_: QuoteExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: QuoteExpr) {
        println("Visiting QuoteExpr")
    }
}

main(): Unit {
    // 创建一个 QuoteExpr 对象
    let quoteExpr = QuoteExpr(quote(quote(x + 1)))
    
    // 创建自定义访问器
    let visitor = MyVisitor()
    
    // 遍历 QuoteExpr 节点
    quoteExpr.traverse(visitor)
}

运行结果:

Visiting QuoteExpr

func visit(QuoteToken)

protected open func visit(_: QuoteToken): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: QuoteToken) {
        println("Visiting QuoteToken")
    }
}

main(): Unit {
    // 创建一个 QuoteToken 对象
    let tokens = quote(quote(x + 1))
    let quoteExpr = QuoteExpr(tokens)
    let quoteToken = quoteExpr.exprs[0]

    // 使用自定义访问器遍历 QuoteToken 节点
    quoteToken.traverse(MyVisitor())
}

运行结果:

Visiting QuoteToken

func visit(RangeExpr)

protected open func visit(_: RangeExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: RangeExpr) {
        println("Visiting RangeExpr")
    }
}

main(): Unit {
    let rangeExpr = RangeExpr(quote(1..10))

    // 对 RangeExpr 节点进行遍历
    rangeExpr.traverse(MyVisitor())
}

运行结果:

Visiting RangeExpr

func visit(RefExpr)

protected open func visit(_: RefExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: RefExpr) {
        println("Visiting RefExpr")
    }
}

main(): Unit {
    let refExpr = RefExpr(quote(myRef))
    
    // 对 RefExpr 节点进行遍历
    refExpr.traverse(MyVisitor())
}

运行结果:

Visiting RefExpr

func visit(RefType)

protected open func visit(_: RefType): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: RefType) {
        println("Visiting RefType")
    }
}

main(): Unit {
    let refType = RefType(quote(MyType))
    
    // 对 RefType 节点进行遍历
    refType.traverse(MyVisitor())
}

运行结果:

Visiting RefType

func visit(ResumeExpr)

protected open func visit(_: ResumeExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ResumeExpr) {
        println("Visiting ResumeExpr")
    }
}

main(): Unit {
    // 构造一个默认的 ResumeExpr 对象
    let resumeExpr = ResumeExpr()
    
    // 设置 ResumeExpr 的属性
    resumeExpr.throwingExpr = Some(CallExpr(quote(Exception())))
    resumeExpr.keywordT = Token(TokenKind.THROWING, "throwing")
    
    // 使用自定义访问器遍历 ResumeExpr 节点
    resumeExpr.traverse(MyVisitor())
}

运行结果:

Visiting ResumeExpr

func visit(ReturnExpr)

protected open func visit(_: ReturnExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ReturnExpr) {
        println("Visiting ReturnExpr")
    }
}

main(): Unit {
    let returnExpr = ReturnExpr(quote(return))
    
    // 对 ReturnExpr 节点进行遍历
    returnExpr.traverse(MyVisitor())
}

运行结果:

Visiting ReturnExpr

func visit(SpawnExpr)

protected open func visit(_: SpawnExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: SpawnExpr) {
        println("Visiting SpawnExpr")
    }
}

main(): Unit {
    let spawnExpr = SpawnExpr(quote(spawn { add(1, 2) }))
    
    // 对 SpawnExpr 节点进行遍历
    spawnExpr.traverse(MyVisitor())
}

运行结果:

Visiting SpawnExpr

func visit(StructDecl)

protected open func visit(_: StructDecl): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: StructDecl) {
        println("Visiting StructDecl")
    }
}

main(): Unit {
    let structDecl = StructDecl(quote(struct Test {}))
    
    // 对 StructDecl 节点进行遍历
    structDecl.traverse(MyVisitor())
}

运行结果:

Visiting StructDecl

func visit(SubscriptExpr)

protected open func visit(_: SubscriptExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: SubscriptExpr) {
        println("Visiting SubscriptExpr")
    }
}

main(): Unit {
    let subscriptExpr = SubscriptExpr(quote(arr[0]))
    
    // 对 SubscriptExpr 节点进行遍历
    subscriptExpr.traverse(MyVisitor())
}

运行结果:

Visiting SubscriptExpr

func visit(SynchronizedExpr)

protected open func visit(_: SynchronizedExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: SynchronizedExpr) {
        println("Visiting SynchronizedExpr")
    }
}

main(): Unit {
    let synchronizedExpr = SynchronizedExpr(quote(synchronized(lock) { }))
    
    // 对 SynchronizedExpr 节点进行遍历
    synchronizedExpr.traverse(MyVisitor())
}

运行结果:

Visiting SynchronizedExpr

func visit(ThisType)

protected open func visit(_: ThisType): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ThisType) {
        println("Visiting ThisType")
    }
}

main(): Unit {
    let thisType = ThisType(quote(This))
    
    // 对 ThisType 节点进行遍历
    thisType.traverse(MyVisitor())
}

运行结果:

Visiting ThisType

func visit(ThrowExpr)

protected open func visit(_: ThrowExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: ThrowExpr) {
        println("Visiting ThrowExpr")
    }
}

main(): Unit {
    let throwExpr = ThrowExpr(quote(throw Exception("Error message")))
    
    // 对 ThrowExpr 节点进行遍历
    throwExpr.traverse(MyVisitor())
}

运行结果:

Visiting ThrowExpr

func visit(TrailingClosureExpr)

protected open func visit(_: TrailingClosureExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: TrailingClosureExpr) {
        println("Visiting TrailingClosureExpr")
    }
}

main(): Unit {
    let trailingClosureExpr = TrailingClosureExpr(quote(f(a){ i => i * i }))
    
    // 对 TrailingClosureExpr 节点进行遍历
    trailingClosureExpr.traverse(MyVisitor())
}

运行结果:

Visiting TrailingClosureExpr

func visit(TryExpr)

protected open func visit(_: TryExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: TryExpr) {
        println("Visiting TryExpr")
    }
}

main(): Unit {
    let tryExpr = TryExpr(quote(try {
        throw Exception("I am an Exception!")
    } catch (e: Exception) {
        println(e)
    }))
    
    // 对 TryExpr 节点进行遍历
    tryExpr.traverse(MyVisitor())
}

运行结果:

Visiting TryExpr

func visit(TupleLiteral)

protected open func visit(_: TupleLiteral): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: TupleLiteral) {
        println("Visiting TupleLiteral")
    }
}

main(): Unit {
    let tupleLiteral = TupleLiteral(quote((1, 2)))
    
    // 对 TupleLiteral 节点进行遍历
    tupleLiteral.traverse(MyVisitor())
}

运行结果:

Visiting TupleLiteral

func visit(TuplePattern)

protected open func visit(_: TuplePattern): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: TuplePattern) {
        println("Visiting TuplePattern")
    }
}

main(): Unit {
    let tuplePattern = TuplePattern(quote((a, b)))
    
    // 对 TuplePattern 节点进行遍历
    tuplePattern.traverse(MyVisitor())
}

运行结果:

Visiting TuplePattern

func visit(TupleType)

protected open func visit(_: TupleType): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: TupleType) {
        println("Visiting TupleType")
    }
}

main(): Unit {
    let tupleType = TupleType(quote((Int64, String)))
    
    // 对 TupleType 节点进行遍历
    tupleType.traverse(MyVisitor())
}

运行结果:

Visiting TupleType

func visit(TypeAliasDecl)

protected open func visit(_: TypeAliasDecl): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: TypeAliasDecl) {
        println("Visiting TypeAliasDecl")
    }
}

main(): Unit {
    let typeAliasDecl = TypeAliasDecl(quote(type Test = Int64))
    
    // 对 TypeAliasDecl 节点进行遍历
    typeAliasDecl.traverse(MyVisitor())
}

运行结果:

Visiting TypeAliasDecl

func visit(TypeConvExpr)

protected open func visit(_: TypeConvExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: TypeConvExpr) {
        println("Visiting TypeConvExpr")
    }
}

main(): Unit {
    let typeConvExpr = TypeConvExpr(quote(Int8(42)))
    
    // 对 TypeConvExpr 节点进行遍历
    typeConvExpr.traverse(MyVisitor())
}

运行结果:

Visiting TypeConvExpr

func visit(TypeNode)

protected open func visit(_: TypeNode): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: TypeNode) {
        breakTraverse()
        println("Visiting TypeNode")
    }
}

main(): Unit {
    // 创建 TypeNode 节点(以 FuncType 为例)
    let typeNode = FuncType(quote((Int64) -> Float64))
    
    // 使用自定义访问器遍历 TypeNode 节点
    typeNode.traverse(MyVisitor())
}

运行结果:

Visiting TypeNode

func visit(TypePattern)

protected open func visit(_: TypePattern): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: TypePattern) {
        println("Visiting TypePattern")
    }
}

main(): Unit {
    let typePattern = TypePattern(quote(i: Int64))

    // 对 TypePattern 节点进行遍历
    typePattern.traverse(MyVisitor())
}

运行结果:

Visiting TypePattern

func visit(UnaryExpr)

protected open func visit(_: UnaryExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: UnaryExpr) {
        println("Visiting UnaryExpr")
    }
}

main(): Unit {
    let unaryExpr = UnaryExpr(quote(!true))

    // 对 UnaryExpr 节点进行遍历
    unaryExpr.traverse(MyVisitor())
}

运行结果:

Visiting UnaryExpr

func visit(VarDecl)

protected open func visit(_: VarDecl): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: VarDecl) {
        println("Visiting VarDecl")
    }
}

main(): Unit {
    let varDecl = VarDecl(quote(var a = 0))

    // 对 VarDecl 节点进行遍历
    varDecl.traverse(MyVisitor())
}

运行结果:

Visiting VarDecl

func visit(VarOrEnumPattern)

protected open func visit(_: VarOrEnumPattern): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: VarOrEnumPattern) {
        println("Visiting VarOrEnumPattern")
    }
}

main(): Unit {
    let varOrEnumPattern = VarOrEnumPattern(Token(TokenKind.IDENTIFIER, "PURPLE"))

    // 对 VarOrEnumPattern 节点进行遍历
    varOrEnumPattern.traverse(MyVisitor())
}

运行结果:

Visiting VarOrEnumPattern

func visit(VarPattern)

protected open func visit(_: VarPattern): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: VarPattern) {
        println("Visiting VarPattern")
    }
}

main(): Unit {
    let varPattern = VarPattern(Token(TokenKind.IDENTIFIER, "name"))

    // 对 VarPattern 节点进行遍历
    varPattern.traverse(MyVisitor())
}

运行结果:

Visiting VarPattern

func visit(VArrayExpr)

protected open func visit(_: VArrayExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: VArrayExpr) {
        println("Visiting VArrayExpr")
    }
}

main(): Unit {
    let varrayExpr = VArrayExpr(quote(VArray<Int64, \$5>({ i => i })))

    // 对 VArrayExpr 节点进行遍历
    varrayExpr.traverse(MyVisitor())
}

运行结果:

Visiting VArrayExpr

func visit(VArrayType)

protected open func visit(_: VArrayType): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: VArrayType) {
        println("Visiting VArrayType")
    }
}

main(): Unit {
    let varrayType = VArrayType(quote(VArray<Int64, \$5>))

    // 对 VArrayType 节点进行遍历
    varrayType.traverse(MyVisitor())
}

运行结果:

Visiting VArrayType

func visit(WhileExpr)

protected open func visit(_: WhileExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: WhileExpr) {
        println("Visiting WhileExpr")
    }
}

main(): Unit {
    let whileExpr = WhileExpr(quote(while(true) {}))

    // 对 WhileExpr 节点进行遍历
    whileExpr.traverse(MyVisitor())
}

运行结果:

Visiting WhileExpr

func visit(WildcardExpr)

protected open func visit(_: WildcardExpr): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: WildcardExpr) {
        println("Visiting WildcardExpr")
    }
}

main(): Unit {
    let wildcardExpr = WildcardExpr(quote(_))

    // 对 WildcardExpr 节点进行遍历
    wildcardExpr.traverse(MyVisitor())
}

运行结果:

Visiting WildcardExpr

func visit(WildcardPattern)

protected open func visit(_: WildcardPattern): Unit

功能:定义访问节点时的操作,需要重写。

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: WildcardPattern) {
        println("Visiting WildcardPattern")
    }
}

main(): Unit {
    let wildcardPattern = WildcardPattern(quote(_))

    // 对 WildcardPattern 节点进行遍历
    wildcardPattern.traverse(MyVisitor())
}

运行结果:

Visiting WildcardPattern

class WhileExpr

public class WhileExpr <: Expr {
    public init(inputs: Tokens)
    public init()
}

功能:表示 while 表达式。

while 是关键字,while 之后是一个小括号,小括号内可以是一个表达式或者一个 let 声明的解构匹配,接着是一个 Block 节点。

父类型:

prop block

public mut prop block: Block

功能:获取或设置 WhileExpr 中的块节点。

类型:Block

prop condition

public mut prop condition: Expr

功能:获取或设置关键字 WhileExpr 中的条件表达式。

类型:Expr

prop keyword

public mut prop keyword: Token

功能:获取或设置 WhileExpr 节点中 while 关键字。

类型:Token

异常:

prop lParen

public mut prop lParen: Token

功能:获取或设置 WhileExprwhile 关键字之后的 "("。

类型:Token

异常:

prop rParen

public mut prop rParen: Token

功能:获取或设置 WhileExprwhile 关键字之后的 ")"。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 WhileExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 WhileExpr 对象
    let whileExpr = WhileExpr()
    
    // 设置 WhileExpr 的属性
    whileExpr.keyword = Token(TokenKind.WHILE, "while")
    whileExpr.condition = parseExpr(quote(true))
    whileExpr.lParen = Token(TokenKind.LPAREN, "(")
    whileExpr.rParen = Token(TokenKind.RPAREN, ")")
    
    let block = Block()
    block.lBrace = Token(TokenKind.LCURL)
    block.rBrace = Token(TokenKind.RCURL)
    whileExpr.block = block
    
    // 转化为 Tokens 并输出
    println("whileExpr.toTokens(): ${whileExpr.toTokens()}")
}

运行结果:

whileExpr.toTokens(): while(true) {
}

init(Tokens)

public init(inputs: Tokens)

功能:构造一个 WhileExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 WhileExpr 对象
    let whileExpr = WhileExpr(quote(while(true) {}))

    // 转化为 Tokens 并输出
    println("whileExpr.toTokens(): ${whileExpr.toTokens()}")
}

运行结果:

whileExpr.toTokens(): while(true) {
}

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let whileExpr = WhileExpr(quote(while(x < 10) { x++ }))

    // 转化为 Tokens 并输出
    println("whileExpr.toTokens(): ${whileExpr.toTokens()}")
}

运行结果:

whileExpr.toTokens(): while(x < 10) {
    x ++
}

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: WhileExpr) {
        println("Visiting WhileExpr")
    }
}

main(): Unit {
    let whileExpr = WhileExpr(quote(while(true) {}))

    // 使用自定义访问器遍历 WhileExpr 节点
    whileExpr.traverse(MyVisitor())
}

运行结果:

Visiting WhileExpr

class WildcardExpr

public class WildcardExpr <: Expr {
    public init(keyword: Tokens)
    public init()
}

功能:表示通配符表达式节点。

父类型:

prop keyword

public mut prop keyword: Token

功能:获取 WildcardExpr 的 "_" 关键字。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 WildcardExpr 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 WildcardExpr 对象
    let wildcardExpr = WildcardExpr()
    
    // 设置 WildcardExpr 的属性
    wildcardExpr.keyword = Token(TokenKind.WILDCARD, "_")
    
    // 转化为 Tokens 并输出
    println("wildcardExpr.toTokens(): ${wildcardExpr.toTokens()}")
}

运行结果:

wildcardExpr.toTokens(): _

init(Tokens)

public init(keyword: Tokens)

功能:构造一个 WildcardExpr 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 WildcardExpr 对象
    let wildcardExpr = WildcardExpr(quote(_))

    // 转化为 Tokens 并输出
    println("wildcardExpr.toTokens(): ${wildcardExpr.toTokens()}")
}

运行结果:

wildcardExpr.toTokens(): _

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let wildcardExpr = WildcardExpr(quote(_))

    // 转化为 Tokens 并输出
    println("wildcardExpr.toTokens(): ${wildcardExpr.toTokens()}")
}

运行结果:

wildcardExpr.toTokens(): _

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: WildcardExpr) {
        println("Visiting WildcardExpr")
    }
}

main(): Unit {
    let wildcardExpr = WildcardExpr(quote(_))

    // 使用自定义访问器遍历 WildcardExpr 节点
    wildcardExpr.traverse(MyVisitor())
}

运行结果:

Visiting WildcardExpr

class WildcardPattern

public class WildcardPattern <: Pattern {
    public init(keyword: Tokens)
    public init()
}

功能:表示通配符模式节点。

使用下划线 "_" 表示,可以匹配任意值。

父类型:

prop wildcard

public mut prop wildcard: Token

功能:获取或设置 WildcardPattern 节点中的 "_" 操作符的词法单元。

类型:Token

异常:

init()

public init()

功能:构造一个默认的 WildcardPattern 对象。

示例:

import std.ast.*

main(): Unit {
    // 构造一个默认的 WildcardPattern 对象
    let wildcardPattern = WildcardPattern()
    
    // 设置 WildcardPattern 的属性
    wildcardPattern.wildcard = Token(TokenKind.WILDCARD, "_")
    
    // 转化为 Tokens 并输出
    println("wildcardPattern.toTokens(): ${wildcardPattern.toTokens()}")
}

运行结果:

wildcardPattern.toTokens(): _

init(Tokens)

public init(keyword: Tokens)

功能:构造一个 WildcardPattern 对象。

参数:

异常:

示例:

import std.ast.*

main(): Unit {
    // 从 Tokens 创建 WildcardPattern 对象
    let wildcardPattern = WildcardPattern(quote(_))

    // 转化为 Tokens 并输出
    println("wildcardPattern.toTokens(): ${wildcardPattern.toTokens()}")
}

运行结果:

wildcardPattern.toTokens(): _

func toTokens()

public func toTokens(): Tokens

功能:将当前语法树节点转化为 Tokens 类型。

返回值:

示例:

import std.ast.*

main(): Unit {
    let wildcardPattern = WildcardPattern(quote(_))

    // 转化为 Tokens 并输出
    println("wildcardPattern.toTokens(): ${wildcardPattern.toTokens()}")
}

运行结果:

wildcardPattern.toTokens(): _

func traverse(Visitor)

public func traverse(v: Visitor): Unit

功能:遍历当前语法树节点及其子节点。若要提前终止子节点遍历,可重写 visit 函数并调用 breakTraverse 函数。请参见自定义访问函数遍历 AST 对象示例

参数:

示例:

import std.ast.*

class MyVisitor <: Visitor {
    public override func visit(_: WildcardPattern) {
        println("Visiting WildcardPattern")
    }
}

main(): Unit {
    let wildcardPattern = WildcardPattern(quote(_))

    // 使用自定义访问器遍历 WildcardPattern 节点
    wildcardPattern.traverse(MyVisitor())
}

运行结果:

Visiting WildcardPattern