Как трудно это должно было бы перевести язык программирования на другой естественный язык?

Если это всегда - тот же столбец, то можно создать представление, которое не имеет его в нем.

Иначе, нет я не думаю так.

7
задан JasonMArcher 25 August 2014 в 18:42
поделиться

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 

(странный, хотя и правильный пробел, но это можно легко исправить). Как говорящий по-итальянски, я могу сказать, что это ужасно читать, но это обычное дело для любого «перевода на язык программирования» по вашему желанию. Хуже того, НЕ-ключевые слова, такие как диапазон , остаются непереведенными (согласно вашим спецификациям) - конечно, у вас нет , чтобы ограничить ваш перевод только ключевыми словами (это достаточно легко удалить if , который делает это выше; -).

поскольку вы упомянули 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 

(странный, хотя и правильный пробел, но это можно легко исправить). Как говорящий по-итальянски, я могу сказать, что это ужасно читать, но это нормально для любого «перевода на язык программирования» по вашему желанию. Хуже того, НЕ-ключевые слова, такие как диапазон , остаются непереведенными (согласно вашим спецификациям) - конечно, у вас нет , чтобы ограничить ваш перевод только ключевыми словами (это достаточно легко удалить if , который делает это выше; -).

поскольку вы упомянули 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 

(странный, хотя и правильный пробел, но это можно легко исправить). Как говорящий по-итальянски, я могу сказать, что это ужасно читать, но это обычное дело для любого «перевода на язык программирования» по вашему желанию. Хуже того, НЕ-ключевые слова, такие как диапазон , остаются непереведенными (согласно вашим спецификациям) - конечно, у вас нет , чтобы ограничить перевод только ключевыми словами (это достаточно легко удалить if , который делает это выше; -).

любой источник Python и на любом языке (я предоставляю только частичный перевод ключевых слов на итальянский язык). Это выдает:

per x in range (8 ):
  se x %2 :
    y =x 
    mentre y >0 :
      stampa y ,
      y -=3 
    stampa 

(странный, хотя и правильный пробел, но это можно легко исправить). Как говорящий по-итальянски, я могу сказать, что это ужасно читать, но это нормально для любого «перевода на язык программирования» по вашему желанию. Хуже того, НЕ-ключевые слова, такие как диапазон , остаются непереведенными (согласно вашим спецификациям) - конечно, у вас нет , чтобы ограничить перевод только ключевыми словами (это достаточно легко удалить if , который делает это выше; -).

любой исходный код Python и на любом языке (я предоставляю только частичный перевод ключевых слов на итальянский язык). Это выдает:

per x in range (8 ):
  se x %2 :
    y =x 
    mentre y >0 :
      stampa y ,
      y -=3 
    stampa 

(странный, хотя и правильный пробел, но это можно легко исправить). Как говорящий по-итальянски, я могу сказать, что это ужасно читать, но это обычное дело для любого «перевода на язык программирования» по вашему желанию. Хуже того, НЕ-ключевые слова, такие как диапазон , остаются непереведенными (согласно вашим спецификациям) - конечно, у вас нет , чтобы ограничить ваш перевод только ключевыми словами (это достаточно легко удалить if , который делает это выше; -).

Как говорящий по-итальянски, я могу сказать, что это ужасно читать, но это нормально для любого «перевода на язык программирования» по вашему желанию. Хуже того, НЕ-ключевые слова, такие как диапазон , остаются непереведенными (согласно вашим спецификациям) - конечно, у вас нет , чтобы ограничить ваш перевод только ключевыми словами (это достаточно легко удалить if , который делает это выше; -).

Как говорящий по-итальянски, я могу сказать, что это ужасно читать, но это нормально для любого «перевода на язык программирования» по вашему желанию. Хуже того, НЕ-ключевые слова, такие как диапазон , остаются непереведенными (согласно вашим спецификациям) - конечно, у вас нет , чтобы ограничить ваш перевод только ключевыми словами (это достаточно легко удалить if , который делает это выше; -).

8
ответ дан 7 December 2019 в 05:25
поделиться

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

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

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

Итак,

0
ответ дан 7 December 2019 в 05:25
поделиться

Это не оптимистичный ответ и не лучший. Однако я считаю, что в этом есть свои достоинства.

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

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


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

0
ответ дан 7 December 2019 в 05:25
поделиться

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

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

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

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

0
ответ дан 7 December 2019 в 05:25
поделиться

You should think that the 'de facto' language for tokens on commonly used programming languages is english. So, for purely educational objectives, to teach on a translated language can be harmful for your student(s). Но если вы действительно хотите перевести токены компьютерного языка, вы должны подумать над следующими проблемами:

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

While I don't have an answer to the question, I think it's an interesting one. It brings up some issues which I have been thinking about:

  • As developing countries start introducing their population to higher technologies, naturally some will be interested in learning to program. Will English-only programming languages be an impediment?

  • Let's say a programming language was developed in a non-English part of the world: the keywords were written in the native language for that area and it used the native punctuation (eg, «» instead of " ", a comma as the decimal point (123,45), and so forth). It's a fantastic programming language, generating lots of buzz. Do you think it would see widespread adoption? Would you use it?

Most English-speaking people answer "no" to the first question. Even non-English (but educated) people answer no. But they also answer "no" to the second question, which seems to be a contradiction.

0
ответ дан 7 December 2019 в 05:25
поделиться

Был момент, когда я подумал о чем-то подобном для сценариев 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
ответ дан 7 December 2019 в 05:25
поделиться

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

0
ответ дан 7 December 2019 в 05:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: