Token-Related Types and Quote Expressions
Inspect one language lane at a time so line-level text and code deltas stay readable.
Diff Lane
English
0 modified sections0 code block delta0 anchor delta
Diff Lane
中文
2 modified sections0 code block delta0 anchor delta
modifiedToken 类型text+1 line
v1.0.5
Section Text
1
宏操作的基本类型是 `Tokens`,代表一个程序片段。`Tokens` 由若干个 `Token` 组成,每个 `Token` 可以理解为用户可操作的词法单元。一个 `Token` 可能是一个标识符(例如变量名等)、字面量(例如整数、浮点数、字符串)、关键字或运算符。每个 `Token` 包含它的类型、内容和位置信息。2
3
`Token` 的类型取值为 enum `TokenKind` 中的元素。`TokenKind` 的可用值详见《仓颉编程语言库 API》文档。通过提供 `TokenKind` 和 `Token` 的值(`TokenKind` 对应的标识符或字面量),可以直接构造任何 `Token`。具体的构造函数如下:4
5
6
下面给出一些`Token`构造的例子:7
8
<!-- compile -->Code 1 · cangjie
1
Token(k: TokenKind)2
Token(k: TokenKind, v: String)Code 2 · cangjie
1
import std.ast.*2
3
let tk1 = Token(TokenKind.ADD) // '+' 运算符4
let tk2 = Token(TokenKind.FUNC) // func 关键字5
let tk3 = Token(TokenKind.IDENTIFIER, "x") // x 标识符6
let tk4 = Token(TokenKind.INTEGER_LITERAL, "3") // 整数字面量7
let tk5 = Token(TokenKind.STRING_LITERAL, "xyz") // 字符串字面量v1.1.0
Section Text
1
宏操作的基本类型是 `Tokens`,代表一个程序片段。`Tokens` 由若干个 `Token` 组成,每个 `Token` 可以理解为用户可操作的词法单元。一个 `Token` 可能是一个标识符(例如变量名等)、字面量(例如整数、浮点数、字符串)、关键字或运算符。每个 `Token` 包含它的类型、内容和位置信息。2
3
`Token` 的类型取值为 enum `TokenKind` 中的元素。`TokenKind` 的可用值详见《仓颉编程语言库 API》文档。通过提供 `TokenKind` 和 `Token` 的值(`TokenKind` 对应的标识符或字面量),可以直接构造任何 `Token`。具体的构造函数如下:4
5
<!-- code_no_check -->6
7
8
下面给出一些`Token`构造的例子:9
10
<!-- compile -->Code 1 · cangjie
1
Token(k: TokenKind)2
Token(k: TokenKind, v: String)Code 2 · cangjie
1
import std.ast.*2
3
let tk1 = Token(TokenKind.ADD) // '+' 运算符4
let tk2 = Token(TokenKind.FUNC) // func 关键字5
let tk3 = Token(TokenKind.IDENTIFIER, "x") // x 标识符6
let tk4 = Token(TokenKind.INTEGER_LITERAL, "3") // 整数字面量7
let tk5 = Token(TokenKind.STRING_LITERAL, "xyz") // 字符串字面量modifiedTokens 类型text+1 line
v1.0.5
Section Text
1
一个 `Tokens` 代表由多个 `Token` 组成的序列。可以通过 `Token` 数组直接构造 `Tokens`。下面是 3 种基本的构造 `Tokens` 实例的方式:2
3
4
此外,`Tokens` 类型支持以下功能:5
6
- `size`:返回 `Tokens` 中包含 `Token` 的数量7
- `get(index: Int64)`:获取指定下标的 `Token` 元素8
- `[]`:获取指定下标的 `Token` 元素9
- `+`:拼接两个 `Tokens`,或者直接拼接 `Tokens` 和 `Token`10
- `dump()`:打印包含的所有 `Token`,供调试使用11
- `toString()`:打印 `Tokens` 对应的程序片段12
13
在下面的案例中,使用构造函数直接构造 `Token` 和 `Tokens`,然后打印详细的调试信息:14
15
<!-- run -->16
17
18
预期输出如下(具体的位置信息可能不同):19
20
21
在 dump 信息中,包含了每个 `Token` 的类型(`description`)和值(`token_literal_value`),最后打印每个 `Token` 的位置信息。Code 1 · cangjie
1
Tokens() // 构造空列表2
Tokens(tks: Array<Token>)3
Tokens(tks: ArrayList<Token>)Code 2 · cangjie
1
import std.ast.*2
3
let tks = Tokens([4
Token(TokenKind.INTEGER_LITERAL, "1"),5
Token(TokenKind.ADD),6
Token(TokenKind.INTEGER_LITERAL, "2")7
])8
main() {9
println(tks)10
tks.dump()11
}Code 3 · text
1
1 + 22
description: integer_literal, token_id: 140, token_literal_value: 1, fileID: 1, line: 4, column: 53
description: add, token_id: 12, token_literal_value: +, fileID: 1, line: 5, column: 54
description: integer_literal, token_id: 140, token_literal_value: 2, fileID: 1, line: 6, column: 5v1.1.0
Section Text
1
一个 `Tokens` 代表由多个 `Token` 组成的序列。可以通过 `Token` 数组直接构造 `Tokens`。下面是 3 种基本的构造 `Tokens` 实例的方式:2
3
<!-- code_no_check -->4
5
6
此外,`Tokens` 类型支持以下功能:7
8
- `size`:返回 `Tokens` 中包含 `Token` 的数量9
- `get(index: Int64)`:获取指定下标的 `Token` 元素10
- `[]`:获取指定下标的 `Token` 元素11
- `+`:拼接两个 `Tokens`,或者直接拼接 `Tokens` 和 `Token`12
- `dump()`:打印包含的所有 `Token`,供调试使用13
- `toString()`:打印 `Tokens` 对应的程序片段14
15
在下面的案例中,使用构造函数直接构造 `Token` 和 `Tokens`,然后打印详细的调试信息:16
17
<!-- run -->18
19
20
预期输出如下(具体的位置信息可能不同):21
22
23
在 dump 信息中,包含了每个 `Token` 的类型(`description`)和值(`token_literal_value`),最后打印每个 `Token` 的位置信息。Code 1 · cangjie
1
Tokens() // 构造空列表2
Tokens(tks: Array<Token>)3
Tokens(tks: ArrayList<Token>)Code 2 · cangjie
1
import std.ast.*2
3
let tks = Tokens([4
Token(TokenKind.INTEGER_LITERAL, "1"),5
Token(TokenKind.ADD),6
Token(TokenKind.INTEGER_LITERAL, "2")7
])8
main() {9
println(tks)10
tks.dump()11
}Code 3 · text
1
1 + 22
description: integer_literal, token_id: 140, token_literal_value: 1, fileID: 1, line: 4, column: 53
description: add, token_id: 12, token_literal_value: +, fileID: 1, line: 5, column: 54
description: integer_literal, token_id: 140, token_literal_value: 2, fileID: 1, line: 6, column: 5