Własny język programowania

0

Jak to zrobić?
Szukałem bardzo długo w internecie i nic.
Myślę że bym sobie poradził.
Ale nie wiem kompletnie jak zacząć.

21

Fakt, że nie możesz znaleźć odpowiedniej literatury w google zdecydowanie przesądza o tym, że nie, nie poradziłbyś sobie.

0

http://mgc.im.pwr.wroc.pl/dyd/jftt2011.html -- to są materiały z języków formalnych na PWr. Dają minimalne podstawy do napisania własnego banalnego kompilatora. Powodzenia. ;)

0

Jak to zrobić?
Ale nie wiem kompletnie jak zacząć.
Jak będziesz miał wystarczającą wiedzę, to będziesz wiedział jak zacząć. A i to jeszcze daleko będzie od ukończenia

0

do parsowania i interpretacji można użyć duetu flex + bison.
EDIT: nic nowego nie wniosłem. Jest o tym w linku od rincewind.

0

Jak to zrobić?

Może ja jako autor języka skryptów (który, nie chwaląc się jest w miarę niezły i ciągle go rozwijam i używam ale nie publikuję) wypowiem się tak: Siadasz, uruchamiasz IDE i zaczynasz pisać. Zaczynasz od czegoś prostego, a potem dodajesz nowe rzeczy. Jeśli uznasz że obecny kod jest zbyt skompilowany/nieczytelny/wywala się/jest zrobiony źle to piszesz od nowa. I tak w kółko, póki nie uznasz że jest 'okej'.
Zakładam że znasz jakiś język programowania (naiwny jestem) więc naucz się programować, potem pisz swój język. Jak będziesz mieć jakieś konkretne pytania to pytaj.

11

Zacznij od wymyślenia nazwy dla swojego nowego języka :D

0

qrcze to jest temat w stylu legendarnych "jak stworzyć grę"

0

Radzę zacząć od napisania kompilatora do jakiegoś języka - to moim zdaniem jest łatwiejsze.

2

Sam rozważam możliwość skonstruowania własnego jezyka. Dlatego nie dziwi mnie sytuacja, że ktoś miewa trudność w poszukiwaniu materiałów. To niszowy temat także znalezienie czegoś konkretnego wymaga więcej zaangażowania, cierpliwości, i szczęścia :-) niż w przypadku szukania treści do skrobania własnej strony w pehapie.

Na początku polecam zacząć od zaprogramowania własnego języka skryptowego. Akurat w tym przypadku raczkowanie jest łatwiejsze i szybciej można do czegoś sensownego dojść. Poniżej umieszczam kilka linków do materiałów na ten temat.

C++ sztuka programowania - http://helion.pl/ksiazki/c-sztuka-programowania-herbert-schildt,cpszpr.htm
Książka przedstawia proste projekty z wykorzystaniem C++. Perełką tej publikacji jest ostatni rozdział, który opisuje krok po kroku jak zbudować własny mini intepreter C++. :)

Z tej książki na początek dowiesz całkiem sporo, ale ostrzegam, to nie jest łatwa książka. Implementacja tego interpretera opiera się na niskopoziomowym kodzie, tzn. ten kod jest bliższy językowi C niż możliwościom C++. Natomiast autor zaznacza, że starał się programować to tak, by było bardziej przejrzyście niż wydajnie - co mu moim zdaniem dość komicznie wyszło.

Tej książki nie dostaniesz na helione. Szukaj w innych internetowych księgarniach albo na aukcjach.

Lekcje programowania najlepsze praktyki. -http://helion.pl/ksiazki/lekcja-programowania-najlepsze-praktyki-brian-w-kernighan-rob-pike,prapro.htm

Książka ogólnie mało mówi o tworzeniu języków programowania, ale zawiera z 5 kartek w ostatnim rodziale na temat budowy własnego interpretera. Nie mam tej ksiażki w domu, widziałem ją chwile, ale zachęcam do sprawdzenia tej książki w księgarniach, może dowiesz się czegoś ciekawego.

Złośliwiec na swojej stronie Dark Cult of C++ http://darkcult.nazwa.pl/wiki/index.php/Download napisał artykuł na temat tworzenia własnego języka skryptowego. Treść jest pisana zabawnym tonem, ale implementacja pozostawia sobie wiele do życzenia. Warto przyjrzeć się, ale nie polecam tylko na tym polegać.

Odnośnie interpreterów. Łukasz Czerwiński robiąc magisterke utworzył kompilator, ale przed tym wykonał jeszcze interpreter. Swoje rozwiązanie przedstawia na stronie: http://www.lukaszczerwinski.pl/projects.html

W przypadku tworzenia języków warto też zainteresować się tematem języków domenowych. Akurat to nie są języki jak C++ - czyli przeznaczone do ogólnego użyku, lecz do specyfistycznych zastosowań. (Niektórzy sądzą - między innymi autor książki http://helion.pl/ksiazki/mistrz-programowania-zwieksz-efektywnosc-i-zrob-kariere-neal-ford-david-bock,mispro.htm, że rozwój języków programowania własnie w tym kierunku się potoczy. )

Języki domenowe są o tyle ciekawsze od tych zwykłych, że można je osadzać w innych językach. Na przykład możesz programować sobie w C++ i używać w nim także swój własny język przeznaczony do konkretnych problemów. Z tego co wiem to RoR ma własny język domenowy przeznaczony do mapowania obiektów w bazie danych. Ogólnie to fajna sprawa.

Jeśli chciałbyś się czegoś dowiedzieć na ten temat zachęcam nabyć książkę (zaznaczam, że treść nie jest taka łatwa):
http://helion.pl/ksiazki/jezyk-c-metaprogramowanie-za-pomoca-szablonow-david-abrahams-aleksey-gurtovoy,cppmet.htm

Inna sprawa o jakiej chciałem wspomnieć to fakt, że język programowania nie musisz tworzyć tylko w oparciu o C++. Są lepsze sposoby, np. język Haskell. W tym języku łatwiej poradzisz sobie z opisem gramatyki, dzięki czemu tworzenie języka okaże się łatwiejsze i bardziej przyjemne.

Jeszcze taka uwaga na temat tworzenia języków mi sie przypomniała. Kiedyś to zajęcie było bardziej mistyczne, bo mało kto wiedział jak należy programować kompilatory - tworzono je metodą prób i błędow w oparciu o własną intuicję. Poczytać o tym możesz w książce: http://helion.pl/ksiazki/wielkie-umysly-programowania-jak-mysla-i-pracuja-tworcy-najwazniejszych-jezykow-federico-biancuzzi-shane-warden,wieumy.htm?gclid=CK-3ssrh66wCFZQhtAod60O2MQ

Także nie łam się jeśli nie będziesz wiedział czegoś od A do Z; To raczej zdrowa norma w tego typu projektach ;-)
Udanej zabawy!

0

Dab z Warsztatu ostatnio się wysilał nad własnym językiem programowania...
http://warsztat.gd/articles.php?x=view&id=452 - tutaj masz trochę materiałów jego autorstwa na ten temat

IMHO tworzenie własnego języka nie ma zbytnio sensu. Chyba, że Ciebie to bardzo, ale to bardzo interesuje, albo masz genialny pomysł jak ulepszyć któryś z istniejących języków - poprawki do składni itp. Aczkolwiek trzeba się w tym trochę wprawić, żeby powstały kompilator/interpreter sprawnie i wydajnie działał.

0

zobacz sobie moją implementację interpretera brainfucka. możesz na podstawie tego napisać jakiś bardziej rozbudowany język:
http://4programmers.net/Forum/Off-Topic/Oceny_i_recenzje/188378-symulator_oraz_generator_rozwiazan_w_brainfucku

1

@krwq: Weź, ja swój mały interpreter brainfucka (nie napiszę po co mi bo to ściśle tajne) napisałem w 20 linijkach z czego jakieś 10 kodu :p.

@autor: Jeśli chcesz wprowadzić tylko poprawki do składni jakiegoś języka (albo np. nowe konstrukcje składniowe) to stwórz po prostu preprocesor który zmienia twój rewolucyjny język na np. C++.

Jeśli chcesz stworzyć swój własny, niepodobny do innych język programowania (a myślę że raczej robisz po prostu klon C), zacznij od nauki dobrej obsługi Google. Piszę bez złośliwości, to jest po prostu podstawa żeby coś zrobić (nie pytając o dosłownie każdą po kolei rzecz na forum). Materiałów jak stworzyć prosty język programowania (tzn. kompilator/interpreter do niego, do stworzenia języka wystarczy kartka papieru) jest w sieci naprawdę pełno...

0

Polecam Boost.Spirit. Trudno zacząć, ale potem bardzo procentuje. :)
Z ciekawości zajrzałem cóż to. „Trudno zacząć”!? Dokumentacja jest tragiczna, brakuje działających i kompletnych przykładów.
Sama składnia jest w 1/4 fajna, a w 3/4 składa się z haków i kruczków by utrzymać fajność tej 1/4…
Nie mówię że to nie działa, ale opanowanie przedpotopowego yacc-a zajęło mi dużo mniej czasu.

stwórz po prostu preprocesor który zmienia twój rewolucyjny język na np. C++.
i tak się często robi, choć może kanonicznym przykładem jest generowanie C a nie C++.

0

Jakby się zastanowić, to na początek może spróbować: flex+bison :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1