std.ast 包
功能介绍
ast 包主要包含了仓颉源码的语法解析器和仓颉语法树节点,提供语法解析函数。可将仓颉源码的词法单元 (Tokens) 解析为抽象语法树 (Abstract Syntax Tree) 节点对象。
仓颉 ast 包提供了 Macro With Context 的相关函数,用于在宏展开时获取展开过程中的上下文相关信息。在嵌套宏场景下,内层宏可以调用库函数 assertParentContext(String) 来保证内层宏调用一定嵌套在特定的外层宏调用中。如果内层宏调用这个函数时没有嵌套在给定的外层宏调用中,该函数将抛出一个错误。同时,函数 insideParentContext(String) 也用于检查内层宏调用是否嵌套在特定的外层宏调用中,但是返回一个布尔值。Macro With Context 的相关函数只能作为函数被直接调用,不能赋值给变量,不能作为实参或返回值使用。
Macro With Context 相关函数如下:
- assertParentContext(String)
- insideParentContext(String)
- setItem(String, String)
- setItem(String, Int64)
- setItem(String, Bool)
- getChildMessages(String)
API 列表
函数
| 函数名 | 功能 | 
|---|---|
| getTokenKind(UInt16) | 将词法单元种类序号转化为 TokenKind。 | 
| compareTokens(Tokens, Tokens) | 用于比较两个Tokens是否一致。 | 
| cangjieLex(String) | 将字符串转换为 Tokens类型。 | 
| cangjieLex(String, Bool) | 将字符串转换为 Tokens类型。 | 
| parseProgram(Tokens) | 用于解析单个仓颉文件的源码,获取一个 Program 类型的节点。 | 
| parseDecl(Tokens, String) | 用于解析一组词法单元,获取一个 Decl 类型的节点。 | 
| parseDeclFragment(Tokens, Int64) | 用于解析一组词法单元,获取一个 Decl 类型的节点和继续解析节点的索引。 | 
| parseExpr(Tokens) | 用于解析一组词法单元,获取一个 Expr 类型的节点。 | 
| parseExprFragment(Tokens, Int64) | 用于解析一组词法单元,获取一个 Expr 类型的节点和继续解析节点的索引。 | 
| assertParentContext(String) | 检查当前宏调用是否在特定的宏调用内;若检查不符合预期,编译器出现一个错误提示。 | 
| insideParentContext(String) | 检查当前宏调用是否在特定的宏调用内,返回一个布尔值。 | 
| setItem(String, String) | 内层宏通过该接口发送 string 类型的信息到外层宏。 | 
| setItem(String, Int64) | 内层宏通过该接口发送 Int64 类型的信息到外层宏。 | 
| setItem(String, Bool) | 内层宏通过该接口发送 Bool 类型的信息到外层宏。 | 
| getChildMessages(String) | 获取特定内层宏发送的信息。 | 
| diagReport(DiagReportLevel, Tokens, String, String) | 报错接口,在编译过程的宏展开阶段输出错误提示信息,支持 WARNING和ERROR两个等级的报错。 | 
接口
类
| 类名 | 功能 | 
|---|---|
| Annotation | 表示编译器内置的注解节点。 | 
| Argument | 表示函数调用的实参节点。 | 
| Body | 表示 Class 类型、 Struct 类型、 Interface 类型以及扩展中由 {}和内部的一组声明节点组成的结构。 | 
| Constructor | 表示 enum类型中的Constructor节点。 | 
| GenericConstraint | 表示一个泛型约束节点。 | 
| GenericParam | 表示一个类型形参节点. | 
| ImportContent | 表示包导入节点中的导入项。 | 
| ImportList | 表示包导入节点。 | 
| MacroMessage | 记录内层宏发送的信息。 | 
| MatchCase | 表示一个 MatchCase类型。 | 
| Modifier | 表示该定义具备某些特性,通常放在定义处的最前端。 | 
| Node | 所有仓颉语法树节点的父类。 | 
| PackageHeader | 表示包声明节点。 | 
| Program | 表示一个仓颉源码文件节点。 | 
| Tokens | 对 Token序列进行封装的类型。 | 
| TokensIterator | 实现 Tokens的迭代器功能。 | 
| Decl | 所有声明节点的父类,继承自 Node节点,提供了所有声明节点的通用接口。 | 
| ClassDecl | 类定义节点。 | 
| EnumDecl | 表示一个 Enum定义节点。 | 
| ExtendDecl | 表示一个扩展定义节点。 | 
| FuncParam | 表示函数参数节点,包括非命名参数和命名参数。 | 
| MacroExpandParam | 表示宏调用节点。 | 
| FuncDecl | 表示一个函数定义节点。 | 
| InterfaceDecl | 表示接口定义节点。 | 
| MacroDecl | 表示一个宏定义节点。 | 
| MacroExpandDecl | 表示宏调用节点。 | 
| MainDecl | 表示一个 main函数定义节点。 | 
| PrimaryCtorDecl | 表示一个主构造函数节点。 | 
| PropDecl | 表示一个属性定义节点。 | 
| StructDecl | 表示一个 Struct节点。 | 
| TypeAliasDecl | 表示类型别名节点。 | 
| VarDecl | 表示变量定义节点。 | 
| TypeNode | 所有类型节点的父类,继承自 Node。 | 
| PrimitiveType | 表示一个基本类型节点。 | 
| RefType | 表示一个用户自定义类型节点。 | 
| QualifiedType | 表示一个用户自定义成员类型。 | 
| ParenType | 表示括号类型节点。 | 
| TupleType | 表示元组类型节点。 | 
| ThisType | 表示 This类型节点。 | 
| PrefixType | 表示带问号的前缀类型节点。 | 
| FuncType | 表示函数类型节点。 | 
| VArrayType | 表示 VArray类型节点。 | 
| Pattern | 所有模式匹配节点的父类,继承自 Node节点。 | 
| ConstPattern | 表示常量模式节点。 | 
| WildcardPattern | 表示通配符模式节点。 | 
| VarPattern | 表示绑定模式节点。 | 
| VarOrEnumPattern | 表示当模式的标识符为 Enum构造器时的节点。 | 
| TypePattern | 表示当类型模式节点。 | 
| EnumPattern | 表示 enum 模式节点。 | 
| TuplePattern | 表示 Tuple 模式节点。 | 
| ExceptTypePattern | 表示一个用于异常模式状态下的节点。 | 
| Expr | 所有表达式节点的父类,继承自 Node节点。 | 
| Block | 表示块节点。 | 
| ArrayLiteral | 表示 Array字面量节点。 | 
| AsExpr | 表示一个类型检查表达式。 | 
| AssignExpr | 表示赋值表达式节点。 | 
| BinaryExpr | 表示一个二元操作表达式节点。 | 
| CallExpr | 表示函数调用节点节点。 | 
| DoWhileExpr | 表示 do-while表达式。 | 
| ForInExpr | 表示 for-in表达式。 | 
| UnaryExpr | 表示一个一元操作表达式节点。 | 
| IsExpr | 表示一个类型检查表达式。 | 
| ParenExpr | 表示一个括号表达式节点,是指使用圆括号括起来的表达式。 | 
| LitConstExpr | 表示一个常量表达式节点。 | 
| RefExpr | 表示一个使用自定义类型节点相关的表达式节点。 | 
| ReturnExpr | 表示 return表达式节点。 | 
| ThrowExpr | 表示 throw表达式节点。 | 
| MemberAccess | 表示成员访问表达式。 | 
| OptionalExpr | 表示一个带有问号操作符的表达式节点。 | 
| IfExpr | 表示条件表达式。 | 
| LetPatternExpr | 表示 let声明的解构匹配节点。 | 
| MatchExpr | 表示模式匹配表达式实现模式匹配。 | 
| WhileExpr | 表示 while表达式。 | 
| LambdaExpr | 表示 Lambda表达式,是一个匿名的函数。 | 
| SpawnExpr | 表示 Spawn表达式。 | 
| SynchronizedExpr | 表示 synchronized表达式。 | 
| TrailingClosureExpr | 表示尾随 Lambda节点。 | 
| TypeConvExpr | 表示类型转换表达式。 | 
| PrimitiveTypeExpr | 表示基本类型表达式节点。 | 
| TupleLiteral | 表示元组字面量节点。 | 
| RangeExpr | 表示包含区间操作符的表达式。 | 
| SubscriptExpr | 表示索引访问表达式。 | 
| JumpExpr | 表示循环表达式的循环体中的 break和continue。 | 
| IncOrDecExpr | 表示包含自增操作符( ++)或自减操作符(--)的表达式。 | 
| TryExpr | 表示 try表达式节点。 | 
| QuoteExpr | 表示 quote表达式节点。 | 
| QuoteToken | 表示 quote表达式节点内任意合法的token。 | 
| MacroExpandExpr | 表示宏调用节点。 | 
| WildcardExpr | 表示通配符表达式节点。 | 
| VArrayExpr | 表示 VArray的实例节点。 | 
| Visitor | 一个抽象类,其内部默认定义了访问不同类型 AST 节点访问(visit)函数。 | 
枚举
| 枚举名 | 功能 | 
|---|---|
| DiagReportLevel | 表示报错接口的信息等级,支持 ERROR和WARNING两种格式。 | 
| ImportKind | 表示导入语句的类型,包括单导入、别名导入、全导入和多导入四种类型。 | 
| TokenKind | 表示仓颉编译内部所有的词法结构,包括符号、关键字、标识符、换行等。 | 
结构体
异常类
| 异常类名 | 功能 | 
|---|---|
| class ASTException | ast 库的异常类,在 ast 库调用过程中发生异常时使用。 | 
| class ParseASTException | ast 库的解析异常类,在节点解析过程中发生异常时使用。 | 
| class MacroContextException | ast 库的上下文宏异常类,在上下文宏的相关接口中发生异常时使用。 |