Есть ли язык программирования с семантикой, близкой к английской? - PullRequest
10 голосов
/ 30 декабря 2010

Большинство языков позволяют «настраивать» определенные части синтаксиса ( C ++ , C # ) и / или семантики, которые вы будете использовать в своем коде (Катахдин , луа ).Но я не слышал о языке, который может полностью определить, как будет выглядеть ваш код.Так не существует ли уже существующего языка, который бы обладал такими возможностями для переопределения синтаксиса all и определения семантики?

Пример того, что я хочу сделать, в основном из кода C # ниже:

foreach(Fruit fruit in Fruits)
{
  if(fruit is Apple)
  {
    fruit.Price =  fruit.Price/2;
  }
}

Я хочу написать этот код на моем идеальном языке следующим образом:

Check if any fruits are Macintosh apples and discount the price by 50%.

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

  1. Очень ясно, что происходит (самоописание) - это ясноАнглийский, в конце концов, даже ребенок будет понимать мою программу
  2. Скрывает все сложности, которые я должен написать на C #.Но почему я должен знать, что операторы if, арифметические операторы и т. Д., Поскольку они уже реализованы

Недостатки, которые я вижу для программиста, который будет поддерживать эту программу:

  1. Возможно, вы бы выразили эту программу не так, как я, поэтому вы можете не получить всю информацию, которую я выразил в своем предложении
  2. Программы могут быть довольно многословными и трудными для отладки, но если возможно, даже приблизиться к этому типусинтаксиса выше, может быть, больше людей начнут программировать правильно?Это было бы удивительно, я думаю.Я могу пойти на работу и просто написать эссе, чтобы нарисовать квадрат на winform вроде этого:

Create a form called MyGreetingForm. Draw a square with in the middle of MyGreetingFormwith a side of 100 points. In the middle of the square write "Hello! Click here to continue" in Arial font.

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

If the user clicks on square in the middle of MyGreetingForm show MyMainForm.

InПриведенный выше код «в основном» компилятор должен: 1) сгенерировать обработчик событий 2) проверить, есть ли какой-либо квадрат в середине формы и, если есть - 3) скрыть форму и показать другую форму

Это выглядит очень сложно, но для меня это не выглядит невозможным. По крайней мере, для меня это приблизительное значение (я могу лично сгенерировать парсер для выполнения 3 шагов выше np, и это в основном то же самое, что и в любом случае, когда вы добавляете дажев C # a.MyEvent=+handler;, поэтому я не вижу здесь проблемы) поэтому я думаю, может быть, кто-то уже сделал что-то подобное?Или есть какое-то практическое бремя сложности для создания такого языка программирования в стиле эссе, которого я не вижу?Я имею в виду, что хуже может случиться, если парсер не так хорош?- ваша программа потерпит крах, поэтому вы должны перефразировать ее:)

Ответы [ 6 ]

14 голосов
/ 30 декабря 2010

Выезд:

Осмосский орден программистов на простом английском

Пример кода:

The background is a picture.

A button has a box and a name.

To clear the status:
  Clear the status' string.
  Show everything.

To create the background:
  Draw the screen's box with the white color.
  Loop.
  Pick a spot anywhere in the screen's box.
  Pick a color between the lightest gray color and the white color.
  Dab the color on the spot.
  If a counter is past 80000, break.
  If the counter is evenly divisible by 1000, refresh the screen.
  Repeat.
  Extract the background given the screen's box. \or Create the background from the screen. Or something.
5 голосов
/ 30 декабря 2010

Некоторые интерактивные художественные дизайнеры используют синтаксис языка, очень близкий к английскому языку.Вот код Inform 7 , который вы можете сыграть онлайн :

The foyer is a room.

The apple is in the foyer. It is edible. The description is "This is a ripe, 
green granny smith apple."

The apple core is a thing. The description is "This apple core all that is 
left of that granny smith apple you just consumed."

After eating the apple:  
  now the apple core is in the player;
  say "You gobble down the apple careful not to eat any of those cyanide-
  laced seeds you heard about."

У меня был курс, который использовал Inform 7. У одного из преподавателей сложилось впечатление, чтозадание было оформить, а не написать игру.Поэтому он пометил программы, прочитав их, не осознавая, что они были настоящими программами.

2 голосов
/ 30 декабря 2010

Я не думаю, что это будет легкой задачей, и при этом я не думаю, что это облегчит жизнь для отладки

Как бы вы справились с этими проблемами?

  • орфографические ошибки
  • разные диалекты в разных уголках мира
  • разных диалектов в одной и той же части света
  • 1012 * синонимы *
  • какую часть предложения вы сначала анализируете?
  • разрыв (разрыв) и разрыв (от глаз) оба слова написаны одинаково, но означают две разные вещи.

Верните КОБОЛ или вы можете вспомнить «Идите на запад», «Исследуйте дверь», «Толкайте дверь», «Откройте дверь», «Используйте ключ на двери»:)

edit - как бы вы сильно набрали это?

1 голос
/ 27 января 2014

Я написал расширяемый компилятор с английского на Python под названием EngScript , который преобразует структурированный английский в рабочий код Python.

Это пример кода EngScript:

print{create a string from the file called "README.txt"}
print{save the string "Woohoo!" to a file called "ExampleText.txt"}
print{the first 3 letters of "EngScript"}

Это вывод, сгенерированный компилятором EngScript:

print(pythonFunctions.stringFromTextFile("README.txt"))
print(pythonFunctions.writeStringToFile("ExampleText.txt", "Woohoo!"))
print("EngScript"[0:(3 - 1)+1])
0 голосов
/ 16 марта 2018

LiveCode!Есть несколько «естественных языков», высокоуровневых, похожих на английский языков программирования или сценариев.Вероятно, все они были вдохновлены самым старым, COBOL.Мой личный любимый из этих языков - LiveCode.LiveCode является потомком MetaCard, клона Linux для несуществующей ныне Apple HyperCard, использующей язык сценариев, похожий на английский, называемый HyperTalk, который был вдохновлен SmallTalk, и, в свою очередь, вдохновил JavaScript (а также весь World-Wide-Web).HyperTalk послужил основой для другого языка сценариев, похожего на английский, под названием AppleScript (и позже AppleScriptObjC), который до сих пор поставляется с macOS.LiveCode использует язык под названием LiveCodeScript или LCS, который, как и другие клоны HyperCard, и который существовал на протяжении многих лет (SuperCard, Adobe Lingo / Flash ActionScript, Open Xion, Oracle Toolbook и т. Д.), Очень похож на HyperTalk по своей сути,часто упоминается как язык X-Talk.LiveCode имеет несколько преимуществ;он все еще находится в производстве, имеет двойную лицензию (с открытым исходным кодом и коммерческие версии), движок кросс-платформенный (Mac, Win, Linux, HTML5, iOS, Android и серверная версия), и, как и HyperCard, этотакже инструментарий GUI, и это расширяемый.В настоящее время команда LiveCode работает над новым языком программирования более низкого уровня, который называется LiveCode Builder или LCB.LCB также похож на английский, хотя LCB немного менее читабелен, чем LCS, его целью является обеспечение возможностей на уровне языков более низкого уровня, таких как C ++, Objective C и т. Д., Что позволяет расширить платформу LiveCode с помощью библиотек кодаи фреймворки, созданные другими библиотеками языков программирования, и в конечном итоге позволяющие писать LiveCode IDE на своем собственном языке.

0 голосов
/ 30 декабря 2010

Попробуйте использовать язык программирования под названием «Google» - он имеет естественный английский интерфейс, а фрагмент кода отбрасывает все предлагаемые вами ответы. Интересно, что всего через шесть минут после того, как вы задали этот вопрос, эта страница является # 1 для запроса:

Проверьте, есть ли фрукты Макинтош яблоки и скидка на цену 50%

Используйте Google API, и я думаю, что у вас есть естественный английский язык программирования.

...