how to

Compiler PKU

Dec 25, 2025
2512
1 Minutes
192 Words

bookmark

execute

  • docker run -it --rm -v /home/julyfun/Documents/GitHub/julyfun/compiler/:/root/compiler maxxing/compiler-dev bash
  • cargo run -- -koopa hello.c -o hello.koopa

测试数据:

  • docker /opt/bin/testcases

Lv0

Lv1

  • sysy: C-like lang for education

Lv1.4

Koopa Ir 内存形式没文档. [○・`Д´・ ○]

1
// WRONG
2
let mut main = FunctionData::new(...);
3
let zero = main.new_value().integer(0); // globals 还没初始化, globals.upgrade() 会 panic
4
let main = program.new_func(main); // 太晚了
5
6
// RIGHT
7
let main_data = FunctionData::new(...);
8
let main_func = program.new_func(main_data); // 先添加,初始化 globals
9
let main = program.func_mut(main_func); // 获取可变引用
10
let zero = main.new_value().integer(0); // 现在 globals 已经设置好了

Result:

Terminal window
1
root@4c93081a761b:~/compiler# cat hello.koopa
2
fun @main(): i32 {
3
%entry:
4
ret 32
5
}
6
7
8
Finished `release` profile [optimized] target(s) in 5.61s
9
running test "0_main" ... PASSED
10
running test "1_comments" ... PASSED
11
running test "2_int_dec" ... PASSED
12
running test "3_int_oct" ... PASSED
13
running test "4_int_hex" ... PASSED
14
running test "5_compact" ... PASSED
15
running test "6_whitespaces" ... PASSED
1 collapsed line
16
PASSED (7/7)

顺便就配了一大堆 NVIM.

Lv2

注意 Value 类型是一个指针. dfg.value(*self); 可以获取实际 ValueData. 然后可以 match data.kind()

Article title:Compiler PKU
Article author:Julyfun
Release time:Dec 25, 2025
Copyright 2025
Sitemap