[Paper] REMODEL-LLM:使用 LLM 将 C 代码转换为 Java

发布: (2025年12月12日 GMT+8 17:25)
7 min read
原文: arXiv

Source: arXiv - 2512.11402v1

概览

论文 REMODEL‑LLM 评估了紧凑、量化的大语言模型(LLM)在自动将 C 程序翻译成 Java 方面的表现。通过结合基于抽象语法树(AST)的代码分析与严格控制的提示(prompt),作者揭示了 19 种参数不超过 200 亿的模型之间的显著性能层级,突显了轻量级 LLM 在跨语言代码迁移中的潜力与当前局限。

关键贡献

  • 全面基准:在精心挑选的 C→Java 翻译套件上对 19 种量化 LLM(≤ 20 B 参数)进行评测。
  • 混合翻译流水线:首先将 C 源码分解为抽象语法树(AST)以获得语义依据,然后将基于规则的提示输入 LLM 生成代码。
  • 分层性能分类(Tier 1、2、3),清晰区分能够生成可运行 Java 的模型与不能的模型。
  • 实证洞察:指出 function pointerssizeofenums 等特定 C 构造始终导致当前量化模型失效。
  • 开源制品(数据集、提示、评估脚本),便于复现与后续研究。

方法论

  1. 数据集构建 – 收集了 200 条简短 C 代码片段,覆盖广泛的语言特性(控制流、内存管理、数据结构),并为每条提供手工编写的参考 Java 翻译。
  2. AST 提取 – 对每个 C 片段使用 Clang 前端生成 AST。AST 的作用有两点:
    • 提供语言无关的结构化表示,供提示引用。
    • 在调用模型前自动检测不受支持的构造(例如指针算术)。
  3. 提示设计 – 制作了高度受限的规则化提示:
    • “You are a code translator. Use the following AST nodes to produce equivalent Java code. Do not add any imports beyond java.util.*. Do not use unsafe casts.”
    • 提示中还加入了简短的“翻译检查清单”,引导模型正确处理内存模型(例如将手动 malloc 替换为 new)。
  4. 模型推理 – 在零样本设置下(无微调),对 19 种量化 LLM 使用相同的提示‑AST 对进行推理。随后将生成的 Java 代码编译并在基于原始 C 行为的单元测试套件上执行。
  5. 评估指标
    • 编译成功率(可运行 vs. 不可运行)。
    • 功能正确性(单元测试通过率)。
    • 语义保真度(人工检查细微逻辑错误)。

结果与发现

层级代表模型编译成功率功能通过率
Tier 3llama3.1、gemma3、starcoder20 %(全部未编译)0 %
Tier 2mistral‑nemo、mistral~70 % 编译成功10‑20 % 测试通过(存在大量语义错误)
Tier 1phi4、deepseek‑coder‑v2、codeqwen> 90 % 编译成功50‑65 % 测试通过
  • 主要失效模式 – 即使是 Tier 1 模型也会在以下情形出错:
    • 函数指针(无法映射到 Java 接口或 lambda)。
    • sizeof 表达式(被误解释为字面数字)。
    • 基于枚举的 switch 逻辑(产生错误的 case 处理)。
  • 推理上限 – 作者观察到量化(int8/int4)降低了模型进行多步逻辑推理的能力,而这对于正确处理指针别名和低层内存计算至关重要。

实际意义

  • 遗留代码迁移 – 对于结构简单、模板化程度高的 C 模块(如简单 I/O 包装),Tier 1 量化模型已经能够生成可用的 Java 代码,迁移工作量可能降低 30‑40 %。
  • 工具集成 – AST + 提示流水线可封装为 IDE 插件或 CI‑based 迁移助手,提供“自动建议”模式;当模型标记出不支持的构造时自动回退至人工审查。
  • 成本效益部署 – 由于评测模型均能在单 GPU、低显存环境下顺畅运行,组织可以在内部部署翻译服务,无需昂贵的全尺度 LLM API。
  • 安全网 – 明确的层级性能暗示一种实用工作流:运行模型 → 自动编译 → 仅提升通过单元测试的翻译结果,从而避免引入细微 bug。

局限与未来工作

  • 基准范围 – 测试套件侧重于小型、独立的代码片段;未评估大型、多文件、构建系统复杂的项目。
  • 量化影响 – 本研究未与全精度模型对比,仍需明确量化本身导致的性能损失程度。
  • 提示刚性 – 虽然规则化提示提升了一致性,但可能限制模型生成更符合 Java 习惯的代码(如使用流式 API 或泛型)。
  • 作者提出的未来方向 包括:
    • 在特定领域的 C→Java 语料上进行微调或 LoRA 适配。
    • 将 AST‑提示框架扩展至支持大规模代码库的增量翻译。
    • 探索将 LLM 输出与传统规则式转译器相结合的混合方案,以应对最难的构造(函数指针、低层内存算术)。

作者

  • Aryan Gupta
  • Y. Raghu Reddy

论文信息

  • arXiv ID: 2512.11402v1
  • 分类: cs.SE, cs.AI
  • 发布日期: 2025 年 12 月 12 日
  • PDF: Download PDF
Back to Blog

相关文章

阅读更多 »