2010-12-30 2 views
10

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

Пример того, что я хочу сделать, это в основном из 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. Это очень ясно, at is going on (self descriptive) - это простой английский, ведь даже ребенок поймет мою программу
  2. Скрывает все сложности, которые мне приходится писать на C#. Но почему я должен заботиться, чтобы узнать, что если заявления, арифметические операторы и т.д., так как там уже реализованы

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

  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.

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

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

+0

Я знаю много людей, которые говорят в LOLspeak –

+6

Там есть было много попыток «семантических языков», и только 2 вещи были последовательными: 1.) они выглядели как беспорядок, и 2.) они никогда не были действительно семантическими. –

+0

По-моему, ваш «идеальный язык» не совсем понятен. Я прочитал первый пример: «Если есть фрукты, яблоки Macintosh, а затем скидка на общую цену на 50%», а не «для каждого фрукта, который является яблоком Macintosh, скидка его цены на 50%». С другой стороны, код C# совершенно ясен. –

ответ

11

Отъезд:

The Osmosian Order of Plain English Programmers

Пример кода:

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. 
+1

+1 Это просто глупо. Для этого я могу использовать свое «время в Google». : 3 – birryree

+0

Будет ли мой компьютер взорваться, если я запустил sample.exe из zip-файла, который я могу загрузить со страницы, с которой вы связались? –

+0

@Martin: Мое взорвалось, остерегайтесь этого ;-) – Sarfraz

5

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

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. Один из наставников было впечатление, что назначение должно было спроектировать, не написать игру. Поэтому он отметил программы, читая их, не понимая, что они были настоящими программами.

+0

очень приятно, я не мог найти это. благодаря! – user44298

2

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

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

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

Верните COBOL или вы можете помнить, «Прогулка Запад», «Исследовать дверь», «Push дверь», «Открытая дверь», «Использовать ключ на двери» :)

редактировать - как Вы бы это напечатали?

+0

Да, правда, отладка будет сумасшедшей. Если есть орфографические ошибки, они могут быть указаны, хотя я думаю? – user44298

0

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

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

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

+0

Google Search использует [пользовательский интерфейс на естественном языке] (https://en.wikipedia.org/wiki/Natural_language_user_interface), но это не [программирование на естественном языке] (https://en.wikipedia.org/wiki/Natural_language_programming). –

1

Я написал расширимый компилятор English-to-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]) 
Смежные вопросы