尝试自动批量翻译方舟编译器源码中的标识符
发布日期:2021-06-29 15:28:51
浏览次数:2
分类:技术文章
本文共 1248 字,大约阅读时间需要 4 分钟。
在对方舟编译器源码中的近百个标识符/字符串常量进行手工汉化后, 尝试用的方式对源码标识符进行自动翻译, 目标是自动翻译后达到与手工相同的效果.
来源于. 批量替换之前基本没有任何语法分析, 仅有不完全的注释/字符串识别处理. 阶段小结如下.
处理的结果与之前的手动修改比较. 生成的diff大约30k, 大约60多处不同. 相对修改的上千处代码来说, 比例很小.
存在的几种问题
-
同名标识符
有些本地标识符没有被替换的, 如DefaultOption
中的mplOptions
. 在汉化过程中, 同名标识符可能属于不同类, 不一定使用同一中文翻译, 这种情况暂时无法处理, 需要语法分析.统计(diff中的出现次数, 下同): 4 8 5 3 1 3 2
ret是否全都是"返回"的语义需逐个检查. 之前并非全局替换.
统计: 7
还有
OptionParser
中的Parse
, 也和Compiler
的Parse
重名.统计: 2 1
-
注释与字符串
一些标识符在注释/字符串中也应翻译, 如:ASSERT(i == 0, "Invalid operand idx in UnaryNode");
中的UnaryNode
. 统计: 15 11 1 当前默认不翻译, 是为了避免不完整翻译. 比如避免"Error while Exe, cmd: "
这一字符串被译为"Error while 运行, cmd: "
-
标识符替换的硬伤:
- LogInfo::MapleLogger() << "/* &" << GlobalTables::GetGsymTable().GetSymbolFromStidx(m.first.Idx())->求名称();+ LogInfo::MapleLogger() << "/* &" << GlobalTables::GetGsymTable().GetSymbolFromStidx(m.first.Idx())->GetName();
此处由于字符串中带有/*
, 因此被误判为注释因而GetName
未被翻译
统计: 2 1 2
- 命名冲突
const int 运行(const 选项类 &mplOptions, const std::string &options) const;
其他多数情况下, mplOptions
和options
都被翻译成"选项", 并无冲突. 但这种情况下, 需要区别.
统计: 1
问题分析
- 2可通过只当某些标识符在注释/字符串中出现时翻译来规避.
- 多数问题(1, 3, 4)需要更进一步的语法分析. 包括字符串/注释的识别, 以及不同类中的同名域的区分等等. 最好借助于现成的C++语言分析器.
自动修改的优点
相比手工修改, 减少了不少低级错误(已在主库修正). 比如手工替换时, 以及未对整体标识符等等.
结论
- 使用程序进行源码自动修改有可行性, 即使工具很简陋
- 在找到好用的C++源码分析器之前, 暂停改进此自动修改工具
转载地址:https://codeinchinese.blog.csdn.net/article/details/102473579 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年04月28日 07时24分47秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
H桥电机驱动电路详解
2019-04-29
电气毕业生在国家电网都干啥工作?
2019-04-29
为什么LED灯会越用越暗?
2019-04-29
知乎热议:嵌入式开发中C++好用吗?
2019-04-29
这100道Linux常见面试题,看看你会多少?
2019-04-29
嵌入式开发中常用的几种通信接口总结
2019-04-29
什么?电路板上还要喷漆?
2019-04-29
读博读废了是种什么样的体验?
2019-04-29
C语言状态机编程思想
2019-04-29
为什么很多电器设备都要使用单片机?
2019-04-29
PCB走线角度为90度到底行不行?
2019-04-29
这个 17 岁的黑客天才,破解了第一代 iPhone!
2019-04-29
在STM32价格疯长下,哪些国产32可以替代?
2019-04-29
半导体芯片原厂涨价及调价声明新增了这些!
2019-04-29
为什么你学C++这么难?
2019-04-29
无人机破巡检难题,秒变电网卫士
2019-04-29
五年,我成为了一名嵌入式工程师。
2019-04-29
2020年电赛题目,命题专家们怎么看?
2019-04-29
PCB元器件摆放不可忽略的10个技巧
2019-04-29
掌握AI核心技术没有秘籍,能自己创造就是王道
2019-04-29