cust相关问题和解决思路.md
C 调用标准库函数进行一系列操作
问题、解决思路
- 入参 int n … 语法翻译问题
- 通过
AST
中解析出参数中是否有此语法,如果有,则在 IR 中做出记录,在 IR to Rust 中将其转换为Vec<T>
, 并在之后的 Function body 逻辑处理中,将 C 中对 n 的处理,转换为 Rust 对 Vecn 的处理。
- 通过
- 获取 for 循环中的 condition 的 operator 思路
- 计算左操作数的偏移量(
left_offset
):- 首先,获取左操作数实体(
entity.get_child(0)
),假设为二元操作的第一个子实体。 - 使用
.map
遍历左操作数的子实体(这里实际上只有一个),获取每个子实体的源代码范围(get_range()
),然后对这个范围内的标记(tokenize()
)进行计数(.len()
),以确定左操作数占用了多少个标记。 - 通过
.fold
将这些标记数量累加起来,得到left_offset
,即左操作数结束的位置(以标记计数为单位)。
- 首先,获取左操作数实体(
- 获取整个二元操作的标记:
- 通过
entity.get_range().and_then(|r| Some(r.tokenize()))
获取表示整个二元操作的Entity
的源代码范围,并将这个范围内的内容分割成标记。
- 通过
- 提取操作符:
- 使用左操作数的偏移量
left_offset
作为索引,从整个二元操作的标记列表中提取操作符。因为左操作数后面紧跟的标记应该就是操作符本身。
- 使用左操作数的偏移量
- 返回操作符的拼写:
- 通过
get_spelling()
方法获取操作符标记的文本表示,然后将其作为Some
值返回。
- 通过
- 计算左操作数的偏移量(
cust相关问题和解决思路.md
https://abrance.github.io/2024/03/15/mdstorage/project/cToRust/cust相关问题和解决思路/