-
Notifications
You must be signed in to change notification settings - Fork 38
如何添加新的测例
吴坎 edited this page Nov 27, 2024
·
6 revisions
本页面记录添加新测例的过程,方便持续维护。
- 每个测例包含
*.sy、*.sysu.c源文件。 - 如果测例包含输入,则还包含
*.in.gz文件。 - 注意测例不包含
*.out文件,评测时会使用clang编译的结果对拍,大量的*.out文件会大大增加学生git clone的时间。 - 如
function_test2020/60_while_fibonacci测例包含了60_while_fibonacci.sy60_while_fibonacci.sysu.c60_while_fibonacci.in.gz
- 测例的主要来源是全国大学生计算机系统能力大赛-编译系统设计赛的官方测例。
- 部分
*.sysu.c文件需要#include <sysy/sylib.h>,不然不能被 clang 编译,可以通过sysu-compiler --convert-sysy处理。 -
*.in文本文件需要用python3 -m gzip --best压缩成*.in.gz(压缩时使用最高质量的--best压缩)。 - 特别地,需要检查每个新增算例的语法树需要占用多少内存。
clang直接输出的语法树有太多空格,直接运行可能会占用大于 8GB 的内存空间,此时需要提前导出对应的 json,去除其中多余的空格,并压缩成.json.gz格式的文件,可参照这个,总之需要特别关注长代码。
- 注意文件压缩要使用
python3 -m gzip --best,而不是zip
#!/usr/bin/sh
for file in `ls . | grep '\.sy$'` # .in .out
do
echo $file
# python3 -m gzip --best ${file} # 压缩*.in
# rm $file # 删除*.out *.in
sysu-compiler --convert-sysy $file ${file}su.c # 生成*.sysu.c
done