让我解释一下。假设我想向只讲西班牙语的人教Python。如您所知,在大多数编程语言中,所有关键字都是英文的。创建一个程序可以找到给定源代码中的所有关键字并进行翻译,这有多复杂?我是否需要使用解析器和东西,或者几个正则表达式和字符串函数是否足够?
如果它依赖于源编程语言,那么Python和Javascript将是最重要的。
我的意思是“它有多复杂”是否足以拥有关键字列表,并解析源代码以查找不在引号中的关键字?或者是否有足够的语法怪异,需要更复杂的东西?
答案 0 :(得分:8)
如果你想要的只是翻译关键词,那么(虽然你肯定需要一个合适的解析器,否则避免任何字符串的变化,评论和c成为一场噩梦)任务很简单。例如,既然你提到了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()
我希望很明显如何将其概括为“翻译”任何Python源代码和任何语言(我只提供非常部分的意大利语关键词翻译词典)。这会发出:
per x in range (8 ):
se x %2 :
y =x
mentre y >0 :
stampa y ,
y -=3
stampa
(奇怪但正确的空格,但这可以很容易地补救)。作为一名意大利语演讲者,我可以告诉你这很难阅读,但这对于任何“编程语言翻译”的课程都是如此。更糟糕的是,range
等非关键字仍未翻译(根据您的规格) - 当然,您 不能将您的翻译限制为仅限关键字(这很容易)足以删除执行上述操作的if
; - )。
答案 1 :(得分:0)
您将遇到的问题是,除非您有严格的编码标准,否则人们不一定会遵循他们如何执行代码的模式。在任何动态语言中,如果eval
函数的引号内包含关键字,您就会遇到问题。
如果您正在尝试教授某种语言,您可以创建一个包含西班牙语关键字的DSL,以便您可以使用您的语言进行教学,并且可以使用python或javascript进行处理,因此您基本上已经制作了自己的语言,用你想要的结构,教学。
一旦他们理解了如何编程,他们就需要开始学习使用“英语”关键词的语言,以便他们可以与他人交流,但这可能是在他们理解如何编程之后,如果它会让你的生活更容易。
所以,为了回答你的问题,有足够的语法怪异,翻译关键词要复杂得多。
答案 2 :(得分:0)
这不是一个乐观的答案,也不是一个伟大的答案。但是,我觉得它有一些优点。
我可以谈论C#,翻译不值得。原因如下:
我见过一些人用英语以外的语言讨论C#代码。在所有情况下,作者都用他们的母语解释代码,但用自然的代码用英文代码编写代码。最好的方法似乎是尝试学习足够的英语以适应C#,因为它自然而然。
答案 3 :(得分:0)
要做出能够处理所有案件的翻译是不可能的。以此Javascript代码为例:
var x = Math.random() < 0.5 ? window : { location : { href : '' } };
var y = x.location.href;
x变量可以成为对窗口对象的引用,也可以成为对新创建的对象的引用。如果成员是窗口对象,那么翻译成员是有意义的,否则你也必须翻译变量名称,这将是一团糟,很容易引起问题。
此外,用错误的语言了解语言并不是很有用。所有文档和示例都将使用原始语言,因此它们将毫无用处。
答案 4 :(得分:0)
您应该认为常用编程语言中令牌的“事实上”语言是英语。因此,对于纯粹的教育目标,教授翻译的语言可能对您的学生有害。 但是,如果你真的想要翻译计算机语言,你应该考虑以下问题:
答案 5 :(得分:0)
虽然我对这个问题没有答案,但我认为这是一个有趣的问题。它提出了一些我一直在思考的问题:
随着发展中国家开始向更高技术引进人口,自然有些人会对学习编程感兴趣。英语编程语言会成为障碍吗?
假设一种编程语言是在世界上非英语部分开发的:关键字是用该语言的母语编写的,它使用原生标点符号(例如,«»而不是“”,逗号作为小数点(123,45),依此类推)。这是一种非常棒的编程语言,产生了很多嗡嗡声。你认为它会被广泛采用吗? 你会使用它吗?
大多数讲英语的人对第一个问题回答“否”。即使是非英语(但受过教育)的人也会回答不。但他们也对第二个问题回答“否”,这似乎是一个矛盾。
答案 6 :(得分:0)
有一刻我正在为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
答案 7 :(得分:0)
你可能会发现Perl的Lingua::Romana::Perligata很有趣 - 它允许你用拉丁语编写你的perl程序。它与你的想法并不完全相同,因为它基本上重新构建了拉丁语思想的语言语义,而不仅仅是翻译字符串。
答案 8 :(得分:0)
将关键字从一种编程语言翻译成另一种语言相对容易。有几个non-English-based programming languages,包括Chinese Python,用中文关键字替换英文关键字。
将每个变量名称从英语翻译成另一种自然语言要困难得多。如果两个不同的英文变量名在另一种语言中只有一个翻译,则会有name collision。