2010-12-30 15 views
10

Większość języków pozwala na "tweek" do pewnych rozszerzeń części składni (C++, C#) i/lub semantyki, których będziesz używać w swoim kodzie (Katahdin, lua). Ale nie słyszałem o języku, który może całkowicie zdefiniować, jak będzie wyglądał twój kod. Więc nie istnieje jakiś język, który już istnieje, który ma takie możliwości nadpisaniasyntax zdefiniować semantykę?Czy istnieje język programowania z semantyką zbliżoną do języka angielskiego?

Przykład tego, co chcę zrobić, to w zasadzie z kodu C# poniżej:

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

chcę nie być w stanie napisać powyższy kod w moim idealnym językiem tak:

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

zalety, które przychodzą mi do głowy, patrząc z perspektywy kodera w tej „wyimaginowanym” język to:

  1. to bardzo jasne WH w to się dzieje (samoopisowe) - to jest po prostu angielski, nawet dzieciak zrozumiałby mój program Ukrywa wszystkie komplikacje, które muszę napisać w C#. Ale dlaczego powinno mnie to obchodzić, aby dowiedzieć się, że if arytmetyczne operatory itp ponieważ nie są już realizowane

niedogodności, które widzę dla kodera, który będzie utrzymać ten program to:

  1. Może byś wyrazić ten program inaczej ode mnie, więc nie wszystkie informacje, które wypowiedziałem w swoim zdaniu, można uzyskać w postaci
  2. Programy mogą być dość szczegółowe i trudne do debugowania, ale jeśli to możliwe, nawet w pobliżu tego typu składni, może więcej osób będzie zacząć programowanie w prawo? To byłoby niesamowite, myślę. Mogę iść do pracy i po prostu napisać esej narysować kwadrat na winform jak ten:

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.

w powyższym kodzie parser musi zasadniczo domyślać, że chcę użyć bezimienny kwadratowy z w poprzednim zdaniu, ciężko byłoby napisać taki inteligentny parser, ale jest to takie proste, co chcę zrobić.

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

W powyższym kodzie „zasadniczo” kompilator musi: 1) generowania programu obsługi zdarzeń 2) sprawdzić, czy istnieje jakikolwiek kwadrat w środku formie, a jeśli jest - 3) ukryć formularz Wygląda na to, że bardzo trudno jest to zrobić, ale nie wygląda to na niemożliwe IMO mi to przynajmniej przybliża (mogę osobiście wygenerować parser do wykonania 3 kroków powyżej np. & jest to zasadniczo to samo, co robić to w jakikolwiek sposób, dodając nawet w C# a.MyEvent=+handler;, więc nie widzę tutaj problemu), więc myślę, że może ktoś już zrobił coś takiego? Czy istnieje jakiś praktyczny ciężar złożoności, aby stworzyć taki styl programowania w stylu eseju, którego nie widzę? Chodzi mi o to, co jest gorsze, jeśli parser nie jest tak dobry?- program padnie więc musiał ponownie słowo to :)

+0

Znam wielu ludzi, którzy mówią w LOLspeak –

+6

Nie ma było wiele prób "języków semantycznych", a tylko 2 rzeczy są spójne: 1.) wyglądały jak bałagan i 2.) nigdy nie były tak naprawdę semantyczne. –

+0

Moim zdaniem, twój "idealny język" nie jest wcale jasny. Przeczytałem pierwszy przykład: "jeśli jakikolwiek owoc jest jabłkiem Macintosha, a następnie zliczyć cenę całkowitą o 50%", a nie "dla każdego owocu, który jest jabłkiem Macintosha, zdyskontuj jego cenę o 50%". Z drugiej strony kod C# jest całkowicie jasny. –

Odpowiedz

11

Check out:

The Osmosian Order of Plain English Programmers

Kod Przykład:

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 to po prostu głupio niesamowite. W tym celu mogę użyć mojego "czasu Google". : 3 – birryree

+0

Czy mój komputer eksploduje, jeśli uruchomię plik sample.exe z pliku zip, który mogę pobrać ze strony, z którą został połączony? –

+0

@Martin: Moja eksplodowała, strzeż się tego ;-) – Sarfraz

5

Niektórzy projektanci interaktywne fiction używać języka składnia bardzo zbliżona do języka angielskiego. Oto niektóre kodu Inform 7, które można 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." 

I uczył kurs, który używany Poinformuj 7. Jednym z wykładowców miał wrażenie przypisanie było zaprojektowanie, nie napisać grę. Więc zaznaczył programy, czytając je, nie zdając sobie sprawy, że były to rzeczywiste programy.

+0

Bardzo ładne, nie mogłem tego znaleźć. dzięki! – user44298

2

nie sądzę, że będzie to łatwe zadanie, ani nie myślę, że ma zamiar ułatwić życie debugowania

Jak można poradzić sobie z tymi problemami?

  • błędy ortograficzne
  • różne dialekty w różnych częściach świata
  • różnych dialektów w tej samej części świata
  • synonimy
  • których część zdania pan przeanalizować w pierwszej kolejności?
  • łza (rip) i łza (z oka) oba słowa są takie same, ale oznaczają dwie różne rzeczy.

Przynieś COBOL czy można zapamiętać "Walk Zachód", "Zbadaj drzwi", "Push drzwi", "drzwi otwartych", "Użyj klucza na drzwiach" :)

edit - jak czy mógłbyś to napisać?

+0

Tak, prawda, debugowanie byłoby szalenie trudne. Jeśli są błędy ortograficzne, można je wskazać, choć myślę? – user44298

0

Spróbuj użyć języka programowania o nazwie "Google" - ma on naturalny angielski interfejs, a fragment kodu odrzuca wszystkie sugerowane przez Ciebie odpowiedzi. Co ciekawe zaledwie sześć minut po poprosił Cię na to pytanie, to bardzo strona jest nr 1 dla zapytania:

sprawdzić, czy jakieś owoce są Macintosh jabłka i zniżka ceny o 50%

pomocą Google API i myślę, że masz podstawę naturalnego angielskiego języka programowania.

+0

Wyszukiwarka Google używa [interfejsu użytkownika języka naturalnego] (https://en.wikipedia.org/wiki/Natural_language_user_interface), ale nie jest to [programowanie w języku naturalnym] (https://en.wikipedia.org/wiki/Natural_language_programming) system. –

1

Napisałem rozszerzalny kompilator języka angielskiego na język Python o nazwie EngScript, który konwertuje uporządkowany język angielski na działający kod w języku Python.

To jest przykład kodu 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"} 

Jest to wyjście który został wygenerowany przez kompilator EngScript:

print(pythonFunctions.stringFromTextFile("README.txt")) 
print(pythonFunctions.writeStringToFile("ExampleText.txt", "Woohoo!")) 
print("EngScript"[0:(3 - 1)+1]) 
Powiązane problemy