Насколько сложно было бы перевести язык программирования на другой человеческий язык? - PullRequest
7 голосов
/ 31 октября 2009

Позвольте мне объяснить. Предположим, я хочу научить Python тому, кто говорит только по-испански. Как вы знаете, в большинстве языков программирования все ключевые слова на английском языке. Насколько сложно было бы создать программу, которая будет находить все ключевые слова в данном исходном коде и переводить их? Нужно ли мне использовать парсер и прочее, или пары регулярных выражений и строковых функций будет достаточно?

Если это зависит от исходного языка программирования, то Python и Javascript будут наиболее важными.

Что я имею в виду под «насколько сложным это будет», достаточно ли иметь список ключевых слов и анализировать исходный код, чтобы найти ключевые слова не в кавычках? Или достаточно синтаксических странностей, что требуется что-то более сложное?

Ответы [ 9 ]

8 голосов
/ 31 октября 2009

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

0 голосов
/ 19 апреля 2018

Относительно легко перевести ключевые слова с одного языка программирования на другой язык. Существует несколько неанглийских языков программирования , включая Китайский Python , который заменяет английские ключевые слова китайскими.

Было бы намного сложнее перевести каждое отдельное имя переменной с английского на другой естественный язык. Если бы два разных имени английских переменных имели только один перевод на другой язык, было бы столкновение имен .

0 голосов
/ 17 февраля 2010

Вам может показаться интересным Perl Lingua :: Romana :: Perligata - он позволяет вам писать ваши Perl-программы на латинице. Это не совсем то же самое, что ваша идея, поскольку она существенно перестраивает семантику языка вокруг латинских идей, а не просто переводит строки.

0 голосов
/ 17 февраля 2010

Был момент, когда я думал о чем-то подобном для скриптов 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
0 голосов
/ 31 октября 2009

Хотя у меня нет ответа на этот вопрос, я думаю, что он интересный. Это поднимает некоторые проблемы, о которых я думал:

  • Поскольку развивающиеся страны начинают внедрять свое население в более высокие технологии, естественно, некоторые из них будут заинтересованы в обучении программированию. Будут ли помехи только для английского языка?

  • Допустим, язык программирования был разработан в неанглийской части мира: ключевые слова были написаны на родном языке для этой области, и в нем использовалась собственная пунктуация (например, «» вместо «», запятая как десятичная точка (123,45) и т. д.). Это фантастический язык программирования, вызывающий много шума. Как вы думаете, это будет широко распространено? вы использовали бы это?

Большинство англоговорящих людей отвечают «нет» на первый вопрос. Даже неанглийские (но образованные) люди отвечают нет. Но они также отвечают «нет» на второй вопрос, который кажется противоречием.

0 голосов
/ 31 октября 2009

Вам следует подумать, что языком де-факто для токенов на обычно используемых языках программирования является английский. Таким образом, для чисто образовательных целей преподавание на переведенном языке может быть вредным для вашего ученика (ов). Но если вы действительно хотите перевести токены компьютерного языка, вам следует подумать о следующих вопросах:

  • Вы должны переводить языковые примитивные конструкции. Это просто ... вы должны изучить и использовать базовый парсер, например, yacc или antlr
  • Вы должны переводить языковые API. Это может быть так больно и сложно ... во-первых, современные API, такие как Java, очень обширны; во-вторых, вы должны перевести документацию по API .... больше об этом ни слова.
0 голосов
/ 31 октября 2009

Было бы невозможно сделать перевод, который бы обрабатывал каждый случай. Взять, к примеру, этот код Javascript:

var x = Math.random() < 0.5 ? window : { location : { href : '' } };
var y = x.location.href;

Переменная x может стать либо ссылкой на объект окна, либо ссылкой на вновь созданный объект. Было бы целесообразно переводить элементы только в том случае, если это оконный объект, в противном случае вам также придется переводить имена переменных, что может привести к путанице и легко вызвать проблемы.

Кроме того, не очень полезно знать язык не на том языке. Вся документация и примеры будут на языке оригинала, поэтому они будут бесполезны.

0 голосов
/ 31 октября 2009

Это не оптимистичный и не хороший ответ. Тем не менее, я чувствую, что это имеет некоторые достоинства.

Я могу говорить о C # и перевод не стоит. Вот причины:

  1. C # основан на английском языке, но это не английская литература как таковая. Например, что будет "var" или "int" на испанском?
  2. Можно создать программу, позволяющую использовать испанские слова вместо английских ключевых слов, таких как "for", "in" и "as". Однако некоторые испанские эквивалентные слова могут быть составными словами (два слова вместо одного могут быть хитрыми при работе с пробелом), или ключевое слово на английском языке может не иметь прямого испанского эквивалента.
  3. Отладка может быть сложной. После перевода на английский и испанский языки и обратно на английский на испанском языке есть надписи «нагружены ошибками».
  4. Пользователь не будет иметь возможности пользоваться учебными ресурсами. Все примеры кода на C # выполнены так, как это разработал Microsooft. Никто не будет пытаться исповедовать синтаксис только для нескольких пользователей, которые будут использовать ваше приложение.


Я видел, как несколько человек обсуждали код C # на языке, отличном от английского. Во всех случаях авторы объясняют код на своем родном языке, но пишут его на английском языке, как он есть. Наилучшим подходом, кажется, является попытка выучить достаточное количество английского языка, чтобы чувствовать себя комфортно с C #, как это обычно бывает.

0 голосов
/ 31 октября 2009

Проблема, с которой вы столкнетесь, заключается в том, что, если у вас нет строгих стандартов кодирования, тот факт, что люди не обязательно будут следовать шаблону в том, как они делают код. И на любом динамическом языке у вас будет проблема, когда у функции eval будут ключевые слова в кавычках.

Если вы пытаетесь преподавать язык, вы можете создать DSL с ключевыми словами на испанском языке, чтобы вы могли преподавать на своем языке и обрабатывать его на python или javascript, так что вы в основном создали свой собственный язык , с конструкциями, которые вы хотите, для обучения.

Как только они поймут, как программировать, им нужно будет начать изучать языки с ключевыми словами "английский", чтобы они могли общаться с другими, но это может произойти после того, как они поймут, как программировать, если это сделает вашу жизнь проще.

Итак, чтобы ответить на ваш вопрос, достаточно синтаксической странности, что было бы значительно сложнее перевести ключевые слова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...