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/project/cToRust/cust相关问题和解决思路/