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

Я смотрю на написание компилятора, и после того, как я выполню что-то в стиле "C", я смотрю на адаптацию его к другим моделям. Какие синтаксические конструкции вы ожидаете увидеть в «естественном» языке программирования?

Целевой платформой для этого компилятора будет CLR, и в настоящее время я использую Oslo + MGrammar для лексера / синтаксического анализатора (как вы, вероятно, можете сказать, это действительно просто повод для игры)

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

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

    A Dog is a mammal.  It may Bark and Run.  To Run it
uses its feet to move forward. It does Lay.

... тоже переведет ...

public class Dog : Mammal{

    public Feet Feet { get; set;}

    public virtual void Bark() {}
    public virtual void Run() {
        this.Feet.MoveForward();
    }
    public void Lay(){}
}

Ответы [ 9 ]

13 голосов
/ 20 мая 2009

Если вы хотите, чтобы ваш дизайн был проинформирован чем-то экстремальным в направлении "естественности", Грэм Нельсон проделал действительно потрясающую новую работу над предметно-ориентированный язык программирования, основанный на естественном языке. Система называется Информ 7 и, по моему мнению, будет достаточно погашать анализ.

Одна проблема с Inform 7 заключается в том, что презентация полностью ориентирована на непрограммистов. Нелегко узнать даже, что такое синтаксис! Но я весьма впечатлен результатами, и я считаю, что есть некоторые новые обязательные конструкции, которые предлагают действительно новые идеи - это не просто старые вещи в очень привлекательной упаковке. Стоит проверить!

7 голосов
/ 20 мая 2009

Действительно, я не думаю, что было бы хорошей идеей сделать код более похожим на естественный язык. Это станет слишком многословным. Есть причина, по которой никто не использует COBOL очень мало людей охотно использует COBOL:)

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

3 голосов
/ 25 августа 2009

Я поддержу предложение взглянуть на Inform 7. За последний месяц или около того я писал интерактивную беллетристику с Inform7, и это действительно впечатляющий язык. Я нахожу это освежающим отходом от языков, которые я обычно кодирую, потому что я все еще создаю что-то, но описываю это гораздо более естественным образом.

Например, это была бы совершенно правильная (хотя и короткая) программа в Inform7:

The Building Lobby is a room.  "You are standing in the lobby of a building."
There is a supporter called desk here.  "A large reception desk is to your right."  
There is a device called lamp on the desk which is switched off.  
There is a container called trash can on the floor next to the desk. 
There is a thing called crumpled paper in the trash can.
2 голосов
/ 20 мая 2009

Я знаю одну форму английского языка, которая пытается быть столь же строгой, как и язык программирования (и терпит неудачу): легальная. Адвокат обучен писать однозначно на английском языке или что-то неопределенно напоминающее английский. (Много латыни, некоторые магические фразы и т. Д.)

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

Это на самом деле проблема не в технологии, а в природе естественных и искусственных языков.

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

1 голос
/ 05 июля 2009

Ваше заявление:

A Dog is a mammal.  
It may Bark and Run.  
To Run it uses its feet to move forward. 
It does Lay.

Не похоже на настоящий естественный язык, но является формой контролируемого языка .

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

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

Every dog is a mammal.
Every dog may bark, or run.
To run is a forward movement.
Every dog uses its feet to run.
Every dog does lay.

(хотя это время от времени теряет представление об укладке)


Что подразумевается под «использованием»?

Что подразумевает "использование" в вашем примере?

И я описывал методы экземпляра объекта «Собака». Я никогда не говорил ничего подобного: «Спот - это собака. Пятно начинает бежать. »

Является ли "Собака" объектом, или вы имели в виду класс всех собак? Вы, похоже, имели в виду всех собак, и большинство контролируемых языков требуют этого различия. «Собака - это млекопитающее» против «Собака в саду». Это называется "проблема слона" в книгах НЛП.

Для меня это создаст экземпляр и скажет экземпляру запустить.

Я не знаю, как бы описать статический метод для собаки.

В естественном языке не существует такого понятия, как «статический метод», так почему вы ожидаете, что сможете описать такое в чем-то, производном от естественного языка?

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

1 голос
/ 20 мая 2009

это предложение неверно

Мне нравится математика и программирование, потому что они довольно абсолютные.

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

Я полагаю, что перевод естественного языка в конкретную семантику намного сложнее, чем извлечение неопределенного значения из предложения через НЛП. Если не считать предложений типа:

call method on sigkill then quit program

Что в значительной степени похоже на структуру SQL.

Вы могли бы пойти на некоторую форму самоопределяющейся, аксиоматически-подобной семантической установки (например, Self или подобную) с некоторой близостью лямбда-исчисления. edit : Похоже на Лисп. Я убираю это утверждение .. ()) ((())) () ()

Два примера из смежного вопроса - это LOLCODE и Inform7 ... оба из которых я не хотел бы программировать.

1 голос
/ 20 мая 2009
0 голосов
/ 14 октября 2009

Взгляните на функцию разбора Rebol. Он может определять DSL на основе правила. Вы могли бы легко оправдать ваши ожидания с минимальным кодом

0 голосов
/ 20 мая 2009

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

...