在 Manus 中运行任何 Skill
一键导入
一键导入
一键在 Manus 中运行任何 Skill
开始使用compiler-dev
星标34
分支5
更新时间2026年1月10日 07:28
编译器后端开发专家,专注于IR、CFG、SSA、数据流分析和优化Pass。
安装
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
SKILL.md
readonly菜单
编译器后端开发专家,专注于IR、CFG、SSA、数据流分析和优化Pass。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
技术图书写作专家,基于三层Prompt架构(系统级→章节模板→实例提示词)生成《AI Context Engineer 视角下的现代编译器实战》书籍章节。
ANTLR4前端开发专家,专注于词法/语法分析、AST构建、访问者模式。
EP项目导航专家,提供21个EP的依赖路由、快速定位和跨EP对比。
Git提交专家,规范化提交信息和分主题提交。
测试开发专家,基于JUnit 5 + AssertJ + Mockito + JaCoCo。
虚拟机开发专家,专注于字节码、指令、栈帧、内存管理和垃圾回收。
| name | compiler-dev |
| description | 编译器后端开发专家,专注于IR、CFG、SSA、数据流分析和优化Pass。 |
| version | v1.0 |
| tags | ["compiler","backend","ir","cfg","ssa","optimization"] |
| allowed-tools | mcp__serena__find_symbol, mcp__serena__replace_symbol_body, mcp__serena__search_for_pattern, Read, Bash |
| requires-skills | ["ep-navigator","antlr4-dev"] |
单一职责: 编译器中后端技术 - 符号表、类型系统、IR、CFG、SSA、优化
ep20/src/main/java/org/teachfx/antlr4/ep20/symtab/scope/GlobalScope, scope/LocalScopesymbol/VariableSymbol, symbol/MethodSymboltype/Type, type/BuiltInType, type/StructTypeep20/src/main/java/org/teachfx/antlr4/ep20/ir/ir/expr/ (BinExpr, UnaryExpr, ConstVal)ir/stmt/ (Assign, Jump, ConditionalJump)CymbolIRBuilder.javaep20/src/main/java/org/teachfx/antlr4/ep20/pass/cfg/ControlFlowAnalysis.java, CFG.javaBasicBlock<IRNode>ep21/src/main/java/org/teachfx/antlr4/ep21/analysis/ssa/SSAGraph.javaanalysis/dataflow/ (LiveVariableAnalysis, ReachingDefinitions)pass/cfg/ (ConstantFolding, CSE, DCE)→ ep-navigator (识别EP范围) → antlr4-dev (AST → IR转换) ← vm-dev (IR → 字节码)
# 1. 创建优化器 (实现IFlowOptimizer<IRNode>)
vim ep21/src/main/java/.../pass/cfg/NewOptimizer.java
# 2. 标准模板
public class NewOptimizer implements IFlowOptimizer<IRNode> {
@Override
public void onHandle(CFG<IRNode> cfg) {
// 遍历基本块
for (BasicBlock<IRNode> block : cfg) {
// 优化逻辑
}
}
}
# 3. 创建测试
vim ep21/src/test/java/.../pass/cfg/NewOptimizerTest.java
# 4. 运行测试
mvn test -pl ep21 -Dtest="*NewOptimizer*"
# 1. 构建支配树
cfg.computeDominanceFrontier();
# 2. 插入Φ函数
ssa.insertPhiFunctions();
# 3. 变量重命名
ssa.renameVariables();
# 4. 验证
mvn test -pl ep21 -Dtest="*SSATest"
// 标准数据流分析框架
public class MyDataFlowAnalysis extends AbstractDataFlowAnalysis<Set<Var>, Set<Var>> {
@Override
public Set<Var> getBoundaryCondition() {
return new HashSet<>(); // 初始状态
}
@Override
public Set<Var> getInitialFlow() {
return new HashSet<>(); // 默认状态
}
@Override
public Set<Var> merge(List<Set<Var>> inputs) {
Set<Var> result = new HashSet<>();
for (Set<Var> input : inputs) {
result.addAll(input); // 合并操作
}
return result;
}
@Override
public Set<Var> flowFunction(BasicBlock<IRNode> block, Set<Var> input) {
Set<Var> output = new HashSet<>(input);
// 传递函数: 根据block内容修改output
return output;
}
}
# 编译器后端
mvn compile -pl ep20 # 编译EP20
mvn compile -pl ep21 # 编译EP21
# 测试
mvn test -pl ep20 -Dtest="*IR*" # 测试IR生成
mvn test -pl ep20 -Dtest="*CFG*" # 测试CFG
mvn test -pl ep21 -Dtest="*SSA*" # 测试SSA
mvn test -pl ep21 -Dtest="*Optimizer*" # 测试优化
# 覆盖率
mvn jacoco:report -pl ep21
open ep21/target/site/jacoco/index.html
| 类型 | 类名 | 字段 | 用途 |
|---|---|---|---|
| 常量 | ConstVal<T> | val: T | 字面量 |
| 变量 | VarSlot | name: String | 变量引用 |
| 二元运算 | BinExpr | lhs, rhs: VarSlot, op: BinaryOpType | a + b |
| 一元运算 | UnaryExpr | expr: VarSlot, op: UnaryOpType | -a |
| 赋值 | Assign | lhs: VarSlot, rhs: Operand | x = y |
| 标签 | Label | name: String, bb: BasicBlock | 基本块标签 |
| 跳转 | Jump | target: BasicBlock | goto L |
| 条件跳转 | CondJump | cond: VarSlot, true/false: BasicBlock | if (cond) |
| 问题 | 原因 | 解决方案 |
|---|---|---|
| IR类型不匹配 | Assign.rhs是Operand不是Expr | 使用ConstVal或VarSlot |
| CFG边方向错误 | getSucceed(id)返回Set<Integer> | 遍历ID再查BasicBlock |
| SSA重命名失败 | 未计算支配边界 | 先调用computeDominanceFrontier() |
| 优化Pass未生效 | 未注册到优化管道 | 添加到OptimizerPipeline |
版本: v1.0 | 垂直职责: 编译器后端 | 2025-12-23