请为我生成一些测试样例,要求
- 每个类型生成 10 个样例
- 需要完全符合我的文法要求(如不能 for()内 int i = 0,不能有++和--,不能有多维数组(最多一维),只能通过 getint 来读和 printf 来输出)
- 每个样例都需要能通过 printf 输出来直接验证我的 mips 代码生成是否正确
你需要生成的类型
-
函数多参数传参
-
短路求值
-
函数数组传参
-
static 相关问题(如只初始化一次)
-
printf 打印顺序错乱
-
复杂的数组索引
-
可能是符号表错误导致访问了错误的变量
-
或者是没有正确考虑 static 类型变量
-
有函数传参多个数组,并对传参数组进行修改的情况
-
变量采用常量初始化
-
静态变量全局和局部重名
-
for 循环里放一个 static,和全局的 static 重名
以下内容是 3-语法代码与 0-示例代码相比需要修改的部分,请检查我的代码是否实现了相关内容的 llvm 生成(即检查 llvm 包和 traverser 包中与下面内容相关的代码)
prompt
请重构 3-语法分析中的 CallInstr,在保持代码功能不变的情况下尽可能减少和 0-参考代码中代码的重复度(你可以修改函数名称、变量名、字符串构建方式、注释和内部逻辑甚至文件名等任何内容),尽可能减少被判定为抄袭的可能性!!!
我的老师十分严格,请认真完成任务
请按照你给出的步骤继续参考 0-参考代码中的代码一步步在 3-语法分析的 backend 文件夹下面一步步完成 mips 代码生成,要求如下
- 代码功能必须保持不变
- 尽可能减少和 0-参考代码中代码的重复度(你可以修改函数名称、变量名、字符串构建方式、注释和内部逻辑等内容),尽可能减少被判定为抄袭的可能性!!!
- 我的老师十分严格,请认真完成任务
- 编译器生成代码可以选择基础指令及伪指令,不能选择宏指令。
- 关闭延迟槽。
- 寄存器按照下表说明使用:
REGISTER NAME USAGE
v1 函数调用返回值常 量 保 留 给 汇 编 器
a3 函数调用参数寄存器,从左到右依次分配,未取得寄存器的实参(>4 的参数)使用运行栈传参
t7 临时寄存器
s7 全局寄存器,分配给局部变量和形参
t9 临时寄存器
$28 $gp 全局指针(Global Pointer)
$29 $sp 堆栈指针(Stack Pointer)
$30 $fp 帧指针(Frame Pointer)
$31 $ra 返回地址(return address)
请继续实现,参考 0-参考代码中 midend2 中与 mips 代码生成有关的代码一步步实现 3-语法分析中 midend 中与 mips 代码生成有关的代码,要求:
- 代码功能必须保持不变
- 尽可能减少和 0-参考代码中代码的重复度(你可以修改函数名称、变量名、字符串构建方式、注释和内部逻辑等内容),尽可能减少被判定为抄袭的可能性!!!
- 我的老师十分严格,请认真完成任务
- 编译器生成代码可以选择基础指令及伪指令,不能选择宏指令。
- 关闭延迟槽。
- 寄存器按照下表说明使用:
REGISTER NAME USAGE
v1 函数调用返回值常 量 保 留 给 汇 编 器
a3 函数调用参数寄存器,从左到右依次分配,未取得寄存器的实参(>4 的参数)使用运行栈传参
t7 临时寄存器
s7 全局寄存器,分配给局部变量和形参
t9 临时寄存器
$28 $gp 全局指针(Global Pointer)
$29 $sp 堆栈指针(Stack Pointer)
$30 $fp 帧指针(Frame Pointer)
$31 $ra 返回地址(return address)
midend mips 生成可选增强(降重与鲁棒性,不影响功能)
- 局部
$s*分配改进:用使用频率/跨块活跃度做一个更“不同”的启发式(当前基于入口块早产生者)。 - 可选引入
$fp:保持当前无$fp的帧也合规,如需更接近教具环境可启用 $fp = sp + frameSize 的调试友好布局(不是硬性要求)。 - Lint 扩展:增加字面量范围检查(如
addiu立即数范围),或报告$at的使用(当前未用)。 - 字符串与数据段转义:进一步覆盖 \t\r 等,当前已对
\n与"做处理,兼容性已足够。