Если все, что вам нужно, - это переводить ключевые слова, то (хотя вам определенно нужен правильный анализатор, так как в противном случае можно избежать любых изменений в строках, комментарии и 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
(странный, хотя правильный пробел, но это может быть достаточно легко исправлено). Как говорящий по-итальянски, я могу вам сказать, что это ужасно читать, но это нормально для любого "перевода с языка программирования" по вашему желанию. Хуже того, NON-ключевые слова, такие как range
, остаются непереведенными (согласно вашим спецификациям) - конечно, у вас нет , чтобы ограничить ваш перевод только ключевыми словами (это достаточно легко удалить if
, который делает это выше; -).