将源代码翻译成外语

Loï*_*ier 12 c c++ localization

我正在运行一个教育网站,教孩子们(12-15岁).

因为他们并不都在解决方案的代码源中说英语,所以我们使用法语变量和函数名称.但是,我们计划将内容翻译成其他语言(德语,西班牙语,英语).为此,我想尽快翻译源代码.我们大多数都有C/C++代码.

我打算使用的解决方案:

  1. 从源代码中提取所有变量/函数名称,以及它们在文件中的位置(声明,使用,调用它们的位置......)
  2. 删除所有语言关键字和库函数
  3. 请翻译人员提供其余名称的翻译
  4. 替换文件中的名称

是否已经有一些开源代码/项目可以做到这一点?(对于第1,2和4点)

如果没有,那么第一个中最困难的一点是:使用C/C++解析器构建一个语法树然后用它们的位置提取变量似乎是要走的路.你有其他想法吗?

谢谢你的任何建议.

编辑: 如评论中所述,我还需要处理注释,但只有少数几个:完整的解决方案已经用纯文本解释,然后我们用自解释的变量显示代码源/函数名称.源代码很少超过30/40行,如果您已经知道代码在做什么,那么好的名称必须使它在没有注释的情况下可以理解.

附加信息:对于感兴趣的人来说,网站是国际奥林匹克信息学和C/C++的培训平台(至少是编程竞赛所需的最低限度),12岁时学习并不困难.

Sha*_*baz 2

您实际上并不需要 C/C++ 解析器,只需一个简单的词法分析器即可为您一一提供代码元素。然后你会得到很多{[、等,你只需忽略它们并将213)写入结果文件。您可以翻译仅由字母组成的内容(关键字除外),然后将它们放入输出中。

现在我想起来,事情就这么简单:

bool is_letter(char c)
{
    return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
}
bool is_keyword(string &s)
{
    return s == "if" || s == "else" || s == "void" /* rest of them */;
}
void translateCode(istream &in, ostream &out)
{
    while (!in.eof())
    {
        char c = in.get();
        if (is_letter(c))
        {
            string name = "";
            do
            {
                name += c;
                c = in.get();
            } while (is_letter(c) && !in.eof());
            if (is_keyword(name))
                out << name;
            else
                out << translate(name);
        }
        out << c;  // even if is_letter(c) was true, there is a new c from the
                   // while inside that was read (which was not letter), but
                   // not written, so would be written here.
    }
}
Run Code Online (Sandbox Code Playgroud)

我是在编辑器中编写的代码,因此可能会有一些小错误。如果有的话请告诉我,我会修复它。

编辑:解释:

代码所做的只是逐个字符读取输入,输出它读取的任何非字母字符(包括空格、制表符和换行符)。如果它确实看到一个字母,它将开始将所有后续字母放入一个字符串中(直到到达另一个非字母)。然后,如果该字符串是关键字,它将输出关键字本身。如果不是,将翻译它并输出它。

输出的格式与输入完全相同。