smithery.ai

compiler-dev

编译器后端开发专家,专注于IR、CFG、SSA、数据流分析和优化Pass。

First seen Apr 22, 2026

Installation

$ npx skills add https://smithery.ai

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from smithery.ai · top by installs.

npx skills add https://smithery.ai

Browse all from smithery.ai

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Skill metadata

Parsed from SKILL.md frontmatter.

Versionv1.0
Allowed toolsmcp__serena__find_symbol, mcp__serena__replace_symbol_body, mcp__serena__search_for_pattern, Read, Bash

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 4,890 B
  • docs SUMMARY.md 107 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 1 installs

SKILL.md

编译器后端开发

🎯 垂直职责

单一职责: 编译器中后端技术 - 符号表、类型系统、IR、CFG、SSA、优化

📦 核心能力

1. 符号表与类型系统 (EP6-EP10)

  • 位置: ep20/src/main/java/org/teachfx/antlr4/ep20/symtab/
  • 作用域: scope/GlobalScope, scope/LocalScope
  • 符号: symbol/VariableSymbol, symbol/MethodSymbol
  • 类型: type/Type, type/BuiltInType, type/StructType

2. 中间表示 (EP11-EP17)

  • 位置: ep20/src/main/java/org/teachfx/antlr4/ep20/ir/
  • 表达式: ir/expr/ (BinExpr, UnaryExpr, ConstVal)
  • 语句: ir/stmt/ (Assign, Jump, ConditionalJump)
  • 构建器: CymbolIRBuilder.java

3. 控制流图 (EP16-EP17)

  • 位置: ep20/src/main/java/org/teachfx/antlr4/ep20/pass/cfg/
  • 核心: ControlFlowAnalysis.java, CFG.java
  • 基本块: BasicBlock<IRNode>

4. SSA与优化 (EP21)

  • 位置: ep21/src/main/java/org/teachfx/antlr4/ep21/
  • SSA: analysis/ssa/SSAGraph.java
  • 数据流: analysis/dataflow/ (LiveVariableAnalysis, ReachingDefinitions)
  • 优化: pass/cfg/ (ConstantFolding, CSE, DCE)

🔗 关系图

→ ep-navigator (识别EP范围) → antlr4-dev (AST → IR转换) ← vm-dev (IR → 字节码)

🚀 快速开始

实现新的优化Pass

# 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*"

SSA转换流程

# 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

📐 IR节点速查

类型 类名 字段 用途
常量 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