如果您想要的只是翻译关键字,那么(虽然您确实需要一个合适的解析器,否则会避免字符串的任何更改,注释和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
保持未翻译(根据您的规格)——当然,您不需要have将您的翻译限制为仅限关键字(很容易删除if
就是上面那样做的;-)。