rust的AST.md
Rust 输出 AST
切换为 nightly 版本
rustup override set nightly
rustc --version
输出 AST
1 |
|
Rust AST 分析
Rust AST to Rust code
构建 Rust 程序
syn::ItemFn
1 |
|
ItemFn
是 syn
库中用于表示 Rust 函数的结构体。它包含了构成一个函数定义的所有主要部分。以下是对 ItemFn
结构体各字段的详细解释:
attrs: Vec<Attribute>
attrs
字段包含了函数上的属性(attributes)。在 Rust 中,属性用于给编译器传递额外的信息,比如#[derive(Debug)]
或者#[test]
。这些属性可以应用于许多种类的项,包括函数、结构体、枚举等。- 类型为
Vec<Attribute>
,意味着一个函数可以有零个或多个属性。
vis: Visibility
vis
字段表示函数的可见性(visibility)。Rust 中的可见性关键字有pub
、pub(crate)
等,用于控制项(比如函数、结构体字段等)的访问范围。Visibility
是一个枚举,包含了不同的可见性级别,例如公开(Public
)、私有(Inherited
)、受限(具体受限的范围,如在模块内可见)等。
sig: Signature
sig
字段包含了函数的签名。函数签名定义了函数的名称、参数、返回类型以及其他如是否async
、是否unsafe
的信息。Signature
是一个结构体,包含了函数名称(ident
字段为Ident
类型)、输入参数列表(inputs
字段为Punctuated<FnArg, Comma>
类型)、返回类型(output
字段为ReturnType
类型)、泛型参数等。
block: Box<Block>
block
字段表示函数体,包含了函数的实际代码块。在 Rust 中,函数体由一系列的语句和可能的尾部表达式组成。- 类型为
Box<Block>
,这里Block
是一个结构体,表示由花括号{}
包围的代码块。Box
是 Rust 的一个智能指针类型,用于在堆上分配内存。这里使用Box
是因为代码块可能包含大量的数据,使用堆分配可以避免栈溢出,并且可以提高数据结构的整体性能。
Signature
Signature
结构体在 syn
库中代表了 Rust 函数的签名部分。以下是对 Signature
结构体各字段的详细解释:
constness: Option<Const>
constness
字段表示函数是否是一个const
函数。在 Rust 中,const
函数可以在编译时被求值。- 类型为
Option<Const>
,这意味着该字段可以是None
(表示函数不是const
)或Some(Const)
(表示函数是const
)。
asyncness: Option<Async>
asyncness
字段表示函数是否是异步的,即是否使用了async
关键字。异步函数允许使用.await
语法进行异步操作。- 类型为
Option<Async>
,这意味着该字段可以是None
(表示函数不是异步的)或Some(Async)
(表示函数是异步的)。
unsafety: Option<Unsafe>
unsafety
字段表示函数是否是unsafe
的。在 Rust 中,unsafe
函数允许执行一些正常情况下被 Rust 安全保证所禁止的操作,如直接操作裸指针。- 类型为
Option<Unsafe>
,这意味着该字段可以是None
(表示函数不是unsafe
)或Some(Unsafe)
(表示函数是unsafe
的)。
abi: Option<Abi>
abi
字段表示函数的应用二进制接口(Application Binary Interface,ABI)。ABI 定义了如何在不同的二进制模块或不同的编程语言之间调用函数。- 类型为
Option<Abi>
,这意味着该字段可以是None
(使用 Rust 默认的 ABI)或Some(Abi)
(使用特定的 ABI,如"C"
)。
fn_token: Fn
fn_token
字段是Fn
类型的 token,表示了fn
关键字的存在。
ident: Ident
ident
字段是Ident
类型,代表函数的名称。
generics: Generics
generics
字段表示函数的泛型参数。这包括泛型类型参数、生命周期参数以及它们的约束。- 类型为
Generics
,它包含了函数泛型参数的详细信息。
paren_token: Paren
paren_token
字段是Paren
类型的 token,表示函数参数列表周围的圆括号。
inputs: Punctuated<FnArg, Comma>
inputs
字段表示函数的输入参数列表。- 类型为
Punctuated<FnArg, Comma>
,这是一个使用逗号作为分隔符的列表,包含了一个或多个FnArg
(函数参数)。
variadic: Option<Variadic>
variadic
字段表示函数是否接受可变数量的参数(即 C 风格的可变参数函数)。- 类型为
Option<Variadic>
,这意味着该字段可以是None
(表示函数不接受可变数量的参数)或Some(Variadic)
(表示函数接受可变数量的参数)。
output: ReturnType
output
字段表示函数的返回类型。- 类型为
ReturnType
,它可以是ReturnType::Default
(对应于没有明确指定返回类型的情况,等同于返回()
)或ReturnType::Type
(包含具体的返回类型)。
Signature
结构体提供了对 Rust 函数签名的全面描述,包括函数的名称、参数、返回类型以及其他与函数行为相关的关键字(如 async
、const
、unsafe
)。通过操作这些字段,你可以解析、构造或修改函数签名的 AST。
C 转换为 Rust,使用 syn 库进行 Rust 代码构建,将下面 case C转换为Rust中涉及到的变量、函数声明、调用等操作的对应关系完整的解析,给我一个模板让我能按照模板来将 C 程序和 Rust 程序的对应关系呈现出来
prompt
1 |
|
rust的AST.md
https://abrance.github.io/2024/03/07/mdstorage/project/cToRust/rust的AST/