如果这取决于源编程语言,那么Python和Javascript将是最重要的。
我的意思是,“有多复杂”是指是否有足够的语法怪异性需要更复杂的处理方式,或者只需要一个关键字列表,并解析源代码以查找不在引号中的关键字即可?
如果你只是想翻译关键字,那么(虽然你确实需要一个合适的解析器,否则避免字符串、注释等任何变化将成为一场噩梦)这个任务相当简单。例如,既然你提到了Python:
import cStringIO
import keyword
import token
import tokenize
samp = '''\
for x in range(8):
if x%2:
y = x
while y>0:
print y,
y -= 3
print
'''
translate = {'for': 'per', 'if': 'se', 'while': 'mentre', 'print': 'stampa'}
def toks(tokens):
for tt, ts, src, erc, ll in tokens:
if tt == token.NAME and keyword.iskeyword(ts):
ts = translate.get(ts, ts)
yield tt, ts
def main():
rl = cStringIO.StringIO(samp).readline
toki = toks(tokenize.generate_tokens(rl))
print tokenize.untokenize(toki)
main()
per x in range (8 ):
se x %2 :
y =x
mentre y >0 :
stampa y ,
y -=3
stampa
range
这样的非关键字仍然没有被翻译(根据您的规格) - 当然,您不必将翻译限制在关键字上(可以轻松地删除上面的if
)。曾经有一刻我在考虑为bash脚本做类似的事情,但这个想法也可以在其他语言中实现:
#!/bin/bash
PrintOnScreen() {
echo "$1 $2 $3 $4 $5 $6 $7 $8 $9"
}
PrintOnScreenWithoutNewline() {
echo -n "$1 $2 $3 $4 $5 $6 $7 $8 $9"
}
MathAdd() {
expr $1 + $2
}
然后我们可以将这个添加到一些脚本中:
#!/bin/bash
. HumanLanguage.sh
PrintOnScreen Hello
PrintOnScreenWithoutNewline "Some number:"
MathAdd 2 3
这将产生:
Hello
Some number: 5
要制作一个能够处理每种情况的翻译是不可能的。以这段Javascript代码为例:
var x = Math.random() < 0.5 ? window : { location : { href : '' } };
var y = x.location.href;
x变量可以成为窗口对象的引用,也可以成为新创建对象的引用。如果是窗口对象,翻译成员才有意义,否则您还需要翻译变量名称,这会很混乱并且可能会引起问题。
此外,了解错误语言并不真正有用。所有文档和示例都将使用原始语言,因此它们将无用。
eval
函数中会有括号内的关键字。这不是一个乐观的答案,也不是一个伟大的答案。然而,我认为它有一些价值。
我可以谈谈C#,但翻译并不值得。以下是原因:
我看到一些人在非英语语言中讨论C#代码。在所有情况下,作者都用他们的母语解释代码,但是以自然的英语代码编写它。最好的方法似乎是尝试学习足够的英语,以便舒适地使用C#。
method
是希腊语,routine
是法语(我想),function
是拉丁语,lambda甚至不是一个单词,只是一个字母拼写出来)。=~
是什么样的单词?即使它们是英语单词,它们通常也不意味着它们在英语中的含义。Yield
是一个很好的例子。实际上,在大多数编程语言中,yield
甚至不意味着它在计算机科学中通常的含义,而且在每种语言中都有不同的含义。 - Jörg W Mittag你应该认为在常用编程语言中,令牌的“事实上”语言是英语。因此,纯粹出于教育目的,使用翻译后的语言来教授可能会对学生造成伤害。
但是,如果你真的想要翻译计算机语言令牌,你应该考虑以下问题:
虽然我没有对这个问题的答案,但我认为这是一个有趣的问题。它提出了一些我一直在思考的问题:
随着发展中国家开始向他们的人民介绍更高级的技术,自然会有一些人对学习编程感兴趣。英语作为唯一的编程语言是否会成为阻碍?
假设一种编程语言是在世界上非英语区域开发的:关键字用该地区的本地语言书写,并使用本地标点符号(例如,使用«»代替“ ”,逗号作为小数点(123,45)等)。这是一种很棒的编程语言,引起了很多关注。你认为它会被广泛采用吗?你会使用它吗?
大多数讲英语的人对第一个问题的回答是“不”。即使是非英语(但受过教育的)人也会回答“不”。但是他们也对第二个问题回答“不”,这似乎是矛盾的。
将一个编程语言中的关键字翻译成另一种语言相对容易。有几种非英语为基础的编程语言,包括中文Python,它用中文关键字替换了英文关键字。
将每个单独的变量名从英语翻译成其他自然语言会更加困难。如果两个不同的英语变量名在另一种语言中只有一个翻译,那么就会出现名称冲突。
for
、while
、function
是否真的这么难?而且,这些是关键词。如果他们有一天需要在某些编程主题上寻求帮助,他们会发现自己无法理解别人在写什么。 - mauris