Własny język programowania

Własny język programowania
klexprogramista234
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 13 lat
  • Postów:2
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ąć.

RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około rok
21

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

edytowany 1x, ostatnio: Rev
Misiekd
miałem napisać, że 3 i 4 linijka postu się wykluczają wzajemnie :P
rincewind
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 8 lat
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. ;)


Zobacz pozostały 1 komentarz
rincewind
Niby tak. Ale bez parsera się nie obejdzie, a i sam interpreter nie jest banalną sprawą. Chyba, że chodzi o kalkulator ONP. :P
Patryk27
Heh. Sam kiedyś pisałem własny język programowania. Skończyłem po 5 miesiącach, kiedy zaczynałem do mojego języka dodawać struktury; przestałem wtedy rozumieć, co piszę :P
rincewind
Ech, skąd ja to znam... ;) Ja poddałem się po ponad roku, gdy próbowałem dodać metody do struktur. Najgorszy był kod wynikowy, który miał działać na maszynie bez oddzielnych sekcji kodu i danych, bez stosu, tylko dwoma rejestrami i 16 rozkazami, w tym NOP. :P
Demonical Monk
@Patryk27: Z reguły zanim zaczniesz replikować język pokroju C należałoby nauczyć się pisać kalkulator ONP...
Patryk27
Demonical Monk - istny demotywator.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:minuta
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

edytowany 1x, ostatnio: Azarien
mychal
  • Rejestracja:ponad 15 lat
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Przedmonitorze Górne
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.


I fart u die.
edytowany 1x, ostatnio: mychal
rincewind
Polecam Boost.Spirit. Trudno zacząć, ale potem bardzo procentuje. :)
Azarien
flex/bison fajne na początek są, ale czuć od nich staroo-o-o-ooo-ścią…
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.

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
11

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


0

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

Zobacz pozostałe 7 komentarzy
Patryk27
Nieco przesadziłem ;)
Demonical Monk
Skryptówki masz nawet w swoim kochanym Tibja Serwerze, to co jest większe zakresowo? Silnik gry czy interpreter jako interpreter? Bo jeśli jedno zawiera drugie, to już chyba przesądzone...
Patryk27
BTW: nie gram w Tibię...
xeo545x39
A nawet jeżeli gra i umie grać normalnie, a nie jak jakieś neo, to czemuż by nie jak mu się podoba? ;p
0

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

CK
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 13 lat
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!

MJ
Tak dodam tylko, że odnośnie metaprogramowania jest mnóstwo w standardzie C++11
Spine
  • Rejestracja:około 22 lata
  • Ostatnio:5 minut
  • Postów:6666
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ł.


🕹️⌨️🖥️🖱️🎮
edytowany 4x, ostatnio: Spine
KR
  • Rejestracja:prawie 16 lat
  • Ostatnio:6 miesięcy
  • Postów:2514
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


░█░█░█░█░█░█░█░█░█░█░█░
edytowany 1x, ostatnio: krwq
msm
Administrator
  • Rejestracja:około 16 lat
  • Ostatnio:5 miesięcy
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...

szypxx
Nawet nauczyłem sie płynnie wymawiać twój nick: teskatlipoka ^^
RE
ja też: emesem.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:minuta
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++.

rincewind
Przesadzasz. Nie składa się z "haków i kruczków", tylko intensywnie wykorzystuje programowanie na szablonach. To jest dość trudno opanować. Cały Boost mocno wykorzystuje szablony, ale po poznaniu ich w stopniu średnio-zaawansowanym wszystko staje się naprawdę czytelne. Jak dla mnie -- o wiele bardziej od YACC + FLEX. A co do dokumentacji -- nie jest zła. Są w Booście rzeczy udokumentowane o wiele gorzej. :P Jest kilka przykładów i reference; to wystarcza, chyba że ktoś potrafi się uczyć tylko z tutoriali.
Spine
  • Rejestracja:około 22 lata
  • Ostatnio:5 minut
  • Postów:6666
0

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


🕹️⌨️🖥️🖱️🎮
edytowany 1x, ostatnio: Spine

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.