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/project/cToRust/rust的AST/