Loï*_*ier 12 c c++ localization
我正在运行一个教育网站,教孩子们(12-15岁).
因为他们并不都在解决方案的代码源中说英语,所以我们使用法语变量和函数名称.但是,我们计划将内容翻译成其他语言(德语,西班牙语,英语).为此,我想尽快翻译源代码.我们大多数都有C/C++代码.
我打算使用的解决方案:
是否已经有一些开源代码/项目可以做到这一点?(对于第1,2和4点)
如果没有,那么第一个中最困难的一点是:使用C/C++解析器构建一个语法树然后用它们的位置提取变量似乎是要走的路.你有其他想法吗?
谢谢你的任何建议.
编辑: 如评论中所述,我还需要处理注释,但只有少数几个:完整的解决方案已经用纯文本解释,然后我们用自解释的变量显示代码源/函数名称.源代码很少超过30/40行,如果您已经知道代码在做什么,那么好的名称必须使它在没有注释的情况下可以理解.
附加信息:对于感兴趣的人来说,网站是国际奥林匹克信息学和C/C++的培训平台(至少是编程竞赛所需的最低限度),12岁时学习并不困难.
您实际上并不需要 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.
    }
}
我是在编辑器中编写的代码,因此可能会有一些小错误。如果有的话请告诉我,我会修复它。
编辑:解释:
代码所做的只是逐个字符读取输入,输出它读取的任何非字母字符(包括空格、制表符和换行符)。如果它确实看到一个字母,它将开始将所有后续字母放入一个字符串中(直到到达另一个非字母)。然后,如果该字符串是关键字,它将输出关键字本身。如果不是,将翻译它并输出它。
输出的格式与输入完全相同。
| 归档时间: | 
 | 
| 查看次数: | 3841 次 | 
| 最近记录: |